Linux 串列埠程式設計 一些背景

SoldierJazz2019發表於2017-05-18

在大部分講解 Linux 程式設計書籍的時候會發現沒有單獨的串列埠程式設計章節,實際上串列埠程式設計已經被概括在了“終端”或者“終端IO”章節裡面。在上一篇部落格中對經常出現的幾個容易混淆的概念進行簡單描述:tty,串列埠,控制檯與驅動程式。後面會在實際使用過程中對幾種裝置的原理與使用進行詳解。

在系統下面通過執行 "ls /dev" 或者 "cat /proc/tty/drivers" 可以看到經常碰到的一些術語以及分類,如下所示:


對開發者而言,比較熟悉的有 console 控制檯、tty 終端、ttyS serial串列埠裝置、pty 偽終端等。由於 pty 成對使用,所以又細分為了主從兩類。這些裝置類對應的系統裝置檔名參見第二列,可以輸入 "ls /dev" 進行檢視。

需要理清這些概念的關係就需要追溯早起計算機的使用歷史,最初計算機成本高昂,通常需要連線多套鍵盤顯示器供多人使用,因此就出現了這樣一種專門連線計算機的裝置,它只有顯示器和鍵盤,外加簡單處理電路。使用者可以通過這套裝置連線到計算機上(通常是通過串列埠連線),然後登入系統,並對計算機進行操作。這樣一臺只有輸入、顯示器件並能連線到計算機的裝置就稱為終端。tty 裝置的名稱是從過去的電傳打字機(Teletype)縮寫而來,也是最早出現的一種終端裝置,因此現在在 Linux 系統中,就用 tty 來表示 “終端”。而 console 控制檯,pty 偽終端等可以理解為虛擬 tty。總之,在 Unix 系統中 tty 就可以理解為連線到系統的物理或者虛擬終端

“console”控制檯用於使用者和系統進行互動的裝置,與終端作用類似。該虛擬 tty 與普通終端相比,多了一些功能:如顯示系統核心訊息,後臺服務日誌等。從硬體上看,控制檯與終端等都是具備輸入顯示功能的裝置,沒有區別。實際上他們表達的意思相同。控制檯與終端的區別體現在軟體上,在啟動 Linux 核心前傳入的命令列引數 "console=..." 就是用來指定具體的控制檯。控制檯在 tty 驅動初始化之前就可以使用了,最開始被用來顯示核心訊息。我們在計算機或者嵌入式系統中經常會看到 "console = ttySAC0"、"console = ttyS1" 等語句,實際就是選取某個虛擬或者物理終端作為控制檯與使用者互動。

當 tty 驅動初始化結束,使用者程式就可以通過 tty 驅動的介面來操作各類終端裝置,包括控制檯。而後面要介紹的應用程式操作介面也由此而來。

關於 Linux 串列埠程式設計的其他文章,可以移步至以下連結:

  1. 《Linux 串列埠程式設計<一> 一些背景》
  2. 《Linux 串列埠程式設計<二> 深入瞭解 termios》
  3. 《Linux 串列埠程式設計<三> 使用termios與API 進行串列埠程式開發》
  4. 《Linux 串列埠程式設計<四> 串列埠裝置程式開發》

如果有想法或者疑問可以給我郵件或者評論,覺得有用就點贊吧~:-D

相關文章