linux /dev/console设备解析

本文解析了TTY和Console的概念及其在Linux系统中的作用。TTY是一种字符设备,而Console主要用于内核输出,二者虽然功能不同但可以通过特定结构关联起来。文章还介绍了如何通过内核参数设置默认的输出设备。
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上。

顺便说一句,console=ttyS0和/dev/ttyS0包含相同的设备名字完全是巧合,不同也没事。

/home # lsof -p 1072 1 /bin/busybox /dev/console 1 /bin/busybox /dev/console 1 /bin/busybox /dev/console 620 /bin/busybox /dev/console 620 /bin/busybox /dev/console 620 /bin/busybox /dev/console 620 /bin/busybox /etc/init.d/rcS 634 /sbin/udevd /dev/null 634 /sbin/udevd /dev/null 634 /sbin/udevd /dev/null 634 /sbin/udevd socket:[163] 634 /sbin/udevd socket:[164] 634 /sbin/udevd anon_inode:inotify 634 /sbin/udevd anon_inode:[signalfd] 634 /sbin/udevd socket:[167] 634 /sbin/udevd socket:[168] 634 /sbin/udevd anon_inode:[eventpoll] 889 /usr/sbin/dropbear /dev/null 889 /usr/sbin/dropbear /dev/null 889 /usr/sbin/dropbear /dev/null 889 /usr/sbin/dropbear socket:[232] 1065 /bin/busybox /dev/console 1065 /bin/busybox /dev/console 1065 /bin/busybox /dev/console 1065 /bin/busybox /etc/init.d/app_run 1067 /home/thml_net_core /dev/console 1067 /home/thml_net_core /dev/console 1067 /home/thml_net_core /dev/console 1067 /home/thml_net_core socket:[455] 1067 /home/thml_net_core /dev/vpss 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/ttyAMA1 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/mmz_userdev 1067 /home/thml_net_core /dev/sys 1067 /home/thml_net_core /dev/vb 1067 /home/thml_net_core /dev/mmz_userdev 1067 /home/thml_net_core /dev/ive 1067 /home/thml_net_core /dev/isp_dev 1067 /home/thml_net_core /dev/piris 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/watchdog 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/isp_dev 1067 /home/thml_net_core /dev/mem 1067 /home/thml_net_core /dev/vpss 1067 /home/thml_net_core /dev/vpss 1067 /home/thml_net_core /dev/venc 1067 /home/thml_net_core /dev/venc 1067 /home/thml_net_core /dev/venc 1067 /home/thml_net_core /home/sc_font.ttf 1067 /home/thml_net_core /dev/vi 1067 /home/thml_net_core /dev/rgn 1067 /home/thml_net_core socket:[405] 1067 /home/thml_net_core socket:[409] 1067 /home/thml_net_core socket:[450] 1067 /home/thml_net_core socket:[411] 1067 /home/thml_net_core socket:[413] 1067 /home/thml_net_core socket:[416] 1067 /home/thml_net_core socket:[419] 1067 /home/thml_net_core socket:[420] 1067 /home/thml_net_core socket:[421] 1067 /home/thml_net_core socket:[422] 1100 /usr/sbin/dropbear /dev/null 1100 /usr/sbin/dropbear /dev/null 1100 /usr/sbin/dropbear /dev/null 1100 /usr/sbin/dropbear pipe:[435] 1100 /usr/sbin/dropbear socket:[426] 1100 /usr/sbin/dropbear pipe:[435] 1100 /usr/sbin/dropbear /dev/ptmx 1101 /bin/busybox /dev/pts/0 1101 /bin/busybox /dev/pts/0 1101 /bin/busybox /dev/pts/0 1101 /bin/busybox /dev/tty解析
10-01
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值