Linux tty子系統分析之一 總體說明

從本章開始,我們將學習linux tty子系統,tty即為Teletypewritter的縮寫,即為電傳打印機,即用於人機交互的控制檯界面,而cpu與電傳打印機之間是通過串口通信的,因此在後來,cpu通過串口與設備進行通信的模塊,也就定義了tty子系統(可包括通過串口連接的鍵盤、通過chunk通信的藍牙、紅外等設備)。現在linux tty子系統包括串口終端、串口設備、usb轉串口、虛擬終端、偽終端等等(此處針對tty的描述可能不準確,需要詳細瞭解的童鞋可搜索網絡,另外針對linux應用層終端、進程組等之間的關聯不再本次專欄之中,本專欄主要專注linux內核子系統的實現及架構說明)。本專欄主要包含如下內容:

一、linux tty子系統總體說明

二、linux tty子系統相關的數據結構及設備抽象說明(包括tty 設備、tty驅動、tty的線路規程的介紹)

三、linux tty驅動、設備、線路規程的註冊以及註銷接口說明

四、linux 串口子系統總體說明

五、linux串口子系統數據結構及設備抽象說明

六、linux串口子系統設備及端口註冊及註銷接口說明

七、linux串口控制器驅動開發流程說明

八、linux虛擬串口控制器驅動開發及代碼實現

本章主要對tty子系統做一個總體說明。主要說明tty子系統內部的劃分以及與外部的關聯等等。

tty子系統框架說明

下圖是簡要的tty子系統框架說明。tty設備抽象了字符設備文件節點,用於和具體文件系統關聯(之前在介紹文件系統中已經說明過,大多數的文件系統均包含針對字符設備文件節點、塊設備文件節點的處理)。

  1. 通過tty字符設備文件節點,即完成了與xxx_fs、vfs的關聯,應用層通過vfs接口,即可實現對字符設備文件節點的操作;
  2. tty核心層提供了字符設備文件節點的操作接口(struct file_operations tty_fops),包括tty_open、tty_read、tty_write、tty_poll、tty_ioctl等接口;
  3. 針對tty核心層接口,通過調用線路規程,進行數據的處理(線路規程是linux tty子系統的一個比較好的抽象,針對tty子系統支持10多種線路規程,默認的線路規程為N_TTY,另外支持ppp、slip、Bluetooth、irda等線路規程,實現通過串行傳輸系統實現具體網絡的通信)。針對同一個串行驅動程序,通過調用不同的線路規程,即可實現不同協議的通信操作;
  4. 線路規程的操作接口通過tty_driver的操作接口,實現與串行設備的通信。
  5. 而tty_driver的操作接口,則一般完成與具體的設備的通信,實現串行設備的驅動程序(但針對串口而言,又進行了uart_driver、uart_port的抽象,而uart_port的ops中則實現設備的驅動程序接口(包括讀寫數據、tx與rx啟停控制等接口))

Linux tty子系統分析之一 總體說明

以上是簡要的說明了vfs、fs、tty之間的關聯,以及tty內部各模塊的關聯等內容。下面從數據結構的關聯進一步說明說明tty的框架。

tty子系統中數據結構的關聯

針對tty子系統,針對設備驅動以及行為進行了抽象,tty_driver是對tty控制器的抽象;而tty_port則是對依附於tty控制器上的tty端口的抽象;而線路規程ldisc我認為可以理解為針對不同協議數據出的的抽象,如要藉助於串行設備實現ppp撥號協議的通信,則使用ppp的線路規程的接口進行實現即可;

下面就是這些數據結構以及tty接口之間的關聯,這些關聯也印證了上面的關聯操作。而tty driver的註冊、tty port的註冊即是完成下圖數據結構間的關聯(如在tty driver、tty port的註冊,則完成了對應字符設備的註冊以及將其對應的設備註冊至tty_class中,而在字符設備文件的打開時,則會完成tty_driver、tty_struct、tty_port、tty_ldisc的關聯)。

Linux tty子系統分析之一 總體說明

tty子系統中接口間的關聯

上面介紹了數據結構間的關聯,下面我們說明下接口層是如何藉助數據結構間的關聯,完成接口間的調用關係的。

  1. vfs的系統調用接口,通過字符設備操作接口,最終調用tty字符設備文件節點的操作函數的調用(即tty_open、tty_read、tty_write、tty_poll等接口);
  2. tty_open、tty_read、tty_write、tty_poll等接口,則藉助tty_ldisc數據結構類型的變量,調用tty_ldisc_ops中對應的接口;
  3. tty_ldisc_ops中的接口,則藉助tty_driver數據結構類型的變量,調用tty_operations數據結構中各成員變量對應的函數指針;
  4. 在tty_operations中的函數指針中,則針對一部分設備驅動,則會調用tty_port中的ops的接口。

Linux tty子系統分析之一 總體說明


本文主要是對tty子系統的架構從數據結構之間的關聯、接口調用關係進行簡要說明,後續章節中則對數據結構、註冊函數、接口調用進行詳細的說明。


分享到:


相關文章: