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 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |