Ubuntu 12.04.2 LTS 3.2.0-39-通用-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
串行端口由支持 IRQ 共享的 fintek f81866 芯片提供,因此将初始 IRQ 设置为 7 应该没有问题。而将 IRQ 设置为 0 则是一个问题,因为根据我的理解,根据 setserial手册页IRQ 0 保留给定时器通道 0。
fintek f81866芯片支持最多6个串口。
因此我尝试将其添加8250.nr_uarts=8
到引导行,但没有任何作用(据我所知,我不知道如何确认已传递了哪些引导参数)。
出了什么问题?为什么启动时 ttyS2 和 ttyS3 配置不正确?
我该如何修复这个问题?我需要做什么才能在启动时正确配置它们(除了制作我自己的初始化脚本)?
提前致谢!
答案1
如果要在串行端口上应用此配置进行启动,您可以修改
/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
答案2
这是/var/lib/setserial/autoserial.conf
Advantech UNO-3072A 工业 PC的另一个示例
/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