tty是一类char设备的通称,它们有相同的特性,比如对^C的处理,驱动使用tty_register_driver注册一个tty。
/dev/console是一个虚拟的tty,它映射到真正的tty上,如何映射等会再说。
console 有多种含义,这里特指printk输出的设备,驱动使用register_console注册一个console。 最后一个注册的conole称为prefer console,init进程的stdin, stdout和stderr都是这个conole
console和tty有很大区别:console是个只输出的设备,功能很简单,只能在内核中访问;tty是char设备,可以被用户程序访问。
实际的驱动比如串口对一个物理设备会注册两次,一个是tty,一个是console,并通过在console的结构中记录tty的主次设备号建立了联系。
在 内核中,tty和console都可以注册多个。当内核命令行上指定console=ttyS0之类的参数时,首先确定了printk实际使用那个 console作为输出,其次由于console和tty之间的对应关系,打开/dev/console时,就会映射到相应的tty上。用一句话说: /dev/console将映射到默认console对应的tty上。
顺便说一句,console=ttyS0和/dev/ttyS0包含相同的设备名字完全是巧合,不同也没事。
/dev/console是一个虚拟的tty,它映射到真正的tty上,如何映射等会再说。
console 有多种含义,这里特指printk输出的设备,驱动使用register_console注册一个console。 最后一个注册的conole称为prefer console,init进程的stdin, stdout和stderr都是这个conole
console和tty有很大区别:console是个只输出的设备,功能很简单,只能在内核中访问;tty是char设备,可以被用户程序访问。
实际的驱动比如串口对一个物理设备会注册两次,一个是tty,一个是console,并通过在console的结构中记录tty的主次设备号建立了联系。
在 内核中,tty和console都可以注册多个。当内核命令行上指定console=ttyS0之类的参数时,首先确定了printk实际使用那个 console作为输出,其次由于console和tty之间的对应关系,打开/dev/console时,就会映射到相应的tty上。用一句话说: /dev/console将映射到默认console对应的tty上。
顺便说一句,console=ttyS0和/dev/ttyS0包含相同的设备名字完全是巧合,不同也没事。