歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下TTY驅動程序分析

Linux下TTY驅動程序分析

日期:2017/3/1 9:51:26   编辑:Linux編程

1、tty設備

有串口、usb轉串口、調制解調器(傳統的WinModem類設備)等。Linux-tty驅動程序的核心緊挨在標准字符設備驅動層之下,並體統了一系列的功能,作為接口被終端類型設備使用。內核負責控制通過tty設備的數據流,並且格式化這些數據。為了控制數據流,有許多不同的線路規程(line discipline)可以虛擬地“插入”任何的tty設備上,這由不同的tty線路規程驅動程序實現。tty線路規程的作用是使用特殊的方法,把從用戶或者硬件那裡接受的數據格式化。這種格式化通常使用一些協議來完成轉換,比如PPP或者是藍牙Bluetooth。

2、tty架構圖分析

用戶空間主要是通過設備文件同tty_core交互。tty_core根據用空間操作的類型再選擇跟line discipline和tty_driver交互。例如設置硬件的ioctl指令就直接交給tty_driver處理。Read和write操作就會交給 line discipline處理。Line discipline是線路規程的意思。正如它的名字一樣,它表示的是這條終端”線程”的輸入與輸出規范設置.主要用來進行輸入/輸出數據的預處理。處理之後。就會將數據交給tty_driver。Tty_driver就是終端對應的驅動了。它將字符轉換成終端可以理解的字串,再將其傳給終端設備。

值得注意的是,這個架構沒有為tty_driver提供read操作。也就是說tty_core 和line discipline都沒有辦法從tty_driver裡直接讀終端信息。這是因為tty_driver對應的hardware並不一定是輸入數據和輸出 數據的共同負載者。例如控制終端,輸出設備是顯示器。輸入設備是鍵盤。基於這樣的原理。在line discipline中有一個輸入緩存區。並提供了一個名叫receive_buf()的接口函數。對應的終端設備只要調用line discipine的receiver_buf函數,將數據寫入到輸入緩存區就可以了。

如果一個設備同時是輸入設備又是輸出設備。那在設備的中斷處理中調用receive_buf()將數據寫入即可。

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2013-11/92639p2.htm

Copyright © Linux教程網 All Rights Reserved