終端控制台體系

2021-05-26 17:33:09 字數 3273 閱讀 8885

資料通訊--

並行通訊

序列通訊

非同步通訊--以乙個字元為單位,通訊中兩個字元間的時間間隔不固定的,然而同乙個字元中的兩個相鄰位之間的時間間隔是固定 的。

通訊協議----是指通訊雙方約定的一些規則。在使用非同步串列埠傳送乙個字元的資訊時,對資料格式有如下約定:規定有空閒位,起始位,資料位,奇偶校驗位,停止位。

波特率---表示每秒傳送的二進位制位數。

注:非同步通訊是按字元傳輸的,接收裝置在收到起始訊號之後只要在乙個字元的傳輸時間內能和傳送裝置保持同步就能正確接收。

傳送方式----

單工方式

半雙工方式

全雙工方式

終端概述----

在linux中,tty(終端)是一類字元裝置的統稱,包括了3種型別:控制台,串列埠,和偽終端。

控制台----

供核心使用的終端為控制台。控制台在linux啟動時,通過命令console=。。。指定,如果沒有指定控制台,系統把第乙個註冊的終端(tty)作為控制台。

控制台---

1--控制台是乙個虛擬的終端,它必須對映到真正的終端上。

2--控制台可以簡單的理解為printk輸出的地方。

3--控制台是個只能輸出的裝置,功能很簡單,只能在核心中訪問。

偽終端----

是一種特殊的終端裝置,由主-從兩個成對的裝置構成,當開啟主裝置時,對應的從裝置隨之開啟,形成連線狀態。輸入到主裝置的資料成為從裝置的輸出,輸入到從裝置的資料成為主裝置的輸出,形成雙向管道。偽終端裝置常用於遠端登入伺服器來建立網路和終端的關聯。當通過telnet遠端登入到另一台主機時,telnet程序與遠端主機的telnet伺服器相連線,telnet伺服器使用某個主裝置並通過對應的從裝置與telnet程序相互通訊。

終端體系---

在linux中,tty體系分為:tty核心,tty線路規程,tty驅動3部分。tty核心從使用者獲取要傳送給tty裝置的資料,然後把資料傳遞給tty線路規程,它對資料進行處理後,負責把資料傳遞到tty驅動程式,tty驅動程式負責格式化資料,並通過硬體傳送出去。

從硬體收到的資料向上通過tty驅動,進入tty線路規程,再進入tty核心,最後被使用者獲取。tty驅動可以直接和tty核心通訊,但是通常tty線路規程會修改在兩者之間傳送的資料。tty驅動不能直接和線路規程通訊,甚至不知道它的存在,線路規程的工作是格式化從使用者或者硬體收到的資料,這種格式化常常實現為乙個協議,如ppp或bluetooth。

讀操作---

tty驅動從硬體收到資料後,負責把資料傳遞到tty核心,tty核心將從tty驅動收到的資料快取到乙個tty_flip_buffer型別的結構中。該結構包含兩個資料陣列。從tty裝置接收到的資料被儲存於第乙個陣列,當這個陣列滿時,等待資料的使用者將被通知。當使用者從這個陣列讀資料時,任何從tty驅動新來的資料將被儲存在第二個陣列。當第二個陣列存滿後,資料再次提交給使用者,並且驅動又開始填充第乙個陣列,以此交替。

注---若只有乙個buffer,要加訊號量,效率低,否則容易造成資料混亂。故弄兩個。

驅動描述---

struct uart_driver

註冊驅動----

int uart_register_driver(struct uart_driver *drv)

埠描述---

uart_port用於描述乙個uart埠(乙個串列埠)的位址,fifo大小,埠型別等資訊。

struct uart_port

操作串列埠----

uart_ops定義了針對串列埠的一系列操作,包括傳送,接收及線路設定等。

struct uart_ops

新增埠---串列埠核心層提供如下函式來新增乙個埠

int uart_add_one_port(struct uart_driver *drv,struct uart_port *port)

操作流程----

1-定義乙個uart_driver的變數,並初始化。

2-使用uart_register_driver來註冊這個驅動;

3-初始化uart_port和ops函式表

4-呼叫uart_add_one_port()新增初始化好的uart_port.

串列埠驅動程式分析

1 傳送和接收

傳送:迴圈buffer->傳送fifo->傳送移位暫存器

接收:接收移位暫存器->接收fifo->flip_buf

傳送的過程:把資料寫到傳送fifo中,fifo把收到的資料傳給傳送移位暫存器(自動的,非driver控制),然後每個時鐘脈衝往串列埠線上寫一bit資料。

接收過程:接收移位暫存器收到資料,傳送給接收fifo,接收fifo事件設定好了觸發門限,當裡面的資料量超過門限時就會觸發乙個中斷,呼叫驅動中的中斷處理函式,把資料寫到flip_buf

用printk,核心會根據日誌級別,可能把訊息列印到當前控制台上,這個控制台通常是乙個字元模式的終端、乙個串列埠印表機或是乙個並口印表機。這些訊息正常輸出的前提是──日誌輸出級別小於console_loglevel(在核心中數字越小優先順序越高)。  沒有指定日誌級別的printk語句預設採用的級別是 default_ message_loglevel(這個預設級別一般為<4>,即與kern_warning在乙個級別上),其定義在linux26/kernel/printk.c中可以找到。  

日誌級別一共有8個級別,printk的日誌級別定義如下(在include/linux/kernel.h中):

#define kern_emerg 0 緊急事件訊息,系統崩潰之前提示,表示系統不可用  #define kern_alert 1/*報告訊息,表示必須立即採取措施*/  

#define kern_crit 2/*臨界條件,通常涉及嚴重的硬體或軟體操作失敗*/  

#define kern_err 3/*錯誤條件,驅動程式常用kern_err來報告硬體的錯誤*/  #define kern_warning 4/*警告條件,對可能出現問題的情況進行警告*/  

#define kern_notice 5/*正常但又重要的條件,用於提醒*/  

#define kern_info 6/*提示資訊,如驅動程式啟動時,列印硬體資訊*/  

#define kern_debug 7/*除錯級別的訊息*/

通過讀寫/proc/sys/kernel/printk檔案可讀取和修改控制台的日誌級別。檢視這個檔案的方法如下:  #cat /proc/sys/kernel/printk 6 4 1 7  上面顯示的4個資料分別對應控制台日誌級別、預設的訊息日誌級別、最低的控制台日誌級別和預設的控制台日誌級別。  可用下面的命令設定當前日誌級別:  # echo 8 > /proc/sys/kernel/printk  這樣所有級別<8,(0-7)的訊息都可以顯示在控制台上.

控制台終端

如同其他unix類系統,linux本身也是基於命令列的。試試 ctrl alt f1 這就是控制台,算是linux的本來面目。至於使用方法,除了多出登入登出外,和 終端 差不多。在x window出問題或不執行x window的時候,操作主要在這裡完成。linux在控制台下提供了不止乙個終端,支援多...

控制台 終端 shell

控制台 顯示系統資訊,一台計算機只有乙個控制台,計算機本身就有的裝置。終端 計算機的附加裝置,通過串列埠連線在計算機上,可以讓一台計算機完成不同的任務.shell 是乙個抽象概念,所有的一切操作都在計算機內部,負責人機互動 執行指令碼等。位於核心和應用程式之間。shell把一些資訊適當的輸送到終端裝...

終端和控制台

終端,英文叫做terminal 通常簡稱為term 比如我們在x下的xterm.控制台,英文叫做console。要明白這兩者的關係,還得從以前的多人使用的計算機開始。大家都知道,最初的計算機由於 昂貴,因此,一台計算機一般是由多個人同時使用的。在這種情況下一台計算機需要連線上許多套鍵盤和顯示器來供多...