Ubuntu 12.04.2 LTS 3.2.0-39-generic-pae
Привет, ПК, на котором я работаю, имеет 4 последовательных порта.
ttyS0 и ttyS1 работают правильно сразу после запуска,
ttyS2 и ttyS3 - нет.
вот соответствующие сообщения dmesg:
Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[ 1.050346] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 1.100595] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[ 1.144567] serial8250: ttyS2 at I/O 0x3e8 (irq = 4) is a 16550A
[ 1.188577] serial8250: ttyS3 at I/O 0x2e8 (irq = 3) is a 16550A
[ 1.383941] isapnp: No Plug & Play device found
[ 1.449179] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 1.477192] 00:07: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[ 1.498296] 00:08: ttyS2 at I/O 0x3e8 (irq = 7) is a 16550A
[ 1.524994] 00:09: ttyS3 at I/O 0x2e8 (irq = 7) is a 16550A
, чтобы заставить их работать, я должен перенастроить их, вызвав:
setserial /dev/ttyS3 baud_base 115200 auto_irq skip_test autoconfig
Перед переконфигурированием последовательного порта setserial сообщает следующее для последовательных портов:
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: 16550A, Port: 0x03e8, IRQ: 7
/dev/ttyS3, UART: 16550A, Port: 0x02e8, IRQ: 7
После переконфигурирования выдается сообщение:
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: 16550A, Port: 0x03e8, IRQ: 0
/dev/ttyS3, UART: 16550A, Port: 0x02e8, IRQ: 0
Последовательные порты снабжены микросхемой fintek f81866, которая поддерживает совместное использование IRQ, поэтому наличие начальных IRQ, равных 7, не должно быть проблемой. хотя установка IRQ на 0 является проблемой из того, что я понимаю в соответствии с man-страницей setserial IRQ 0 зарезервирован для канала 0 таймера.
Микросхема fintek f81866 поддерживает до 6 последовательных портов.
Поэтому я попытался добавить 8250.nr_uarts=8
в строку загрузки, но это ничего не сделало (насколько я знаю, я не знаю способа подтвердить, какие параметры загрузки были переданы).
Как это исправить? Что мне нужно сделать, чтобы они правильно настроены при запуске (если не считать собственного сценария инициализации)?
Заранее спасибо!
Вот еще один пример /var/lib/setserial/autoserial.conf
для промышленного ПК Advantech UNO-3072A
/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test
/dev/ttyS1 uart 16550A port 0x02f8 irq 3 baud_base 115200 spd_normal skip_test
/dev/ttyS2 uart 16950 port 0xcc00 irq 18 baud_base 921600 low_latency
/dev/ttyS3 uart 16950 port 0xc880 irq 18 baud_base 921600 low_latency
Если вы хотите загрузиться с этой конфигурацией, примененной к последовательному порту, вы можете изменить
/var/lib/setserial/autoserial.conf
для изменения конфигурации ttyS3 включая предложение, которое вы использовали, чтобы правильно перенастроить его.
Файл autoserial.conf используется в процессе загрузки скриптом /etc/rc0.d/K19setserial.
Вот мой собственный файл
/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test
/dev/ttyS1 uart 16550A port 0x02f8 irq 3 baud_base 115200 spd_normal skip_test
/dev/ttyS2 uart 16550A port 0x03e8 irq 4 baud_base 115200 spd_normal skip_test
#/dev/ttyS3 uart 16550A port 0x02e8 irq 3 baud_base 115200 spd_normal
/dev/ttyS3 baud_base 115200 auto_irq skip_test autoconfig spd_normal
.