/* 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,
};
.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);
}
{
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.遞減使用次數
{
1.取回之前呼叫 usb_set_intfdata 所設定的數據
2.設定數據指標在 struct us_interface 架構為 NULL 來阻止在不正確存取
3.遞減使用次數
}
4. 卸載模組
使用 usb_deregister()
沒有留言:
張貼留言