|
369 / 225 / 53
Регистрация: 18.10.2017
Сообщений: 2,394
|
|||||||||||||||||||||
Драйвер для работы с COM портом в Linux 5.428.10.2021, 21:04. Показов 2065. Ответов 11
Метки нет (Все метки)
Здравствуйте!
Спрашиваю здесь, т.к. раздел "Написание драйверов", похоже, весь для Windows. Просьба сказать, где можно найти описание того, как для ядра 5.4 писать драйвера для работы с COM-портами или где можно найти пример такого драйвера. Сам я драйверо не писал, только однажды написал простенький модуль ядра. ***************** Есть плата MIC-3612 от Advantech с шиной cPCI и COM-портами, но драйвер для неё только старый, с ядром 4.15 работает, а для ядра 5.4 драйвера нет. В дравйвере используется структура tty_operations с элементом:
В ядре 5.4 в структуре tty_operations вместо proc_fops такая строка:
Т.е. элемент типа file_operations, похоже, должен быть отдельно, но всё равно я не знаю, что делать с вышеприведёнными структурами, нужно описани или пример, а лучпе и то и другое. В обоих ядрах структуры seq_file и seq_operations одинаковы, но я не знаю, как их приспособить к строке int (*proc_show)(struct seq_file *, void *); что должна делать proc_show(), что передаваться через (void *). *****************
0
|
|||||||||||||||||||||
| 28.10.2021, 21:04 | |
|
Ответы с готовыми решениями:
11
Класс для работы с com портом Программа для работы с com портом Библиотека для работы с COM портом |
|
Почетный модератор
11560 / 4354 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
|
|
| 28.10.2021, 22:04 | |
|
А как именно заполняется этот file_operations? Могу предположить, что он и не нужен для tty.
Можете выложить тот драйвер... просто любопытно посмотреть, какие колбеки там используют.
0
|
|
|
369 / 225 / 53
Регистрация: 18.10.2017
Сообщений: 2,394
|
|
| 28.10.2021, 22:22 [ТС] | |
|
Humanoid, а выше приведено, там, где .owner, .open, .read и т.д.
Это ведь необходимо для любого модуля, прежде всего .owner. Текст сейчас поищу.
0
|
|
|
369 / 225 / 53
Регистрация: 18.10.2017
Сообщений: 2,394
|
|
| 28.10.2021, 22:31 [ТС] | |
|
Humanoid, пробую вложить архив, каталог 4.15. Там в *.zip исходный архив.
0
|
|
|
Почетный модератор
11560 / 4354 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
|
||||||
| 28.10.2021, 22:34 | ||||||
|
Скорее всего, вся это работа с файлами теперь делается в более высокоуровневом слое. Например, в том же 4.15 нашёл всего пару драйверов serial, которые использовали file_operations... и то там эти колбеки заполнялись:
В общем, это всё похоже на вывод отладочной информации, которая для работы не нужна. Попробуйте закомментировать присвоение uart_proc_fops для tty_operations.
0
|
||||||
|
369 / 225 / 53
Регистрация: 18.10.2017
Сообщений: 2,394
|
|
| 28.10.2021, 22:39 [ТС] | |
|
Humanoid, благодарю, буду пробовать.
Забыл сказать, что для ядра 5.4 в Makefile надо "SUBDIRS" заменить на "M". Но ведь модуль без .owner невозможен?
0
|
|
|
Почетный модератор
11560 / 4354 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
|
|||||||||||
| 28.10.2021, 23:08 | |||||||||||
|
Закомментировал строку
Кстати, драйвер 8250 есть уже довольно давно в основной ветке ядра. Он не работает с этим адаптером? Добавлено через 2 минуты Если так не будет работать, то можете вместо этой строки указать
0
|
|||||||||||
|
369 / 225 / 53
Регистрация: 18.10.2017
Сообщений: 2,394
|
|
| 28.10.2021, 23:12 [ТС] | |
|
Humanoid, ещё раз благодарю, буду пробовать. Не знаю, успею ли завтра.
0
|
|
|
369 / 225 / 53
Регистрация: 18.10.2017
Сообщений: 2,394
|
||||||
| 29.10.2021, 13:48 [ТС] | ||||||
|
Humanoid, вроде бы драйвер работает. Достаточно оказалось именить одну строку по Вашему совету:
0
|
||||||
|
0 / 0 / 0
Регистрация: 22.11.2024
Сообщений: 1
|
|
| 22.11.2024, 11:36 | |
|
Коллеги, а для ядра 5.10 можно пересобрать драйвер?
Добавлено через 11 минут Пробовал на ядре 4.19 в ALT Linux 10.2 собрать драйвер, который здесь прикреплен, но он не собирается из-за ошибки в serial_core.o Если не сложно, посоветуйте как поправить serial_core.o, чтобы убрать ошибку? [root@ktm-test 4.15]# make -w -C /lib/modules/4.19.252-xenomai-alt1.cip78.23/build/ M=/tmp/adv950_source_v3.42.6/4.15 modules make[1]: вход в каталог «/usr/src/linux-4.19.252-xenomai-alt1.cip78.23» CC [M] /tmp/adv950_source_v3.42.6/4.15/8250.o CC [M] /tmp/adv950_source_v3.42.6/4.15/8250_pci.o CC [M] /tmp/adv950_source_v3.42.6/4.15/serial_core.o /tmp/adv950_source_v3.42.6/4.15/serial_core.c: In function ‘uart_port_startup’: /tmp/adv950_source_v3.42.6/4.15/serial_core.c:234:21: error: ‘ASYNC_CTS_FLOW’ undeclared (first use in this function) 234 | if (port->flags & ASYNC_CTS_FLOW) { | ^~~~~~~~~~~~~~ /tmp/adv950_source_v3.42.6/4.15/serial_core.c:234:21: note: each undeclared identifier is reported only once for each function it appears in /tmp/adv950_source_v3.42.6/4.15/serial_core.c: In function ‘uart_change_speed’: /tmp/adv950_source_v3.42.6/4.15/serial_core.c:541:11: error: ‘ASYNCB_CTS_FLOW’ undeclared (first use in this function) 541 | set_bit(ASYNCB_CTS_FLOW, &port->flags); | ^~~~~~~~~~~~~~~ /tmp/adv950_source_v3.42.6/4.15/serial_core.c:546:13: error: ‘ASYNCB_CHECK_CD’ undeclared (first use in this function) 546 | clear_bit(ASYNCB_CHECK_CD, &port->flags); | ^~~~~~~~~~~~~~~ /tmp/adv950_source_v3.42.6/4.15/serial_core.c: In function ‘uart_set_info’: /tmp/adv950_source_v3.42.6/4.15/serial_core.c:1021:20: error: ‘ASYNC_INITIALIZED’ undeclared (first use in this function) 1021 | if (port->flags & ASYNC_INITIALIZED) { | ^~~~~~~~~~~~~~~~~ /tmp/adv950_source_v3.42.6/4.15/serial_core.c: In function ‘uart_hangup’: /tmp/adv950_source_v3.42.6/4.15/serial_core.c:1688:20: error: ‘ASYNC_NORMAL_ACTIVE’ undeclared (first use in this function) 1688 | if (port->flags & ASYNC_NORMAL_ACTIVE) { | ^~~~~~~~~~~~~~~~~~~ /tmp/adv950_source_v3.42.6/4.15/serial_core.c:1693:13: error: ‘ASYNCB_NORMAL_ACTIVE’ undeclared (first use in this function) 1693 | clear_bit(ASYNCB_NORMAL_ACTIVE, &port->flags); | ^~~~~~~~~~~~~~~~~~~~ /tmp/adv950_source_v3.42.6/4.15/serial_core.c: In function ‘adv_uart_suspend_port’: /tmp/adv950_source_v3.42.6/4.15/serial_core.c:2243:20: error: ‘ASYNC_INITIALIZED’ undeclared (first use in this function) 2243 | if (port->flags & ASYNC_INITIALIZED) { | ^~~~~~~~~~~~~~~~~ /tmp/adv950_source_v3.42.6/4.15/serial_core.c:2248:12: error: ‘ASYNCB_SUSPENDED’ undeclared (first use in this function); did you mean ‘ASYNC_SUSPENDED’? 2248 | set_bit(ASYNCB_SUSPENDED, &port->flags); | ^~~~~~~~~~~~~~~~ | ASYNC_SUSPENDED /tmp/adv950_source_v3.42.6/4.15/serial_core.c:2249:14: error: ‘ASYNCB_INITIALIZED’ undeclared (first use in this function); did you mean ‘RCU_INITIALIZER’? 2249 | clear_bit(ASYNCB_INITIALIZED, &port->flags); | ^~~~~~~~~~~~~~~~~~ | RCU_INITIALIZER In file included from ./include/linux/tty.h:12, from /tmp/adv950_source_v3.42.6/4.15/serial_core.c:27: /tmp/adv950_source_v3.42.6/4.15/serial_core.c: In function ‘adv_uart_resume_port’: ./include/uapi/linux/tty_flags.h:57:33: error: ‘ASYNCB_SUSPENDED’ undeclared (first use in this function); did you mean ‘ASYNC_SUSPENDED’? 57 | #define ASYNC_SUSPENDED (1U << ASYNCB_SUSPENDED) | ^~~~~~~~~~~~~~~~ /tmp/adv950_source_v3.42.6/4.15/serial_core.c:2352:20: note: in expansion of macro ‘ASYNC_SUSPENDED’ 2352 | if (port->flags & ASYNC_SUSPENDED) { | ^~~~~~~~~~~~~~~ /tmp/adv950_source_v3.42.6/4.15/serial_core.c:2371:13: error: ‘ASYNCB_INITIALIZED’ undeclared (first use in this function); did you mean ‘RCU_INITIALIZER’? 2371 | set_bit(ASYNCB_INITIALIZED, &port->flags); | ^~~~~~~~~~~~~~~~~~ | RCU_INITIALIZER /tmp/adv950_source_v3.42.6/4.15/serial_core.c: In function ‘adv_uart_handle_dcd_change’: /tmp/adv950_source_v3.42.6/4.15/serial_core.c:3066:20: error: ‘ASYNC_CHECK_CD’ undeclared (first use in this function) 3066 | if (port->flags & ASYNC_CHECK_CD) { | ^~~~~~~~~~~~~~ /tmp/adv950_source_v3.42.6/4.15/serial_core.c: In function ‘adv_uart_handle_cts_change’: /tmp/adv950_source_v3.42.6/4.15/serial_core.c:3117:20: error: ‘ASYNC_CTS_FLOW’ undeclared (first use in this function) 3117 | if (port->flags & ASYNC_CTS_FLOW) { | ^~~~~~~~~~~~~~ make[2]: *** [scripts/Makefile.build:304: /tmp/adv950_source_v3.42.6/4.15/serial_core.o] Ошибка 1 make[1]: *** [Makefile:1546: _module_/tmp/adv950_source_v3.42.6/4.15] Ошибка 2 make[1]: выход из каталога «/usr/src/linux-4.19.252-xenomai-alt1.cip78.23» make: *** [/tmp/adv950_source_v3.42.6/4.15/Makefile:32: all] Ошибка 2
0
|
|
|
Почетный модератор
11560 / 4354 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
|
||
| 23.11.2024, 01:08 | ||
|
Возможно, раньше этот файл инклудился внутри другого инклуда... можно попробовать его напрямую инклудить.
0
|
||
|
0 / 0 / 0
Регистрация: 06.04.2026
Сообщений: 1
|
|
| 06.04.2026, 08:58 | |
|
Может ли кто-нибудь пересобрать данный драйвер под Astra Linux 1.6 (ядро 4.15.3)?
0
|
|
| 06.04.2026, 08:58 | |
|
Помогаю со студенческими работами здесь
12
C# класс для работы с COM-портом терминал для работы с com портом. Не устанавливается компонент для работы с COM-портом Программа для работы с параллельным портом Простая программа для работы с СОМ-портом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|