2011年6月12日 星期日

[Linux] USB Device Driver

0. 告訴 USB core 此driver 支援的裝置

/* 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);



1. usb_register

建立一個值 struct usb_driver 架構, 只有 5 個成員需要被初始化:
static struct usb_driver skel_driver = {
.owner = THIS_MODULE,
.name = "skeleton",
.id_table = skel_table,
.probe = skel_probe,
.disconnect = skel_disconnect,
};
在module init 時, 呼叫

usb_register( skel_driver);

2. Probe 偵測裝置
static int usb_skel_probe(struct usb_interface *intf, const struct usb_device_id *id)
{
1.檢查新裝置是否支援
2.初始化任何管理USB裝置所需的任何私有結構
3.將裝置相關訊息存入私有結構 usb_set_intfdata(interface, dev);
4.向usb core 註冊一個裝置 usb_register_dev(interface, &skel_class);
}

3. Disconnect 卸載裝置
static void usb_skel_disconnect(struct usb_interface *intf)
{
1.取回之前呼叫 usb_set_intfdata 所設定的數據
2.設定數據指標在 struct us_interface 架構為 NULL 來阻止在不正確存取
3.遞減使用次數
}
4. 卸載模組


使用 usb_deregister()



沒有留言:

熱門文章