在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在嵌入式Linux操作系統中完成USB設備驅動設計

電子設計 ? 來源:郭婷 ? 作者:電子設計 ? 2019-05-21 08:01 ? 次閱讀

隨著計算機外圍硬件的擴展,各種外圍設備使用不同的總線接口,導致計算機外部各種總線繁多,管理困難,USB總線可以解決這些問題,因此而誕生。USB總線提供統一的外設的接口方式,并且支持熱插拔,方便了廠商開發設備和用戶使用設備。USB(通用串行總線)是由Microsft,Compad,Inter和NEC等推出的外圍總線接口,目前已發展到2.0標準最高支持480Mb/s的速率,最多可以支持127個外設。

嵌入式Linux是一款源代碼完全免費的新興操作系統,用戶可以用戶可以通過網絡等其他途徑免費獲得,并可以任意修改其源代碼,這是其他的操作系統做不到的。正是由于這一點,Linux得到了廣泛的應用。

1 Linux中USB設備驅動程序框架及數據結構

1.1 USB的體系結構

USB接口標準支持外部設備和主機之間進行數據傳送。在USB結構中主機頂設各種類型外設使用的總線寬度。當外設和主機在運行時,USB總線允許使用,設置,添加和拆除外設。

在USB體系結構中一個USB系統可以分成USB設備、USB主機和USB互聯3個部分。USB互聯是USB設備和USB主機之間進行連接通信的操作,主要包括:

1)總線拓撲結構:UsB主機和USB設備之間的連接方式;

2)數據流模式:描述USB通信系統數據如何從產生方傳遞到使用方;

3)USB調度:USB總線是一個共享連接,對可以使用的連按進行調度以支持同步數據傳輸,并避免優先級判斷的開銷。

USB的物理連接是有層次的星型結構,如圖1所示。

在嵌入式Linux操作系統中完成USB設備驅動設計

圖1 USB體系拓撲結構圖

從圖中可以看出USB集線器在一個節點上連接多個設備,每條線段都是點點連接,每個USB集線器在星形的中心。從主機到設備或者USB集線器,或USB集線器到設備都是點點連接。

1.2 USB驅動程序的結構

USN總線在技術層面上是非常簡單的,它是一個單主方式實現的,主機輪詢各種不同的外圍設備,USB另外一個重要的特性是它只擔當設備和主控制器之間通訊通道的角色,對所發送的數據沒有任何特殊的內容和結構上的要求。

Linux支持兩種類型的USB驅動,宿主系統上的驅動程序和設備上的驅動程序。宿主USB驅動程序控制插入其中的USB設備,而USB設備的驅動程序控制設備如何作為一個USB設備和主機通訊。這里主要討論設備驅動。

USB的基本通信的形式基本通過端點的東西。USB端點只能往一個方向傳輸數據,從主機到設備或從設備到主機。USB端點分別具有不同的傳輸數據的方式,他們有4種類型,分別是:1)控制端點用來控制對USB設備不同部分的訪問。他們用于配置設備,獲取設備信息,獲取設備的狀態報告,發送命令到設備。它是一種非周期性的可靠的傳輸。2)中斷端點就是設備傳輸數據時以一個固定的速率來傳輸少量的數據。這些端點是鼠標和USB鍵盤所使用的主要傳輸方式。它通常用于發送數據到USB設備以控制設備,一般不用來傳輸大量數據。USB協議保證這些傳輸有足夠的保留帶寬來傳輸數據。3)等時端點同樣可以傳輸大批量的數據,但數據是否到達沒有保障,這些端點用于可以應付數據丟失的情況,這類設備更注重于保持一定的恒定的數據流,實時的數據收集都使用這類端點。4)批量端點傳輸大量的數據。這些端點通常比中斷端點大的多他們常用于需要確保沒有數據丟失的傳輸設備。USB協議不保證這些傳輸始終可以在特定的時間內完成。如果總線上的空間不足以發送整個批量包。它將被分割為多個包進行傳輸。

當一個USB設備連接到主機時,主機會給這個設備分配一個1~127之間的唯一的設備號同時讀取該設備的描述符,該設備描述符是描述設備信息及其屬性的數據結構,USB以一種層次化的結構定義設備的描述符,設備描述符給出了USB設備的一般信息,包括對設備及所有設備配置起全程作用的信息,一個USB設備只能有一個設備描述符,配置描述符中的信息與設備特定的配置相關,一個USB設備可以有一個或多個配置描述符,每一個配置描述符又由一個或多個接口描述符組成,接口描述符的信息是與設備驅動程序的開發密切相關,可以一個接口對應一個設備驅動程序也可以多個接口對應一個設備驅動程序,接口描述符由零個或多個端點描述符組成,端點描述符定義了在一個給定的設備里實現的實際寄存器,這些描述符定義了每個寄存器的功能和特定的信息如端點要求的傳輸類型、傳輸方向、帶寬要求、查詢間隔等。另外,還有一個可選的宇符串描述符,它以UNCOND碼的格式給出了一些可讀的信息,這些信息通常是有關設備生產廠商、設備名設備序列號等,通過這些不同層次的描述符,主機設備驅動程序就可以知道具體設備的相關信息,從而對設備進行相應控制。

在嵌入式Linux操作系統中完成USB設備驅動設計

圖2 USB驅動程序層次圖

隨著計算機外圍硬件的擴展,各種外圍設備使用不同的總線接口,導致計算機外部各種總線繁多,管理困難,USB總線可以解決這些問題,因此而誕生。USB總線提供統一的外設的接口方式,并且支持熱插拔,方便了廠商開發設備和用戶使用設備。USB(通用串行總線)是由Microsft,Compad,Inter和NEC等推出的外圍總線接口,目前已發展到2.0標準最高支持480Mb/s的速率,最多可以支持127個外設。

嵌入式Linux是一款源代碼完全免費的新興操作系統,用戶可以用戶可以通過網絡等其他途徑免費獲得,并可以任意修改其源代碼,這是其他的操作系統做不到的。正是由于這一點,Linux得到了廣泛的應用。

1 Linux中USB設備驅動程序框架及數據結構

1.1 USB的體系結構

USB接口標準支持外部設備和主機之間進行數據傳送。在USB結構中主機頂設各種類型外設使用的總線寬度。當外設和主機在運行時,USB總線允許使用,設置,添加和拆除外設。

在USB體系結構中一個USB系統可以分成USB設備、USB主機和USB互聯3個部分。USB互聯是USB設備和USB主機之間進行連接通信的操作,主要包括:

1)總線拓撲結構:UsB主機和USB設備之間的連接方式;

2)數據流模式:描述USB通信系統數據如何從產生方傳遞到使用方;

3)USB調度:USB總線是一個共享連接,對可以使用的連按進行調度以支持同步數據傳輸,并避免優先級判斷的開銷。

USB的物理連接是有層次的星型結構,如圖1所示。

在嵌入式Linux操作系統中完成USB設備驅動設計

圖1 USB體系拓撲結構圖

從圖中可以看出USB集線器在一個節點上連接多個設備,每條線段都是點點連接,每個USB集線器在星形的中心。從主機到設備或者USB集線器,或USB集線器到設備都是點點連接。

1.2 USB驅動程序的結構

USN總線在技術層面上是非常簡單的,它是一個單主方式實現的,主機輪詢各種不同的外圍設備,USB另外一個重要的特性是它只擔當設備和主控制器之間通訊通道的角色,對所發送的數據沒有任何特殊的內容和結構上的要求。

Linux支持兩種類型的USB驅動,宿主系統上的驅動程序和設備上的驅動程序。宿主USB驅動程序控制插入其中的USB設備,而USB設備的驅動程序控制設備如何作為一個USB設備和主機通訊。這里主要討論設備驅動。

USB的基本通信的形式基本通過端點的東西。USB端點只能往一個方向傳輸數據,從主機到設備或從設備到主機。USB端點分別具有不同的傳輸數據的方式,他們有4種類型,分別是:1)控制端點用來控制對USB設備不同部分的訪問。他們用于配置設備,獲取設備信息,獲取設備的狀態報告,發送命令到設備。它是一種非周期性的可靠的傳輸。2)中斷端點就是設備傳輸數據時以一個固定的速率來傳輸少量的數據。這些端點是鼠標和USB鍵盤所使用的主要傳輸方式。它通常用于發送數據到USB設備以控制設備,一般不用來傳輸大量數據。USB協議保證這些傳輸有足夠的保留帶寬來傳輸數據。3)等時端點同樣可以傳輸大批量的數據,但數據是否到達沒有保障,這些端點用于可以應付數據丟失的情況,這類設備更注重于保持一定的恒定的數據流,實時的數據收集都使用這類端點。4)批量端點傳輸大量的數據。這些端點通常比中斷端點大的多他們常用于需要確保沒有數據丟失的傳輸設備。USB協議不保證這些傳輸始終可以在特定的時間內完成。如果總線上的空間不足以發送整個批量包。它將被分割為多個包進行傳輸。

當一個USB設備連接到主機時,主機會給這個設備分配一個1~127之間的唯一的設備號同時讀取該設備的描述符,該設備描述符是描述設備信息及其屬性的數據結構,USB以一種層次化的結構定義設備的描述符,設備描述符給出了USB設備的一般信息,包括對設備及所有設備配置起全程作用的信息,一個USB設備只能有一個設備描述符,配置描述符中的信息與設備特定的配置相關,一個USB設備可以有一個或多個配置描述符,每一個配置描述符又由一個或多個接口描述符組成,接口描述符的信息是與設備驅動程序的開發密切相關,可以一個接口對應一個設備驅動程序也可以多個接口對應一個設備驅動程序,接口描述符由零個或多個端點描述符組成,端點描述符定義了在一個給定的設備里實現的實際寄存器,這些描述符定義了每個寄存器的功能和特定的信息如端點要求的傳輸類型、傳輸方向、帶寬要求、查詢間隔等。另外,還有一個可選的宇符串描述符,它以UNCOND碼的格式給出了一些可讀的信息,這些信息通常是有關設備生產廠商、設備名設備序列號等,通過這些不同層次的描述符,主機設備驅動程序就可以知道具體設備的相關信息,從而對設備進行相應控制。

在嵌入式Linux操作系統中完成USB設備驅動設計

圖2 USB驅動程序層次圖

1.3 USB驅動程序框架

1.3.1 基本數據結構

usb-skel設備使用自定義結構usb_skel記錄設備驅動用到的所有描述符,該結構定義如下:

在嵌入式Linux操作系統中完成USB設備驅動設計

1.3.2 驅動程序初始化和注銷

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

在嵌入式Linux操作系統中完成USB設備驅動設計

sb_skel_init()函數調用內核提供的usb_register()函數注冊了一個usb_driver類型的結構變量,該變量定義如下:

在嵌入式Linux操作系統中完成USB設備驅動設計

其中usb_skel設備的USB ID映射表定義如下:

在嵌入式Linux操作系統中完成USB設備驅動設計

在USB驅動中調用usb_deregister()函數注銷usb-skel設備驅動,函數定義如下:

在嵌入式Linux操作系統中完成USB設備驅動設計

1.3.3 初始化設備

從skel_driver結構可以知道usb-skel設備的初始化函數是skel_probe()函數,設備初始化主要是探測設備類型,分配USB設備用到的urb資源,注冊USB設備操作函數等。

skel_class結構變量記錄了usb-skel設備信息,定義如下:

在嵌入式Linux操作系統中完成USB設備驅動設計

name變量使用%d通配符表示一個整型變量,當一個usb-skel類型的設備連接到USB總先后會2按照子設備編號自動設置設備名稱。Fops設備操作函數結構變量,定義如下:

在嵌入式Linux操作系統中完成USB設備驅動設計

1.3.4 設備注銷

skel_disconnect()函數在注銷設備時被調用,定義如下:

在嵌入式Linux操作系統中完成USB設備驅動設計

2 USB串口驅動

2. 1 驅動初始化函數

usb_serial_init()函數是一個典型的USB設備驅動初始化函數,定義如下:

在嵌入式Linux操作系統中完成USB設備驅動設計

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

2. 2 驅動釋放函數

在嵌入式Linux操作系統中完成USB設備驅動設計

2.3 串口操作函數

USB串口設備驅動使用了一個tty_operations類型的結構,該結構包含了串口的所有操作,定義如下:

在嵌入式Linux操作系統中完成USB設備驅動設計

按上述的步驟和方法通過lnsmod命令成功實現了USB驅動程序的加載,成功的通過USB串口進行了數據的讀寫。

3 結論

新出的Linux2.6內核加入了對USB2.0的支持,重新定義了usb_class_driver結構體。同時對探測函數probe和usb_submit_urb做了修改,包含了advanced linux sound Archiecture可以更安全的使用USB設備。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    60

    文章

    8147

    瀏覽量

    270986
  • Linux
    +關注

    關注

    87

    文章

    11466

    瀏覽量

    212843
  • 計算機
    +關注

    關注

    19

    文章

    7633

    瀏覽量

    90233
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    嵌入式操作系統的發展

    一.嵌入式操作系統1.嵌入式操作系統的發展(1)Tiny OS操作系統1)開源深度輕量級操作系統
    發表于 10-27 07:26

    嵌入式Linux操作系統

    ARM+LINUX路線,主攻嵌入式Linux操作系統及其上應用軟件開發目標:(1)掌握主流嵌入式微處理器的結構與原理(初步定為arm9)(2
    發表于 10-27 10:22

    基于Linux嵌入式操作系統

    2.2 實時操作系統的評價指標三、基于Linux嵌入式操作系統3.1 ARMLinux簡介3.2 uCLinux簡介四、嵌入式
    發表于 11-08 09:05

    Linux嵌入式操作系統移植

    ??如果就“Linux嵌入式操作系統移植”打個比喻,那么“Linux嵌入式操作系統移植”就像是給
    發表于 12-16 07:18

    基于Linux操作系統嵌入式網關的實現

    基于Linux操作系統嵌入式網關的實現
    發表于 03-28 09:48 ?29次下載

    嵌入式操作系統Linux 的串口應用編程

    針對嵌入式Linux操作系統的特點,分析系統下串行通信口編程控制的方法,總結程序設計的步驟;
    發表于 05-14 14:34 ?28次下載

    嵌入式ARM芯片及linux操作系統

    關于嵌入式和arm的一些介紹,包括嵌入式概念和linux操作系統的若干概念。
    發表于 04-05 16:20 ?7次下載

    USB設備驅動系統嵌入式linux系統的實現

    嵌入式 linux 系統環境以其易于移植裁減、內核小、效率高、完整、原代碼開放及性能優異等特點,嵌入式領域得到了非常廣泛的應用。
    發表于 10-31 16:15 ?4次下載
    <b class='flag-5'>USB</b><b class='flag-5'>設備</b>端<b class='flag-5'>驅動</b><b class='flag-5'>系統</b>與<b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b><b class='flag-5'>系統</b>的實現

    嵌入式操作系統是什么_嵌入式操作系統有哪些

    嵌入式操作系統(Embedded OperatingSystem,簡稱:EOS)是指用于嵌入式系統操作系統
    發表于 04-08 14:36 ?2.1w次閱讀

    Linux嵌入式操作系統有哪些優勢

    嵌入式Linux操作系統是將Linux操作系統進行裁剪,使Linux
    發表于 07-10 16:34 ?5316次閱讀

    嵌入式linux操作系統

    2. 怎么學習嵌入式Linux操作系統本文假設您是零基礎,以實用為主,用最快的時間讓你入門;后面也會附上想深入學習時可以參考的資料。實際工作
    發表于 11-01 16:57 ?5次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b><b class='flag-5'>操作系統</b>

    嵌入式操作系統

    2.2 實時操作系統的評價指標三、基于Linux嵌入式操作系統3.1 ARMLinux簡介3.2 uCLinux簡介四、嵌入式
    發表于 11-03 18:36 ?46次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>

    什么是嵌入式操作系統

    嵌入式操作系統是一種專門的操作系統(OS),旨在為非計算機的設備執行特定任務。嵌入式操作系統的主
    的頭像 發表于 12-23 15:33 ?8271次閱讀
    什么是<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>?

    有無操作系統嵌入式Linux驅動設備有何區別?

    有無操作系統嵌入式Linux驅動設備有何區別? 嵌入式系統
    的頭像 發表于 10-29 17:29 ?994次閱讀

    嵌入式 Linux 操作系統配置

    隨著物聯網(IoT)和智能設備的快速發展,嵌入式系統各個領域扮演著越來越重要的角色。Linux因其開源、靈活和穩定的特性,成為
    的頭像 發表于 11-06 10:22 ?1116次閱讀
    主站蜘蛛池模板: 香港午夜理理伦_级毛片 | аbt天堂资源在线官网 | 中文字幕一区二区三区免费视频 | 国内精品伊人久久大香线焦 | 亚洲黄色一区 | 欧美性色黄在线视 | 亚洲美女视频在线观看 | 黄色美女免费网站 | 午夜老司机福利 | 美女天天操 | 黄色网址视频在线播放 | 日本欧美一区二区三区免费不卡 | 视频在线观看一区二区三区 | 天天摸天天躁天天添天天爽 | 色多多免费观看在线 | 国产性做久久久久久 | 视频在线观看一区 | 91久久精品青青草原伊人 | 欧美日韩亚洲国产一区二区综合 | 在线免费视频 | 色网址在线 | 亚洲成a人片在线观看尤物 亚洲成a人片在线观看中 | 欧美性猛交xxxx | 天天夜天天干 | 毛片日韩 | 午夜三级网站 | 宅男666在线永久免费观看 | 午夜视频在线观看完整高清在线 | 色妹子综合| 天天天色| 最新久久免费视频 | 日日射天天射 | 久久99热精品免费观看无卡顿 | 特黄特色大片免费视频大全 | 卡1卡2卡3精品推荐老狼 | 国模伊人| 婷婷 色天使 | 777欧美 | 亚洲va久久久噜噜噜久久天堂 | 泰国一级毛片aaa下面毛多 | 男人的午夜天堂 |