|
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,370
|
|||||||||||||||||||||
Драйвер для работы с COM портом в Linux 5.428.10.2021, 21:04. Показов 1838. Ответов 10
Метки нет (Все метки)
Здравствуйте!
Спрашиваю здесь, т.к. раздел "Написание драйверов", похоже, весь для 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 | |
|
Ответы с готовыми решениями:
10
Класс для работы с com портом Программа для работы с com портом Библиотека для работы с COM портом |
|
Почетный модератор
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
|
|
| 28.10.2021, 22:04 | |
|
А как именно заполняется этот file_operations? Могу предположить, что он и не нужен для tty.
Можете выложить тот драйвер... просто любопытно посмотреть, какие колбеки там используют.
0
|
|
|
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,370
|
|
| 28.10.2021, 22:22 [ТС] | |
|
Humanoid, а выше приведено, там, где .owner, .open, .read и т.д.
Это ведь необходимо для любого модуля, прежде всего .owner. Текст сейчас поищу.
0
|
|
|
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,370
|
|
| 28.10.2021, 22:31 [ТС] | |
|
Humanoid, пробую вложить архив, каталог 4.15. Там в *.zip исходный архив.
0
|
|
|
Почетный модератор
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
|
||||||
| 28.10.2021, 22:34 | ||||||
|
Скорее всего, вся это работа с файлами теперь делается в более высокоуровневом слое. Например, в том же 4.15 нашёл всего пару драйверов serial, которые использовали file_operations... и то там эти колбеки заполнялись:
В общем, это всё похоже на вывод отладочной информации, которая для работы не нужна. Попробуйте закомментировать присвоение uart_proc_fops для tty_operations.
0
|
||||||
|
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,370
|
|
| 28.10.2021, 22:39 [ТС] | |
|
Humanoid, благодарю, буду пробовать.
Забыл сказать, что для ядра 5.4 в Makefile надо "SUBDIRS" заменить на "M". Но ведь модуль без .owner невозможен?
0
|
|
|
Почетный модератор
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
|
|||||||||||
| 28.10.2021, 23:08 | |||||||||||
|
Закомментировал строку
Кстати, драйвер 8250 есть уже довольно давно в основной ветке ядра. Он не работает с этим адаптером? Добавлено через 2 минуты Если так не будет работать, то можете вместо этой строки указать
0
|
|||||||||||
|
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,370
|
|
| 28.10.2021, 23:12 [ТС] | |
|
Humanoid, ещё раз благодарю, буду пробовать. Не знаю, успею ли завтра.
0
|
|
|
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,370
|
||||||
| 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
|
|
|
Почетный модератор
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
|
||
| 23.11.2024, 01:08 | ||
|
Возможно, раньше этот файл инклудился внутри другого инклуда... можно попробовать его напрямую инклудить.
0
|
||
| 23.11.2024, 01:08 | |
|
Помогаю со студенческими работами здесь
11
C# класс для работы с COM-портом терминал для работы с com портом. Не устанавливается компонент для работы с COM-портом Программа для работы с параллельным портом Простая программа для работы с СОМ-портом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|