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 驅動程式的例子沒有弄懂,看到一大堆資料夾結構和源程...