Помогите настроить UART на плате расширения на ISA.Решено, под спойлером:
Спойлер
1 В файл /etc/default/grub (ссылка на конфиг grub) изменить строку, добавив 8250.nr_uarts=XX,
где XX - количество COM-портов в системе (можно с запасом)
lrwxrwxrwx 1 root root 18 сен 6 11:47 /etc/default/grub -> ../sysconfig/grub2
#GRUB_CMDLINE_LINUX_DEFAULT=' quiet resume=/dev/disk/by-uuid/484b1841-2a8d-42e6-9d27-dbc756a41890 panic=30 splash'
GRUB_CMDLINE_LINUX_DEFAULT=' 8250.nr_uarts=16 quiet resume=/dev/disk/by-uuid/484b1841-2a8d-42e6-9d27-dbc756a41890 panic=30 splash 3'
2 запустить по root'ом
# update-grub
3 Создать файл /etc/udev/rules.d/09-serial.rules
Правила при создании устройств при загрузке
-rw-r--r-- 1 root root 575 ноя 22 10:58 /etc/udev/rules.d/09-serial.rules
4 Содержимое файла /etc/udev/rules.d/09-serial.rules
Параметр "uart 16550A" не проверен точно, но без него тип не определился
Параметр "baud_base 115200" - обязательное заклинание, не понятно что, но без него не работает
"port XXX" - базовый адрес порта I/O, шестнадцатиричный с префиксом "0x"
"irq XX" - номер линии прерывания
# RS-PC104
KERNEL=="ttyS4", RUN+="/bin/setserial /dev/%k uart 16550A port 0x0140 irq 7 baud_base 115200"
KERNEL=="ttyS5", RUN+="/bin/setserial /dev/%k uart 16550A port 0x0148 irq 7 baud_base 115200"
KERNEL=="ttyS6", RUN+="/bin/setserial /dev/%k uart 16550A port 0x0150 irq 7 baud_base 115200"
KERNEL=="ttyS7", RUN+="/bin/setserial /dev/%k uart 16550A port 0x0158 irq 7 baud_base 115200"
KERNEL=="ttyS8", RUN+="/bin/setserial /dev/%k uart 16550A port 0x0160 irq 7 baud_base 115200"
KERNEL=="ttyS9", RUN+="/bin/setserial /dev/%k uart 16550A port 0x0168 irq 7 baud_base 115200"
5 Перезагрузить компьютер
6 Проверить наличие файлов устройств
$ ls -l /dev/ttyS*
7 Проверить настройки COM портов
$ setserial -g /dev/ttyS*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS11, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS12, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS13, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS14, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS15, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS2, UART: 16550A, Port: 0x03e8, IRQ: 10
/dev/ttyS3, UART: 16550A, Port: 0x02e8, IRQ: 11
/dev/ttyS4, UART: 16550A, Port: 0x0140, IRQ: 7
/dev/ttyS5, UART: 16550A, Port: 0x0148, IRQ: 7
/dev/ttyS6, UART: 16550A, Port: 0x0150, IRQ: 7
/dev/ttyS7, UART: 16550A, Port: 0x0158, IRQ: 7
/dev/ttyS8, UART: 16550A, Port: 0x0160, IRQ: 7
/dev/ttyS9, UART: 16550A, Port: 0x0168, IRQ: 7
Вычислитель формфактора PC-104, ICOP VDX3-6726 (Vortex86DX3)
Плата расширения "Элкус" RS-PC104 (6 UART'ов, GPIO на шине ISA без PnP), базовый io 0x140, irq 7, совместимость по крайней мере с 8250 (декларируется разработчиком 16С550С).
Дистрибутив Simply 10.1 (установлен на диск на другой машине, так как н целевой графика отваливается, только консоль).
umane -a
Linux host 5.10.198-std-def-alt1 #1 SMP Wed Oct 11 00:33:53 UTC 2023 i686 GNU/Linux
Видно только встроенные в вычислитель 4 UART, внешние 6 UART на шине OC не видит. Под DOS'ом проверена принципиальная работоспособность в этой конфигурации железа (порты и прерывания).
В ядре задан параметр 8250.nr_uarts=16
вывод setserial -g /dev/ttyS*
Спойлер
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS11, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS12, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS13, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS14, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS15, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS2, UART: 16550A, Port: 0x03e8, IRQ: 10
/dev/ttyS3, UART: 16550A, Port: 0x02e8, IRQ: 11
/dev/ttyS4, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS5, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS6, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS7, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS8, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS9, UART: unknown, Port: 0x0000, IRQ: 0
На команды вроде
setserial /dev/ttyS4 port 0x140 irq 7
выдает invalid argument
Вариант установки другой сборки Linux приемлем.