如何找到连接到哪个物理设备/dev/console?

15
有一个设备文件叫做/dev/console,其(major,minor)(5,1)。 当我使用串口控制台进行引导时,它会连接到我的UART端口,就像/dev/ttyS0一样。 但是当我禁用串口控制台进行引导时,/dev/console似乎连接到其他地方,而/dev/ttyS0始终连接到同一物理设备,即UART0。是否有任何指示(比如/proc/sys中的信息)显示这样的信息?我已经尝试了那里,但没有找到我想要的东西。 我开始跟踪Linux内核源代码以澄清它们之间的关系。有人能给我一些提示吗?何时、在哪里、如何以及确定/dev/console连接到哪个物理设备?
编辑:最新的发现是:
  1. /dev/console由内核参数的console=配置,getty使用该配置打开stdin/stdout/stderr。如果未指定console=,则将/dev/null作为stdin/stdout/stderr打开。但我不确定它们与/dev/console是否完全相同,这意味着/dev/console的I/O可以连接到不同的物理设备。
  2. 如果插入USB HID键盘并且未将console=配置为UART,则可以读取/dev/console。因此,/dev/console==/dev/null似乎没有多少意义。 需要更多调查。

1
尝试查看内核命令行中如何处理console=参数。 - sawdust
1
是的,我已经看过了,结果发现参数被传递到init,然后传递到getty_main(),这是busyboxgetty的实现。相关部分是关闭原始标准输入,然后根据传递的参数打开一个新的标准输入。因此,我正在寻找一种方法,可以从文件描述符中检索路径;因为我想知道如果没有指定console=,那么“默认”设备是什么。 - user1937358
2
你有一个文件 /sys/dev/char/5:1/active 吗?它应该包含实际设备的名称。 - Niall C.
“tty” 不是给你了吗? - Raúl Salinas-Monteagudo
如果我没记错的话,tty 命令会在使用 HID 设备时显示 /dev/console - user1937358
显示剩余2条评论
2个回答

9
我认为/sys/devices/virtual/tty/console/active就是你在寻找的内容。

很遗憾,在我的系统上没有这样的文件,它是一种基于ARM的嵌入式设备。到目前为止,我所学到的是控制台可以通过/etc/inittab进行配置。 - user1937358
2
在内核中,使用console=初始化的最后一个模块被配置为控制台。如果我理解正确,那么inittab用于配置将使用哪个tty终端来运行登录程序。 - agent.smith
3
FYI,Linux 2.6.35 没有这个文件,在一些更新的 Linux 系统中才会出现。 - pts
1
@CMCDragonkai:我相信这意味着tty7是活动VC,但/dev/console的输出会到达tty0 - Dolda2000
@CMCDragonkai:怎样?这只是意味着/dev/console被设置为转到 /dev/tty0 (也就是当前的 VC),但并不一定要这样设置。 - Dolda2000
显示剩余2条评论

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接