日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux串口驱动

發(fā)布時間:2024/8/1 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux串口驱动 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、對于串口驅(qū)動Linux系統(tǒng)中UART驅(qū)動屬于終端設(shè)備驅(qū)動,應(yīng)該說是實現(xiàn)串口驅(qū)動和終端驅(qū)動來實現(xiàn)串口終端設(shè)備的驅(qū)動。要了解串口終端的驅(qū)動在Linux系統(tǒng)的結(jié)構(gòu)就先要了解終端設(shè)備驅(qū)動在Linux系統(tǒng)中的結(jié)構(gòu)體系,一方面自己了解的不夠,另一發(fā)面關(guān)于終端設(shè)備的體系結(jié)構(gòu)網(wǎng)上有很多很好很詳細(xì)的資料參考,這里我主要是鑒于終端設(shè)備體系的復(fù)雜性,我大概總結(jié)一下自己了解到的一些方面和一個整體的框架。

二、終端設(shè)備的結(jié)構(gòu)


?Linux內(nèi)核中?tty的層次結(jié)構(gòu)圖所示,包含tty核心、tty線路規(guī)程和tty驅(qū)動tty核心是對整個tty設(shè)備的抽象,對用戶提供統(tǒng)一的接口,tty線路規(guī)程是對傳輸數(shù)據(jù)的格式化,tty驅(qū)動則是面向tty設(shè)備的驅(qū)動,這是對設(shè)備的驅(qū)動,應(yīng)該要我們來實現(xiàn)的,但是后面我們可以看到,對于串口驅(qū)動Linux還要進(jìn)行抽象把共性提取出來封裝,使得整個驅(qū)動層次化簡單化。使得驅(qū)動的修改只要設(shè)計設(shè)備硬件的差異來,但是這樣使得設(shè)備驅(qū)動的結(jié)構(gòu)體系比較復(fù)雜,過程層次太多,難于理解。

tty設(shè)備發(fā)送數(shù)據(jù)的流程為:tty核心從一個用戶獲取將要發(fā)送給一個?tty設(shè)備的數(shù)據(jù),tty核心將數(shù)據(jù)傳遞給tty線路規(guī)程驅(qū)動,接著數(shù)據(jù)被傳遞到tty驅(qū)動,tty驅(qū)動將數(shù)據(jù)轉(zhuǎn)換為可以發(fā)送給硬件的格式。

接收數(shù)據(jù)的流程為:?從tty硬件接收到的數(shù)據(jù)向上交給tty驅(qū)動,進(jìn)入tty線路規(guī)程驅(qū)動,再進(jìn)入?tty?核心,在這里它被一個用戶獲取。盡管大多數(shù)時候tty核心和tty之間的數(shù)據(jù)傳輸會經(jīng)歷tty線路規(guī)程的轉(zhuǎn)換,但是tty驅(qū)動與tty核心之間也可以直接傳輸數(shù)據(jù)。



三、tty設(shè)備驅(qū)動結(jié)構(gòu)



圖顯示了與tty相關(guān)的主要源文件及數(shù)據(jù)的流向。tty_io.c定義了tty?設(shè)備通用的file_operations結(jié)構(gòu)體并實現(xiàn)了接口函數(shù)tty_register_driver()用于注冊tty設(shè)備,它會利fs/char_dev.c提供的接口函數(shù)注冊字符設(shè)備,與具體設(shè)備對應(yīng)的tty驅(qū)動將實現(xiàn)tty_driver結(jié)構(gòu)體中的成員函數(shù)。同時?tty_io.c也提供了tty_register_ldisc()接口函數(shù)用于注冊線路規(guī)程,n_tty.c文件則實現(xiàn)了tty_disc結(jié)構(gòu)體中的成員。特定tty設(shè)備驅(qū)動的主體工作是填充tty_driver結(jié)構(gòu)體中的成員,實現(xiàn)其中的成員函數(shù)。

四、串口驅(qū)動核心層



上圖的數(shù)據(jù)流向應(yīng)該和上面tty設(shè)備驅(qū)動一樣,同樣需要經(jīng)過tty線路規(guī)則層,不過上圖箭頭標(biāo)的不是很準(zhǔn)確,說明一下,因為圖是從網(wǎng)上下的。

很明顯的看得到由tty設(shè)備驅(qū)動到串口驅(qū)動中間經(jīng)過了一層serial_core ,從tty設(shè)備驅(qū)動中需要填充的是tty_driver結(jié)構(gòu),經(jīng)過串口核心層后就轉(zhuǎn)變成了實現(xiàn)xxx_uart.c 。到現(xiàn)在Linux系統(tǒng)已經(jīng)封裝了終端設(shè)備(tty)的驅(qū)動,www.linuxidc.com而我們只需要實現(xiàn)串口驅(qū)動就能實現(xiàn)整個串口終端驅(qū)動。

總結(jié)

以上是生活随笔為你收集整理的linux串口驱动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。