抱歉,如果这是该问题的不正确地方,我目前不确定该问题处于哪个级别,因此我在押注。

系统是运行TI自己的SDK / LSP / BusyBox内核的LeopardBoard DM368。

默认情况下,系统具有一个启用的UART0 UART0,挂载为/ dev / ttyS0,它也通过bootargs console=ttyS0,115200n8 earlyprintk使用/调用。

我们希望将UART1启用为/ dev / ttyS1,因此已经完成了设置板载复用器,时钟等的低级板初始化代码。

引导时,低级初始化报告(通过我添加的printk)报告它已启用UART1,驱动程序代码也报告幸福:

[    0.547812] serial8250.0: ttyS0 at MMIO 0x1c20000 (irq = 40) is a 16550A
[    0.569849] serial8250.0: ttyS1 at MMIO 0x1d06000 (irq = 41) is a 16550A


但是,该端口未(可靠地)出现在/ dev /中,并且其状态(流控制位)存在差异,我怀疑这可能导致其挂起/从不传输:

cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A mmio:0x01C20000 irq:40 tx:97998 rx:0 CTS|DSR
1: uart:16550A mmio:0x01D06000 irq:41 tx:0 rx:0 DSR


如果我尝试从命令行修改它,则会收到错误消息:

>: stty -F /dev/ttyS1
stty: /dev/ttyS1: Inappropriate ioctl for device


奇怪的是,如果我将bootargs更改为console=ttyS1,115200n8 earlyprintk,则端口将正常工作,并且ttyS0已正确初始化并且也可以工作:

cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A mmio:0x01C20000 irq:40 tx:0 rx:0 CTS|DSR
1: uart:16550A mmio:0x01D06000 irq:41 tx:11563 rx:0 RTS|DTR|DSR


现在,这很好,但是我们的引导程序必须使用UART0,因此将所有控制台内容保留在ttyS0上并为我们的辅助通信使用ttyS1会很好。

编辑添加:我在serial_core.c中插入了一些printk,似乎从未为ttyS1调用uart_open(),我假设这是Linux init / startup序列中需要修改的东西吗?

现在,我要说明我不是一个顽强的Linux黑客,所以我很可能在内核代码,初始化序列等方面都遗漏了一些明显/愚蠢的东西。

任何想法,不胜感激!

最佳答案

Linux板上的一个很好的解决了它,我需要在某处插入mknod /dev/ttyS1 c 4 65

完全为什么在ttyS0或我不知道的任何端口是console的情况下发生(显然),但是现在最重要的是它起作用了!

评论/有关我的知识/后代为何会受到欢迎的原因的更多信息。

10-06 03:17