/dev/console是系统控制台,或者说是物理控制台,而/dev/ttyn则是虚拟控制台,你可以传导诸如console=ttyS1的启动参数给内核,使得ttyS1(第二个串口控制台)成为系统控制台。如果没有传导这个参数给内核,内核就会自动寻找可用的设备作为系统控制台,首先是VGA显示卡,其次才是串口。
/dev/console的初始早于虚拟控制台。启动信息都是打印到/dev/console。
single模式登录,也是登录到/dev/console
内核的printk信息,比如netfilter过滤了包的信息,也会打印到/dev/console,所以有人会问为何屏幕都是包过滤的信息。
/proc/sys/kernel/printk,控制了printk的level。
/dev/tty是当前进程连接的控制台,你可以echo something >/dev/tty 看看结果。
/dev/tty0则是当前前台的视频控制台,你也可以echo something看看。
/dev/tty1-n则是虚拟控制台。
晕。说错纠正啊。
/dev/console的初始早于虚拟控制台。启动信息都是打印到/dev/console。
single模式登录,也是登录到/dev/console
内核的printk信息,比如netfilter过滤了包的信息,也会打印到/dev/console,所以有人会问为何屏幕都是包过滤的信息。
/proc/sys/kernel/printk,控制了printk的level。
/dev/tty是当前进程连接的控制台,你可以echo something >/dev/tty 看看结果。
/dev/tty0则是当前前台的视频控制台,你也可以echo something看看。
/dev/tty1-n则是虚拟控制台。
晕。说错纠正啊。
tty是一类char设备的通称,它们有相同的特性,比如对^C的处理,驱动使用tty_register_driver注册一个tty。
/dev/console是一个虚拟的tty,它映射到真正的tty上,console有多种含义,这里特指printk输出的设备,驱动使用register_console注册一个console。
console和tty有很大区别:console是个只输出的设备,功能很简单,只能在内核中访问;tty是char设备,可以被用户程序访问。
实际的驱动比如串口对一个物理设备会注册两次,一个是tty,一个是console,并通过在console的结构中记录tty的主次设备号建立了联系。
在内核中,tty和console都可以注册多个。当内核命令行上指定console=ttyS0之类的参数时,首先确定了printk实际使用那个 console作为输出,其次由于console和tty之间的对应关系,打开/dev/console时,就会映射到相应的tty上。用一句话说: /dev/console将映射到默认console对应的tty上。
/dev/console是一个虚拟的tty,它映射到真正的tty上,console有多种含义,这里特指printk输出的设备,驱动使用register_console注册一个console。
console和tty有很大区别:console是个只输出的设备,功能很简单,只能在内核中访问;tty是char设备,可以被用户程序访问。
实际的驱动比如串口对一个物理设备会注册两次,一个是tty,一个是console,并通过在console的结构中记录tty的主次设备号建立了联系。
在内核中,tty和console都可以注册多个。当内核命令行上指定console=ttyS0之类的参数时,首先确定了printk实际使用那个 console作为输出,其次由于console和tty之间的对应关系,打开/dev/console时,就会映射到相应的tty上。用一句话说: /dev/console将映射到默认console对应的tty上。