在Linux中,和我们操作的终端相关的设备有很多。其中/dev/console是比较奇怪的一个。这个设备有两层含义。第一层含义是内核中printk等函数输出的终端;第二层含义是进入用户空间的操作终端。

/dev/console是预期说是一个虚拟的设备,不如说是一个设备列表。在驱动程序中,可以通过register_console()函数注册将自身注册成为console(或者说加载到console列表)。如果有多个设备都将自己注册为console的时候,那么默认的console就是最后一个注册的设备。但如果启动参数中指定了【console=设备名】的话,那这个参数中的设备才是默认的console。

正常情况下,内核中printk等函数的会把信息输出到默认的console。而用户空间的程序则会默认将自己的输出信息输出到自己所在的设备。比如通过串口联接的shell,就会将信息默认输出到串口上。