<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式Linux下USB驅動(dòng)程序的設計

嵌入式Linux下USB驅動(dòng)程序的設計

作者: 時(shí)間:2013-10-08 來(lái)源:網(wǎng)絡(luò ) 收藏

  一、引言

本文引用地址:http://dyxdggzs.com/article/237803.htm

  (Universal Serial Bus)即通用串行總線(xiàn),是一種全新的雙向同步傳輸的支持熱插拔的數據傳輸總線(xiàn),其目的是為了提供一種兼容不同速度的、可擴充的并且使用方便的外圍設備接口,同時(shí)也是為了解決計算機接口的太多的弊端而設計的。一個(gè)系統主要有三部分組成:互連、USB主機、USB設備三部分組成的,其結構如圖1所示。在編寫(xiě)USB設備設計時(shí),可以分為三部分編寫(xiě):主機端設備、主機控制器設計和設備端驅動(dòng)程序三部分,在本文中重點(diǎn)介紹主機端驅動(dòng)程序的設計。

  二、USB設備驅動(dòng)程序的設計

  USB設備驅動(dòng)程序的設計包括主機端設備驅動(dòng)程序設計、主機控制器驅動(dòng)程序設計和設備端驅動(dòng)程序設計三部分組成。主機端設備驅動(dòng)程序就是通常說(shuō)的設備驅動(dòng)程序,它是主機環(huán)境中為用戶(hù)應用程序提供一個(gè)訪(fǎng)問(wèn)USB外設的接口。為這部分驅動(dòng)程序提供編程接口,驅動(dòng)程序設計者只要按照需求編寫(xiě)驅動(dòng)程序框架,通過(guò)調用操作系統提供的API接口函數可以完成對USB外設的特定訪(fǎng)問(wèn)。

  主機控制驅動(dòng)主要是對USB主機控制器的驅動(dòng),在大多數PC環(huán)境下,主機控制器都是由操作系統提供。設備一般都沒(méi)有USB主機控制器,只是工作在Slave模式下。如果要使USB具有主機功能,那么設備中需要選用一個(gè)帶主機控制器的USB接口控制芯片, 同時(shí)自己還要有實(shí)現該主機控制器的驅動(dòng)程序。目前內核中只提供USB主機控制器的開(kāi)放主機控制器和通用主機控制器接口兩種規格,而這兩種規格主要用在PC架構中。USB主機端驅動(dòng)程序與主機控制器的結構如圖2所示。其中USB核是的一個(gè)子模塊,集中定義了一組USB相關(guān)的數據結構、宏以及API函數。

  USB設備驅動(dòng)程序是常說(shuō)的設備固件程序的一部分,提供設備信息與主機的通信接口。設備端USB驅動(dòng)程序設計由以下幾部分處理程序組成。初始化例程:完成描述符指針、端點(diǎn)、配置改變等操作。數據傳輸例程:完成控制傳輸、批量傳輸、中斷傳輸及同步傳輸等傳輸方式下的數據收發(fā)工作。標準設備處理請求:處理標準設備請求。廠(chǎng)商請求處理:處理生產(chǎn)商指定請求。其他操作:處理主機發(fā)出的端口復位、配置改變等操作。

  1.USB設備驅動(dòng)程序框架

  USB驅動(dòng)程序首先要向Linux內核注冊自己,并告訴系統它所支持的設備類(lèi)型以及它所支持的操作。這些信息通過(guò)一個(gè)usb_driver結構來(lái)傳遞。usb_driver結構如下:

  static struct usb_driver skel_driver = {

  name: "skeleton";/*驅動(dòng)程序的名稱(chēng)*/

  probe: skel_probe; /*設備列舉時(shí)被調用*/

  disconnect: skel_disconnect; /*設備被卸載時(shí)被調用*/

  fops: skel_fops; /*指向一個(gè)file_operation結構,內核通過(guò)它來(lái)訪(fǎng)問(wèn)驅動(dòng)程序的文件操作函數,與用戶(hù)程序的read、write等操作進(jìn)行交互*/

  minor USB_SKEL_MINOR_BASE; /*指向設備的次設備號,用于系統識別主設備號相同的設備(即一個(gè)驅動(dòng)程序可以同時(shí)支持多個(gè)USB設備*/

  id_table: skel_table; /*保存設備的廠(chǎng)商ID和產(chǎn)品ID,作為該設備的唯一標識,驅動(dòng)程序向系統注冊后,當下次插入時(shí),系統根據這個(gè)標識查找正確的驅動(dòng)程序,實(shí)現設備的即插即用*/

  };

  static struct file_operation skel_fops={

  {

  owner:THIS_MODULE,

  read:skel_read,

  write:skel_write,

  ioctl:skel_ioctl,

  open:skel_open,

  release:skel_release,

  };

 ?。?)注冊和注銷(xiāo)

  USB驅動(dòng)程序注冊,就是把在初始化函數中填好的use_driver結構作為參數傳遞給

  use_register()函數即可,函數的調用方法為:

  result=usb_register(skel_driver);

  當要從系統卸載驅動(dòng)程序時(shí),也是將use_driver結構作為參數傳遞給usb_deregister 函數處理。 函數的調用格式為:

  static void __exit usb_skel_exit(void)

  { /* deregister this driver with the USB subsystem */

  usb_deregister(skel_driver);

  }

  module_exit(usb_skel_exit);

  當USB設備插入時(shí),為了使linux-hotplug(Linux中PCI、USB等設備熱插拔支持)系統自動(dòng)裝載驅動(dòng)程序,需要創(chuàng )建一個(gè)MODULE_DEVICE_TABLE。核心代碼如下(這個(gè)模塊僅支持某一特定設備):

  /* table of devices that work with this driver */

  static struct usb_device_id skel_table [] = {

  { USB_DEVICE(USB_SKEL_VENDOR_ID,

  USB_SKEL_PRODUCT_ID) },

  { } /* Terminating entry */

  };

  MODULE_DEVICE_TABLE (usb, skel_table);

  USB_DEVICE宏利用廠(chǎng)商ID和產(chǎn)品ID提供了一個(gè)設備的唯一標識。當系統插入一個(gè)ID匹配的USB設備到USB總線(xiàn)時(shí),驅動(dòng)會(huì )在USB core中注冊,驅動(dòng)程序中probe 函數也就會(huì )被調用。usb_device 結構指針、接口號和接口ID都會(huì )被傳遞到函數中。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程



上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: 嵌入式 Linux USB 驅動(dòng)程序

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>