如果对于这个问题这是错误的地方,我很抱歉,我目前还不确定问题的严重程度,所以我对我的赌注进行了对冲。
System是一个运行TI自己的SDK / LSP / BusyBox内核的LeopardBoard DM368。
默认情况下,系统启用一个UART,UART0,安装为/ dev / ttyS0,也可通过bootargs console=ttyS0,115200n8 earlyprintk
使用/调用。
我们想要将UART1作为/ dev / ttyS1启用,所以我们已经完成了设置pinmux,时钟等的低级板初始化代码。
在启动时,低级init报告(通过我添加的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会很好。
编辑添加:我将一些printk插入到serial_core.c中似乎永远不会为ttyS1调用uart_open(),我假设它是Linux init / startup中的东西需要修改的序列?
我现在要说明我不是一个强大的Linux黑客,所以我完全有可能在内核代码,初始化序列等方面错过了一些明显/愚蠢的事情。
非常感谢任何想法!
答案 0 :(得分:0)
Linux板上的一个好人解决了它,我需要在某处插入一个mknod /dev/ttyS1 c 4 65
。
很明显为什么ttyS0
或console
我不知道这个(显然)发生了,但现在重要的是它有效!
关于为什么欢迎我自己的知识/后代的原因的评论/进一步信息。