當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]嵌入式Linux的USB驅(qū)動設(shè)計(jì)

摘要:本文主要介紹了Linux平臺的USB設(shè)備驅(qū)動開發(fā)的一般步驟方法和技巧,通過詳細(xì)介紹USB的相關(guān)概念和Linux中USB設(shè)備驅(qū)動程序的數(shù)據(jù)結(jié)構(gòu),框架和步驟,并通過設(shè)計(jì)和實(shí)現(xiàn)一個驅(qū)動的實(shí)例,總結(jié)了USB驅(qū)動的一般方法和技巧。
關(guān)鍵詞:USB Linux;設(shè)備驅(qū)動程序;嵌入式系統(tǒng)

    隨著計(jì)算機(jī)外圍硬件的擴(kuò)展,各種外圍設(shè)備使用不同的總線接口,導(dǎo)致計(jì)算機(jī)外部各種總線繁多,管理困難,USB總線可以解決這些問題,因此而誕生。USB總線提供統(tǒng)一的外設(shè)的接口方式,并且支持熱插拔,方便了廠商開發(fā)設(shè)備和用戶使用設(shè)備。USB(通用串行總線)是由Microsft,Compad,Inter和NEC等推出的外圍總線接口,目前已發(fā)展到2.0標(biāo)準(zhǔn)最高支持480Mb/s的速率,最多可以支持127個外設(shè)。
    嵌入式Linux是一款源代碼完全免費(fèi)的新興操作系統(tǒng),用戶可以用戶可以通過網(wǎng)絡(luò)等其他途徑免費(fèi)獲得,并可以任意修改其源代碼,這是其他的操作系統(tǒng)做不到的。正是由于這一點(diǎn),Linux得到了廣泛的應(yīng)用。

1 Linux中USB設(shè)備驅(qū)動程序框架及數(shù)據(jù)結(jié)構(gòu)
1.1 USB的體系結(jié)構(gòu)
    USB接口標(biāo)準(zhǔn)支持外部設(shè)備和主機(jī)之間進(jìn)行數(shù)據(jù)傳送。在USB結(jié)構(gòu)中主機(jī)頂設(shè)各種類型外設(shè)使用的總線寬度。當(dāng)外設(shè)和主機(jī)在運(yùn)行時(shí),USB總線允許使用,設(shè)置,添加和拆除外設(shè)。
    在USB體系結(jié)構(gòu)中一個USB系統(tǒng)可以分成USB設(shè)備、USB主機(jī)和USB互聯(lián)3個部分。USB互聯(lián)是USB設(shè)備和USB主機(jī)之間進(jìn)行連接通信的操作,主要包括:
    1)總線拓?fù)浣Y(jié)構(gòu):UsB主機(jī)和USB設(shè)備之間的連接方式;
    2)數(shù)據(jù)流模式:描述USB通信系統(tǒng)數(shù)據(jù)如何從產(chǎn)生方傳遞到使用方;
    3)USB調(diào)度:USB總線是一個共享連接,對可以使用的連按進(jìn)行調(diào)度以支持同步數(shù)據(jù)傳輸,并避免優(yōu)先級判斷的開銷。
    USB的物理連接是有層次的星型結(jié)構(gòu),如圖1所示。


    從圖中可以看出USB集線器在一個節(jié)點(diǎn)上連接多個設(shè)備,每條線段都是點(diǎn)點(diǎn)連接,每個USB集線器在星形的中心。從主機(jī)到設(shè)備或者USB集線器,或USB集線器到設(shè)備都是點(diǎn)點(diǎn)連接。
1.2 USB驅(qū)動程序的結(jié)構(gòu)
    USN總線在技術(shù)層面上是非常簡單的,它是一個單主方式實(shí)現(xiàn)的,主機(jī)輪詢各種不同的外圍設(shè)備,USB另外一個重要的特性是它只擔(dān)當(dāng)設(shè)備和主控制器之間通訊通道的角色,對所發(fā)送的數(shù)據(jù)沒有任何特殊的內(nèi)容和結(jié)構(gòu)上的要求。
    Linux支持兩種類型的USB驅(qū)動,宿主系統(tǒng)上的驅(qū)動程序和設(shè)備上的驅(qū)動程序。宿主USB驅(qū)動程序控制插入其中的USB設(shè)備,而USB設(shè)備的驅(qū)動程序控制設(shè)備如何作為一個USB設(shè)備和主機(jī)通訊。這里主要討論設(shè)備驅(qū)動。


    USB的基本通信的形式基本通過端點(diǎn)的東西。USB端點(diǎn)只能往一個方向傳輸數(shù)據(jù),從主機(jī)到設(shè)備或從設(shè)備到主機(jī)。USB端點(diǎn)分別具有不同的傳輸數(shù)據(jù)的方式,他們有4種類型,分別是:1)控制端點(diǎn)用來控制對USB設(shè)備不同部分的訪問。他們用于配置設(shè)備,獲取設(shè)備信息,獲取設(shè)備的狀態(tài)報(bào)告,發(fā)送命令到設(shè)備。它是一種非周期性的可靠的傳輸。2)中斷端點(diǎn)就是設(shè)備傳輸數(shù)據(jù)時(shí)以一個固定的速率來傳輸少量的數(shù)據(jù)。這些端點(diǎn)是鼠標(biāo)和USB鍵盤所使用的主要傳輸方式。它通常用于發(fā)送數(shù)據(jù)到USB設(shè)備以控制設(shè)備,一般不用來傳輸大量數(shù)據(jù)。USB協(xié)議保證這些傳輸有足夠的保留帶寬來傳輸數(shù)據(jù)。3)等時(shí)端點(diǎn)同樣可以傳輸大批量的數(shù)據(jù),但數(shù)據(jù)是否到達(dá)沒有保障,這些端點(diǎn)用于可以應(yīng)付數(shù)據(jù)丟失的情況,這類設(shè)備更注重于保持一定的恒定的數(shù)據(jù)流,實(shí)時(shí)的數(shù)據(jù)收集都使用這類端點(diǎn)。4)批量端點(diǎn)傳輸大量的數(shù)據(jù)。這些端點(diǎn)通常比中斷端點(diǎn)大的多他們常用于需要確保沒有數(shù)據(jù)丟失的傳輸設(shè)備。USB協(xié)議不保證這些傳輸始終可以在特定的時(shí)間內(nèi)完成。如果總線上的空間不足以發(fā)送整個批量包。它將被分割為多個包進(jìn)行傳輸。
    當(dāng)一個USB設(shè)備連接到主機(jī)時(shí),主機(jī)會給這個設(shè)備分配一個1~127之間的唯一的設(shè)備號同時(shí)讀取該設(shè)備的描述符,該設(shè)備描述符是描述設(shè)備信息及其屬性的數(shù)據(jù)結(jié)構(gòu),USB以一種層次化的結(jié)構(gòu)定義設(shè)備的描述符,設(shè)備描述符給出了USB設(shè)備的一般信息,包括對設(shè)備及所有設(shè)備配置起全程作用的信息,一個USB設(shè)備只能有一個設(shè)備描述符,配置描述符中的信息與設(shè)備特定的配置相關(guān),一個USB設(shè)備可以有一個或多個配置描述符,每一個配置描述符又由一個或多個接口描述符組成,接口描述符的信息是與設(shè)備驅(qū)動程序的開發(fā)密切相關(guān),可以一個接口對應(yīng)一個設(shè)備驅(qū)動程序也可以多個接口對應(yīng)一個設(shè)備驅(qū)動程序,接口描述符由零個或多個端點(diǎn)描述符組成,端點(diǎn)描述符定義了在一個給定的設(shè)備里實(shí)現(xiàn)的實(shí)際寄存器,這些描述符定義了每個寄存器的功能和特定的信息如端點(diǎn)要求的傳輸類型、傳輸方向、帶寬要求、查詢間隔等。另外,還有一個可選的宇符串描述符,它以UNCOND碼的格式給出了一些可讀的信息,這些信息通常是有關(guān)設(shè)備生產(chǎn)廠商、設(shè)備名設(shè)備序列號等,通過這些不同層次的描述符,主機(jī)設(shè)備驅(qū)動程序就可以知道具體設(shè)備的相關(guān)信息,從而對設(shè)備進(jìn)行相應(yīng)控制。[!--empirenews.page--]
1.3 USB驅(qū)動程序框架
1.3.1 基本數(shù)據(jù)結(jié)構(gòu)
    usb-skel設(shè)備使用自定義結(jié)構(gòu)usb_skel記錄設(shè)備驅(qū)動用到的所有描述符,該結(jié)構(gòu)定義如下:

1.3.2 驅(qū)動程序初始化和注銷
    同其他所有的Linux設(shè)備驅(qū)動程序一樣,usb-skel驅(qū)動使用module_init()宏初始化函數(shù),使用module_exit()宏注銷函數(shù)。usb-skel驅(qū)動的初始化函數(shù)usb_skel_init()函數(shù),定義如下:

    在USB驅(qū)動中調(diào)用usb_deregister()函數(shù)注銷usb-skel設(shè)備驅(qū)動,函數(shù)定義如下:

1.3.3 初始化設(shè)備
    從skel_driver結(jié)構(gòu)可以知道usb-skel設(shè)備的初始化函數(shù)是skel_probe()函數(shù),設(shè)備初始化主要是探測設(shè)備類型,分配USB設(shè)備用到的urb資源,注冊USB設(shè)備操作函數(shù)等。
    skel_class結(jié)構(gòu)變量記錄了usb-skel設(shè)備信息,定義如下:
[!--empirenews.page--]
    name變量使用%d通配符表示一個整型變量,當(dāng)一個usb-skel類型的設(shè)備連接到USB總先后會2按照子設(shè)備編號自動設(shè)置設(shè)備名稱。Fops設(shè)備操作函數(shù)結(jié)構(gòu)變量,定義如下:

1.3.4 設(shè)備注銷
    skel_disconnect()函數(shù)在注銷設(shè)備時(shí)被調(diào)用,定義如下:


2 USB串口驅(qū)動
2. 1 驅(qū)動初始化函數(shù)
    usb_serial_init()函數(shù)是一個典型的USB設(shè)備驅(qū)動初始化函數(shù),定義如下:
[!--empirenews.page--]

    函數(shù)首先調(diào)用alloc_tty_driver()函數(shù)分配一個串口驅(qū)動描述符;然后設(shè)置串口驅(qū)動的屬性,包括驅(qū)動的主從設(shè)備號、設(shè)備類型、串口初始化參數(shù)等;串口驅(qū)動描述符設(shè)置完畢后,調(diào)用usb_register()函數(shù)注冊USB串口設(shè)備。
2. 2 驅(qū)動釋放函數(shù)

2.3 串口操作函數(shù)
    USB串口設(shè)備驅(qū)動使用了一個tty_operations類型的結(jié)構(gòu),該結(jié)構(gòu)包含了串口的所有操作,定義如下:
   

    按上述的步驟和方法通過lnsmod命令成功實(shí)現(xiàn)了USB驅(qū)動程序的加載,成功的通過USB串口進(jìn)行了數(shù)據(jù)的讀寫。

3 結(jié)論
    新出的Linux2.6內(nèi)核加入了對USB2.0的支持,重新定義了usb_class_driver結(jié)構(gòu)體。同時(shí)對探測函數(shù)probe和usb_submit_urb做了修改,包含了advanced linux sound Archiecture可以更安全的使用USB設(shè)備。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉