linux串口驱动
一、對于串口驅動Linux系統中UART驅動屬于終端設備驅動,應該說是實現串口驅動和終端驅動來實現串口終端設備的驅動。要了解串口終端的驅動在Linux系統的結構就先要了解終端設備驅動在Linux系統中的結構體系,一方面自己了解的不夠,另一發面關于終端設備的體系結構網上有很多很好很詳細的資料參考,這里我主要是鑒于終端設備體系的復雜性,我大概總結一下自己了解到的一些方面和一個整體的框架。
二、終端設備的結構
 
 
?Linux內核中?tty的層次結構圖所示,包含tty核心、tty線路規程和tty驅動。tty核心是對整個tty設備的抽象,對用戶提供統一的接口,tty線路規程是對傳輸數據的格式化,tty驅動則是面向tty設備的驅動,這是對設備的驅動,應該要我們來實現的,但是后面我們可以看到,對于串口驅動Linux還要進行抽象把共性提取出來封裝,使得整個驅動層次化簡單化。使得驅動的修改只要設計設備硬件的差異來,但是這樣使得設備驅動的結構體系比較復雜,過程層次太多,難于理解。
tty設備發送數據的流程為:tty核心從一個用戶獲取將要發送給一個?tty設備的數據,tty核心將數據傳遞給tty線路規程驅動,接著數據被傳遞到tty驅動,tty驅動將數據轉換為可以發送給硬件的格式。
接收數據的流程為:?從tty硬件接收到的數據向上交給tty驅動,進入tty線路規程驅動,再進入?tty?核心,在這里它被一個用戶獲取。盡管大多數時候tty核心和tty之間的數據傳輸會經歷tty線路規程的轉換,但是tty驅動與tty核心之間也可以直接傳輸數據。
 
 
 
三、tty設備驅動結構
 
 
圖顯示了與tty相關的主要源文件及數據的流向。tty_io.c定義了tty?設備通用的file_operations結構體并實現了接口函數tty_register_driver()用于注冊tty設備,它會利fs/char_dev.c提供的接口函數注冊字符設備,與具體設備對應的tty驅動將實現tty_driver結構體中的成員函數。同時?tty_io.c也提供了tty_register_ldisc()接口函數用于注冊線路規程,n_tty.c文件則實現了tty_disc結構體中的成員。特定tty設備驅動的主體工作是填充tty_driver結構體中的成員,實現其中的成員函數。
 
四、串口驅動核心層
 
 
上圖的數據流向應該和上面tty設備驅動一樣,同樣需要經過tty線路規則層,不過上圖箭頭標的不是很準確,說明一下,因為圖是從網上下的。
很明顯的看得到由tty設備驅動到串口驅動中間經過了一層serial_core ,從tty設備驅動中需要填充的是tty_driver結構,經過串口核心層后就轉變成了實現xxx_uart.c 。到現在Linux系統已經封裝了終端設備(tty)的驅動,www.linuxidc.com而我們只需要實現串口驅動就能實現整個串口終端驅動。
總結
 
                            
                        - 上一篇: AVOD代码复现
- 下一篇: avod论文理解与代码解读
