linux设备模型之tty驱动架构分析

linux设备模型之tty驱动架构分析

ID:15390882

大小:353.50 KB

页数:15页

时间:2018-08-03

linux设备模型之tty驱动架构分析_第1页
linux设备模型之tty驱动架构分析_第2页
linux设备模型之tty驱动架构分析_第3页
linux设备模型之tty驱动架构分析_第4页
linux设备模型之tty驱动架构分析_第5页
资源描述:

《linux设备模型之tty驱动架构分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux设备模型之tty驱动架构分析------------------------------------------本文系本站原创,欢迎转载!转载请注明出处:http://ericxiao.cublog.cn/------------------------------------------一:前言Tty这个名称源于电传打字节的简称。在linux表示各种终端。终端通常都跟硬件相对应。比如对应于输入设备键盘鼠标。输出设备显示器的控制终端和串口终端.也有对应于不存在设备的pty驱动。在如此众多的终端模型之中,linux是怎么将它们统

2、一建模的呢?这就是我们今天要讨论的问题.二:tty驱动概貌Tty架构如下所示:如上图所示,用户空间主要是通过设备文件同tty_core交互.tty_core根据用空间操作的类型再选择跟linediscipline和tty_driver交互.例如设置硬件的ioctl指令就直接交给tty_driver处理。Read和write操作就会交给linediscipline处理.Linediscipline是线路规程的意思。正如它的名字一样,它表示的是这条终端”线程”的输入与输出规范设置.主要用来进行输入/输出数据的预处理。处理之后。就会将数据交给

3、tty_driverTty_driver就是终端对应的驱动了。它将字符转换成终端可以理解的字串.将其传给终端设备。值得注意的是,这个架构没有为tty_drivero提供read操作。也就是说tty_core 和linediscipline都没有办法从tty_driver里直接读终端信息。这是因为tty_driver对就的hardware并不一定是输入数据和输出数据的共同负载者。例如控制终端,输出设备是显示器。输入设备是键盘。基于这样的原理。在linediscipline中有一个输入缓存区。并提供了一个名叫receive_buf()的接口

4、函数。对应的终端设备只要调用linediscipine的receiver_buf函数,将数据写入到输入缓存区就可以了。如果一个设备同时是输入设备又是输出设备。那在设备的中断处理中调用receive_buf()将数据写入即可. 三:tty驱动接口分析具体的tty驱动设计可以参考LDD3。这里只对它的接口实现做一个分析.ttydriver的所有操作都包含在tty_driver中。内核即供了一个名叫alloc_tty_driver()来分配这个tty_driver。当然我们也可以在自己的驱动中将它定义成一个静态的结构。对tty_driver进

5、行一些必要的初始化之后,调用tty_register_driver()将其注册.alloc_tty_driver()接口代码如下所示:15structtty_driver*alloc_tty_driver(intlines){        structtty_driver*driver;         driver=kzalloc(sizeof(structtty_driver),GFP_KERNEL);        if(driver){                  driver->magic=TTY_DRIVER_MAG

6、IC;                  driver->num=lines;                  /*laterwe'llmoveallocationoftableshere*/        }        returndriver;}这个函数只有一个参数。这个参数的含义为line的个数。也即次设备号的个数。注意每个设备文件都会对应一个line.在这个接口里为tty_driver分配内存,然后将driver->mage.driver->num初始化之后就返回了. tty_register_driver()用来注册一个

7、tty_driver。代码如下:inttty_register_driver(structtty_driver*driver){        interror;        inti;        dev_tdev;        void**p=NULL;         //TTY_DRIVER_INSTALLED:已安装的        if(driver->flags&TTY_DRIVER_INSTALLED)                  return0;         //TTY_DRIVER_DEVPTS_ME

8、M:使用devpts进行动态内存映射        if(!(driver->flags&TTY_DRIVER_DEVPTS_MEM)&&driver->num){                  p=k

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。