启动时未配置第 3 和第 4 个串行端口

启动时未配置第 3 和第 4 个串行端口

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.confAdvantech 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

相关内容