linux 0.11之tty

其实一直以来对/dev/tty* ./dev/tty,之类的文件就很有点疑惑。今天阅读了linux0.11相关的源码,了解了一下。

在linux0.11内核中字符设备只有三个(两种),一个是控制台设备(我理解就是本机的显示屏和键盘),另外两个是串行端口的串行终端设备。在内核中三个设备用一个tty_struct数组存储。tty_struct中我觉得离应用比较近的就是tty读队列和tty写队列两个主要成员。应用程序从指定的设备文件读取数据或是写入时,在底层实际都是通过对这两个对立操作完成.

我们在编程中使用open()打开指定设备文件,根据设备文件的类型选择读写函数。调用顺序是调用rw_char(READ,dev,buf,count,pos)。根据设备的主设备号,调用char_dev.c中的函数,linux0.11只提供了主设备号为4和5两个读写函数,分别是rw_tty(),rw_ttyx(),书上注释rw_ttyx是串口终端读写函数,rw_tty()是终端读写操作函数。其实实现上并没有太大不同,只是在函数rw_tty中会判断当前进程是否有对应的控制终端,,若有的话则调用rw_ttyx(),但是rw_ttyx中的参数Minor是从current->tty得来。在rw_ttyx函数中根据度读写动作调用tty_io.c 中的对应的读写函数tty_read 和tty_write.在tty_read和tty_write中就是根据minor参数执行的索引在上面说的tty_struct数组中需找tty_struct,读取tty读队列,写入tty写队列。

举例来说读取/dev/tty(在linux0.11下是一个主设备号为5,此设备号为0的字符设备),因为主设备号5,所以调用的是rw_tty,在rw_tty中检查当前进程的tty是否存在(current->tty>=0),若存在则使用该tty作为子设备号,调用函数读取控制台设备,两个串行端口的串行端口设备中的一个的读队列。调用结束。

写的比较乱,总结一下,如果主设备号为5则会根据次设备号读取或写入设备数组中的设备的队列,如果主设备号为4则会根据当前进程的tty作为次设备号操作设备数组中相应设备的队列。

ps:较高版本的内核的tty有鉴于本人水平不够,就不分析了,后面如果知道了会补上。Mark安静


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值