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

2021-10-05 15:08:45 字數 2328 閱讀 6480

從本章開始,我們將學習linux tty子系統,tty即為teletypewritter的縮寫,即為電傳印表機,即用於人機互動的控制台介面,而cpu與電傳印表機之間是通過串列埠通訊的,因此在後來,cpu通過串列埠與裝置進行通訊的模組,也就定義了tty子系統(可包括通過串列埠連線的鍵盤、通過chunk通訊的藍芽、紅外等裝置)。現在linux tty子系統包括串列埠終端、串列埠裝置、usb轉串列埠、虛擬終端、偽終端等等(此處針對tty的描述可能不準確,需要詳細了解的童鞋可搜尋網路,另外針對linux應用層終端、程序組等之間的關聯不再本次專欄之中,本專欄主要專注linux核心子系統的實現及架構說明)。本專欄主要包含如下內容:

一、linux tty子系統總體說明

二、linux tty子系統相關的資料結構及裝置抽象說明(包括tty 裝置、tty驅動、tty的線路規程的介紹)

三、linux tty驅動、裝置、線路規程的註冊以及登出介面說明

而針對串列埠在系統的分析,則放入linux串列埠子系統專欄中。

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

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

通過tty字元裝置檔案節點,即完成了與***_fs、vfs的關聯,應用層通過vfs介面,即可實現對字元裝置檔案節點的操作;

tty核心層提供了字元裝置檔案節點的操作介面(struct file_operations tty_fops),包括tty_open、tty_read、tty_write、tty_poll、tty_ioctl等介面;

針對tty核心層介面,通過呼叫線路規程,進行資料的處理(線路規程是linux tty子系統的乙個比較好的抽象,針對tty子系統支援10多種線路規程,預設的線路規程為n_tty,另外支援ppp、slip、bluetooth、irda等線路規程,實現通過序列傳輸系統實現具體網路的通訊)。針對同乙個序列驅動程式,通過呼叫不同的線路規程,即可實現不同協議的通訊操作;

線路規程的操作介面通過tty_driver的操作介面,實現與序列裝置的通訊。

而tty_driver的操作介面,則一般完成與具體的裝置的通訊,實現序列裝置的驅動程式(但針對串列埠而言,又進行了uart_driver、uart_port的抽象,而uart_port的ops中則實現裝置的驅動程式介面(包括讀寫資料、tx與rx啟停控制等介面))

以上是簡要的說明了vfs、fs、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的關聯)。

上面介紹了資料結構間的關聯,下面我們說明下介面層是如何借助資料結構間的關聯,完成介面間的呼叫關係的。

vfs的系統呼叫介面,通過字元裝置操作介面,最終呼叫tty字元裝置檔案節點的操作函式的呼叫(即tty_open、tty_read、tty_write、tty_poll等介面);

tty_open、tty_read、tty_write、tty_poll等介面,則借助tty_ldisc資料結構型別的變數,呼叫tty_ldisc_ops中對應的介面;

tty_ldisc_ops中的介面,則借助tty_driver資料結構型別的變數,呼叫tty_operations資料結構中各成員變數對應的函式指標;

在tty_operations中的函式指標中,則針對一部分裝置驅動,則會呼叫tty_port中的ops的介面。

本文主要是對tty子系統的架構從資料結構之間的關聯、介面呼叫關係進行簡要說明,後續章節中則對資料結構、註冊函式、介面呼叫進行詳細的說明。

SPI子系統分析之一 框架

核心版本 3.9.5 spi子系統概述 乙個spi主控制器對應一條spi匯流排,當然在系統中有唯一的匯流排編號.spi匯流排上有兩類裝置 主控端是spi匯流排的控制者,通過使用spi協議主動發起spi匯流排上的會話.而受控端則被動接受spi主控端的指令,並作出響應的響應.linux目前只支援spi主...

pinctrl子系統分析(一)

pinctrl子系統分析 一 pinctrl子系統分析 二 pinctrl子系統分析 三 許多soc的內部都包含了pin控制器,通過pin控制器,我們可以匹配引腳的狀態和功能特性。在了解pinctrl子系統之前,我們先來了解一些基本的概念。soc的很多引腳都可以配置成不同的功能,如a1和a2兩個引腳...

framebuffer 子系統分析

fb info screen base dma alloc writecombine fbi dev,map size,map dma,gfp kernel fb info screen base 是framebuffer起始虛擬位址,也就是mmap後程式寫入fb的位址,該位址會直接寫入到fb in...