天天看點

Linux下TTY驅動程式分析1、tty裝置2、tty架構圖分析3、核心結構體

有序列槽、usb轉序列槽、數據機(傳統的winmodem類裝置)等。linux-tty驅動程式的核心緊挨在标準字元裝置驅動層之下,并體統了一系列的功能,作為接口被終端類型裝置使用。核心負責控制通過tty裝置的資料流,并且格式化這些資料。為了控制資料流,有許多不同的線路規程(line discipline)可以虛拟地“插入”任何的tty裝置上,這由不同的tty線路規程驅動程式實作。tty線路規程的作用是使用特殊的方法,把從使用者或者硬體那裡接受的資料格式化。這種格式化通常使用一些協定來完成轉換,比如ppp或者是藍牙bluetooth。

Linux下TTY驅動程式分析1、tty裝置2、tty架構圖分析3、核心結構體

使用者空間主要是通過裝置檔案同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()将資料寫入即可。

繼續閱讀