前言:
当前看官们对“重写console”大概比较看重,大家都想要学习一些“重写console”的相关知识。那么小编在网摘上网罗了一些对于“重写console””的相关内容,希望兄弟们能喜欢,小伙伴们快快来了解一下吧!uboot传递console究竟怎么填?ttyS0、ttyAMA0、ttySAC0傻傻分不清
个人认为:所有ttyXXX都是同一个东西,是为了避免linux识别错误而特意区分。
什么是tty?相信 StackExchange 的回答能解决你的疑惑——“What is the exact difference between a ‘terminal’, a ‘shell’, a ‘tty’ and a ‘console’?”
1. 为什么说是防止出错
历史科普不是本文想说的,本文主要回答:为什么uboot填写bootargs时console有这么多tty类型。似乎每遇到一种芯片都有独特的TTY设备。
考虑到linux的设备节点命名规则不难发现,同类型的设备有同样的前缀,后面以数字区分,如:/dev/sda1、/dev/sdb1、/dev/fb0、/dev/fb1。设备的序号根据添加顺序而定,platform_device和platform_driver同时match后则生成一个设备。
那么考虑这种情况:若所有tty串口都以ttyS为前缀 。板卡有4个串口,匹配设备和驱动时没把 调试串口 写在 第一行 ,那ttyS0就不是printk的默认输出设备。
就算4个串口匹配时调试串口写在第一行,还得考虑其他驱动呢,比如某个变态的USB转串口驱动也命名为ttyS0,而且上电前USB设备就插在板卡上,好嘞,系统启动后看不到任何信息。
于是有个取巧的方式,给4个串口中的调试串口取一个独一无二的名称 tty-I-am-special,板卡串口驱动复制一份,将 struct console 的name重命名为“tty-I-am-special”,那么无论设备和驱动如何匹配,调试串口就叫做 /dev/tty-I-am-special0。其他3个串口谁是谁,管他呢,反正最后加入文件系统后 __ls /dev/tty*__ 都能查询到。
console=tty-I-am-special0
2. 例子:如何确定填写内容
下面的例子源于iMX28处理器,调试串口叫DUART,应该填写 setenv bootargs ‘console=ttyAMA0,115200n1’。怎么判断的?
首先检查设备树对调试串口的描述,调试串口节点duart
接着查询哪个驱动的名称可能匹配“arm,pl011”或“arm,primecell”,很好,找到一个匹配的.c源文件,别高兴太早,再确认该文件确实被编译到内核。
最后确认该驱动里的tty全称是什么。
最后顺便看看其他驱动五花八门的tty命名。
标签: #重写console