25 2 4 USB驅動程式框架

2021-06-16 03:37:42 字數 2620 閱讀 8554

linux

核心**

driver/usb/usb-skeleton.c

檔案是乙個標準的

usb裝置驅動程式。編寫乙個

usb裝置的驅動可以參考

usb-skeleton.c

檔案,實際上,可以直接修改該檔案驅動新的

usb裝置。下面以

usb-skeleton.c

檔案為例分析

usb-skel

裝置驅動框架。

1.基本資料結構

usb-skel

裝置使用自定義結構

usb_skel

記錄裝置驅動用到的所有描述符,該結構定義如下:

struct usb_skel ;

usb-skel

裝置驅動把

usb_skel

結構存放在了

urb結構的

context

指標裡。通過

urb,裝置的所有操作函式都可以訪問到

usb_skel

結構。其中,

limit_sem

成員是乙個訊號量,當多個

usb-skel

型別的裝置存在於系統中的時候,需要控制裝置之間的資料同步。

2.驅動程式初始化和登出

與其他所有的

linux

裝置驅動程式一樣,

usb-skel

驅動使用

module_init()

巨集設定初始化函式,使用

module_exit()

巨集設定登出函式。

usb-skel

驅動的初始化函式是

usb_skel_init()

函式,定義如下:

static int __init usb_skel_init(void)

usb_skel_init()

函式呼叫核心提供的

usb_register()

函式註冊了乙個

usb_driver

型別的結構變數,該變數定義如下:

static struct usb_driver skel_driver = ;

skel_driver

結構變數中,定義了

usb-skel

裝置的名、裝置初始化函式、裝置登出函式和

usb id

對映表。其中

usb-skel

裝置的usb id

對映表定義如下:

static struct usb_device_id skel_table = , /

*terminating entry */

};skel_table

中只有一項,定義了乙個預設的

usb-skel

裝置的id

。其中,

usb_skel_vendor_id

是usb

裝置的廠商id,

usb_skel_product_id

是usb

裝置id

。登出函式的操作比較簡單,呼叫

usb_deregister()

函式登出

usb-skel

裝置驅動,函式定義如下:

static void __exit usb_skel_exit(void) 3

.裝置初始化

從skel_driver

結構可以知道

usb-skel

裝置的初始化函式是

skel_probe()

函式。裝置初始化主要是探測裝置型別,分配

usb裝置用到的

urb資源,註冊

usb裝置操作函式等。

skel_class

結構變數記錄了

usb-skel

裝置資訊,定義如下:

static struct usb_class_driver skel_class = ;

name

變數使用

%d萬用字元表示乙個整型變數,當乙個

usb-skel

型別的裝置連線到

usb匯流排後會按照子裝置編號自動設定裝置名稱。

fops

是裝置操作函式結構變數,定義如下:

static struct file_operations skel_fops = ;

skel_ops

定義了usb-skel

裝置的操作函式。當在

usb-skel

裝置上發生相關事件時,

usb檔案系統會呼叫對應的函式處理。

4.裝置登出

skel_disconnect()

函式在登出裝置的時候被呼叫,定義如下:

static void skel_disconnect(struct usb_inte***ce

*inte***ce)

skel_disconnect()

函式釋放

usb-skel

裝置用到的資源。首先獲取

usb裝置介面描述,之後設定為無效;然後呼叫

usb_deregister_dev()

函式登出

usb裝置的操作描述符,登出操作本身需要加鎖;登出裝置描述符後,更新核心對

usb-skel

裝置的引用計數。

USB裝置驅動程式

一.usb載入式流介面驅動要點分析 為了支援不同型別的外圍裝置,wince平台提供了具有定製介面的流介面驅動程式模型。因為大部分usb外圍裝置由於功能性更適合流介面驅動的結構,所以一般都採用載入式流介面驅動程式模型來開發usb裝置驅動程式。1 usb系統結構分析 wince下usb系統軟體由兩層組成...

USB驅動程式分析

1.對於每個pc來說,都有乙個或者多個稱為主機 host 控制器的裝置,該主機控制器和乙個根集線器 hub 作為乙個整體。2.每個host控制器其實就是乙個pci裝置,掛載在pci匯流排上。驅動開發人員應該給host控制器提供驅動程式,用usb hcd結構體表示。3.usb host控制器都會自帶乙...

USB裝置驅動程式導讀

隨著 usb裝置的不斷增加,我們這些開發人員也就多了對 usb裝置進行驅動程式開發的工作。但是對於很多初學者來說,存在以下三個困難 一是對wince 的驅動程式結構了解得太少,沒辦法得心應手的專注於驅動程式的開發工作 二是對wince 自帶的usb 驅動程式的例子沒有弄懂,看到一大堆資料夾結構和源程...