TTY子系統初探,你學會了嗎?
一、TTY子系統介紹
1、TTY介紹
TTY,一詞源于Teleprinter,譯為電傳打印機,在早起用來表示電腦終端的設備。
現在我們通常使用TTY,是各種(物理/虛擬)終端的統稱!
Linux系統的終端設備一般分為控制臺終端、偽終端、串口終端和其他類型四種。
下面我們來進一步了解這些Linux下常用的終端,為學習Linux TTY Framework打下基礎!
2、控制臺終端
控制臺終端包括:系統控制臺、當前控制臺、虛擬控制臺。
2.1 系統控制臺
系統控制臺,也就是我們Linux下面的/dev/console,是與操作系統交互的設備,系統所產生的信息會發送到該設備上。
目前只有在單用戶模式下,才允許用戶登錄控制臺/dev/console。
console有緩沖的概念,為內核提供打印輸出。內核把要打印的內容裝入緩沖區__log_buff,然后由console指向某個激活的終端,來決定打印到哪里。console指向激活的終端。
比如,我們在啟動內核的時候,傳入的參數cnotallow=ttyS1,將控制臺終端指向ttyS1串口設備。
2.2 當前控制臺
這是應用程序中的概念,如果當前進程有控制終端(Controlling Terminal),那么/dev/tty就是當前進程控制臺的設備文件。
對于登錄的Shell,/dev/tty就是你正在使用的控制臺,設備號(5,0),/dev/tty會映射到當前設備(使用命令tty可以查看它具體對應哪個實際物理控制臺設備),輸出到/dev/tty的內容只會顯示在當前工作終端上。
你可以輸入命令tty,顯示當前映射的實際終端如:/dev/tty1或者/dev/pts/0等。
2.3 虛擬控制臺
/dev/ttyn是進程虛擬控制臺,他們共享同一個真實的物理控制臺。
在PC上,用戶可以使用Ctrl + Alt + Fn切換,這種虛擬控制臺對應tty1~n,其中:/dev/tty1代表第1個虛擬控制臺;當使用Ctrl + ALT+F2進行切換時,系統的虛擬控制臺為/dev/tty2 ,當前控制臺(/dev/tty)則指向/dev/tty2
而比較特殊的是/dev/tty0,他代表當前虛擬控制臺,其實就是當前所使用虛擬控制臺的一個別名。因此不管當前正在使用哪個虛擬控制臺(注意:這里是虛擬控制臺,不包括偽終端),系統信息都會重定位到/dev/tty0上。
只有系統或超級用戶root可以向/dev/tty0進行寫操作。tty0是系統自動打開的,但不用于用戶登錄
3、偽終端
偽終端(Pseudo Terminal)是終端的發展,它多用于模擬終端程序,是遠程登陸(telnet、ssh、xterm等)后創建的控制臺設備。
它是成對出現的邏輯終端設備(即master和slave設備, 對master的操作會反映到slave上)。簡單說主終端和類似sshd,telnetd等用戶空間的遠程協議處理進程連接,而從終端則和shell之類的實際進程連接。
4、串口終端
串行端口終端(Serial Port Terminal)是使用計算機串行端口連接的終端設備。計算機把每個串行端口都看作是一個字符設備。所以這些串行端口所對應的設備名稱是/dev/ttyS0、/dev/ttyS1等,設備號分別是(4,0)、(4,1)等
若要向一個端口發送數據,可以在命令行上把標準輸出重定向到這些特殊文件名上即可。
我們可以在命令行提示符下鍵入:echo "tekkaman" > /dev/ttyS1會把“tekkaman”發送到連接在ttyS1(COM2)端口的設備上。
在2.6以后的內核后,一些三星的芯片將串口終端設備節點命名為ttySACn。
TI的Omap系列芯片從2.6.37開始,芯片自帶的UART設備開始使用專有的的omap-uart驅動,故設備節點命名為ttyOn,以區別于使用8250驅動時的設備名“ttySn”。
5. 其它類型
還針對很多不同的字符設備存在有很多其它種類的終端設備特殊文件,例如針對ISDN設備的**/dev/ttyIn**終端設備等。
??https://blog.csdn.net/liangzc1124/article/details/127469767??