在Linux系統中,終端是一類字符型設備,它包括多種類型,通常使用tty來簡稱各種類型的終端設備。
串口終端(/dev/ttyO*)
串口終端是使用計算機串口連接的終端設備。Linux把每個串行端口都看作是一個字符設備。這些串行端口所對應的設備名稱是 /dev/ttyO0;/dev/ttyO1……
控制檯終端(/dev/console)
在Linux系統中,計算機的輸出設備通常被稱爲控制檯終端(Console),是系統控制檯,是與操作系統交互的設備。系統所產生的信息會發送到該設備上。這裏特指printk信息輸出到的設備。/dev/console是一個虛擬的設備,它需要映射到真正的tty上,比如通過內核啓動參數 “console=ttyO0” 就把console映射到了串口0上。當調用printk時,內核將信息輸出到控制檯終端(/dev/console),由於console和ttyO0(串口0)關聯了,所以信息將輸出到調試串口0上了。
console有緩衝的概念,爲內核提供打印輸出。內核把要打印的內容裝入緩衝區__log_buff,然後由console來決定打印到哪裏(比如是tty0n還是ttySn等)。console指向激活的終端。
若要向一個端口發送數據,可以在命令行上把標準輸出重定向到這些特殊文件名上即可。例如,在命令行提示符下鍵入:echo test > /dev/ttyS1會把單詞”test”發送到連接在ttyS1(COM2)端口的設備上。
虛擬終端(/dev/tty*)
當用戶登錄時,使用的是虛擬終端。tty1–tty6等稱爲虛擬終端,而tty0則是當前所使用虛擬終端的一個別名.
TTY架構分析
Linux tty子系統由三個部分構成:
- tty核心(對整個tty設備的抽象 對用戶提供統一的接口);
- tty線路規程(對傳輸數據的格式化);
- tty驅動(面向tty設備的硬件驅動);
TTY核心起到的是承上啓下的作用,爲我們用戶空間訪問TTY提供了一個統一的接口,不管底層硬件是串口,顯示器還是什麼,用戶的訪問使用的都是統一接口;
TTY線路規程在TTY模型中起到中間過渡的作用,它既接收來自TTY核心的數據,也接收來自TTY驅動的數據,根據實際訪問的硬件設備所遵循的協議,對數據進行格式化。