参考:
1、tty设备
有并口、usb转并口、调制混频器(传统的WinModem类设备)等。Linux-tty驱动程序的核心紧挨在标准字符设备驱动层之下linux tty驱动架构,并体统了一系列的功能linux环境变量,作为插口被终端类型设备使用。内核负责控制通过tty设备的数据流,而且低格这种数据。为了控制数据流,有许多不同的线路规程(linediscipline)可以虚拟地“插入”任何的tty设备上,这由不同的tty线路规程驱动程序实现。tty线路规程的作用是使用特殊的方式,把从用户或则硬件哪里接受的数据低格。这些低格一般使用一些合同来完成转换,例如PPP或则是蓝牙Bluetooth。
2、tty构架图剖析
linux内核中linux apache 虚拟主机,tty层次结构包括了:
a.tty核心
b.tty线路规程(discipline):以合同转换的方法,低格从一个用户或硬件收到的数据,如PPP合同或蓝牙合同。
c.tty驱动
tty设备发送数据流程:tty核心从用户获取想要发送给一个tty设备的数据,tty核心将数据传递给tty线路规程驱动,之后数据被传递到tty驱动,tty驱动将数据转换为可以发送给硬件的格式。
tty设备接收数据流程:从硬件接收到的数据向下交给tty驱动,之后步入tty线路规程,再步入tty核心,在这儿被一个用户获取。
虽然大多数时侯tty核心和tty之间的数据传输会经历tty线路规程的转换,并且tty驱动与tty核心之间也可以直接传输数据。
用户空间主要是通过设备文件同tty_core交互。tty_core按照用空间操作的类型再选择跟linediscipline和tty_driver交互。比如设置硬件的ioctl指令就直接交给tty_driver处理。Read和write操作都会交给linediscipline处理。Linediscipline是线路规程的意思。正如它的名子一样,它表示的是这条终端”线程”的输入与输出规范设置.主要拿来进行输入/输出数据的预处理。处理过后。都会将数据交给tty_driver。Tty_driver就是终端对应的驱动了。它将字符转换成终端可以理解的字串,再将其传给终端设备。
值得注意的是,这个构架没有为tty_driver提供read操作。也就是说tty_core和linediscipline都没有办法从tty_driver里直接读终端信息。这是由于tty_driver对应的hardware并不一定是输入数据和输出数据的共同负载者。诸如控制终端linux tty驱动架构,输出设备是显示器。输入设备是鼠标。基于这样的原理。在linediscipline中有一个输入缓存区。并提供了一个名叫receive_buf()的插口函数。对应的终端设备只要调用linediscipine的receiver_buf函数,将数据写入到输入缓存区就可以了。
假如一个设备同时是输入设备又是输出设备。那在设备的中断处理中调用receive_buf()将数据写入即可。
本文原创地址://gulass.cn/lqdtsbfssjlc.html编辑:刘遄,审核员:暂无