/*
參考例子:drivers\hid\usbhid\usbmouse.c
*功能:插入sub滑鼠列印:滑鼠操作則列印相應的資訊**
2023年6月20日22:51:16
*/#include
#include
#include
#include
#include
#include
static struct input_dev * uk_dev;
static char * usb_buf;//虛擬位址
static dma_addr_t usb_buf_phys;//實體地址
static struct urb *uk_urb;
static int len;
static void usbmouse_as_key_irq(struct urb *urb)
printk("\n");
/* 重新提交urb */
usb_submit_urb(uk_urb, gfp_kernel);}/*
對usb_device 巨集進行分析
*#define usb_device(vend,prod) \
*.match_flags = usb_device_id_match_device, .idvendor = (vend), \
*.idproduct = (prod)**
該巨集定義支援的廠家id,和裝置id
*//*
對usb_inte***ce_info巨集分析:
*#define usb_inte***ce_info(cl,sc,pr) \
*.match_flags = usb_device_id_match_int_info, .binte***ceclass = (cl), \
*.binte***cesubclass = (sc), .binte***ceprotocol = (pr)**
*match_flags:表示匹配這個裝置描述符裡面的哪一項,
* usb_device_id_match_int_info表示匹配介面資訊(介面的資訊在介面描述符裡),
*只要介面描述符裡面的介面類.binte***ceclass是cl(什麼東西),
* 介面描述符裡的介面子類.binte***cesubclass是sc(什麼東西),
*介面描述符裡的協議.binte***ceprotocol是pr(什麼東西),就能支援
*//*
只要usb裝置的介面描述符裡的類是hid類,子類是boot,協議是mouse就能支援**/
static struct usb_device_id usbmouse_as_key_id_table = ,
/*該巨集的定義指定了usb裝置驅動程式只支援某個廠家生產(0x1234)的某款產品(0x5678)*/
//,
/* terminating entry */
};/*註冊驅動後,usb_bus_type中的match函式把usb_inte***ce和usb_driver的id_table比較
*若能匹配成功,則呼叫usb_driver中的usbmouse_as_key_probe函式。
*/static int usbmouse_as_key_probe(struct usb_inte***ce *intf, const struct usb_device_id *id)
/*拔掉usb裝置後,則執行usbmouse_as_key_disconnect函式*/
static void usbmouse_as_key_disconnect(struct usb_inte***ce *intf)
}/*分配/設定usb_driver結構體*/
static struct usb_driver usbmouse_as_key_driver = ;
static int usbmouse_as_key_init(void)
static void usbmouse_as_key_exit(void)
module_init(usbmouse_as_key_init);
module_exit(usbmouse_as_key_exit);
module_license("gpl");
USB裝置驅動
1.linux usb架構 usb通訊都是由host端發起的。usb裝置驅動程式分配並初始化乙個urb發給usb core,usb core改一改,發給usb主機控制器驅動,usb主機控制器驅動把它解析成包,在匯流排上進行傳送。usb core是由核心實現的,其實也就是把host control d...
USB裝置驅動
把usb裝置接到pc 右下角彈出 發現android phone 跳出乙個對話方塊,提示你安裝驅動程式 問1.既然還沒有 驅動程式 為何能知道是 android phone 答1.windows裡已經有了usb的匯流排驅動程式,接入usb裝置後,是 匯流排驅動程式 知道你是 android phon...
linux裝置驅動 USB
系統核心中有usb匯流排驅動程式,作用是識別裝置,查詢並安裝裝置驅動程式,提供讀寫函式 當乙個usb裝置插入時,會有以下操作 1.某條線被拉低,硬體感知有裝置接入 2.usb匯流排驅動程式為裝置分配新位址,並告訴usb裝置 3.獲取描述符 4.根據獲取的裝置描述符中的資訊在usb匯流排中新增devi...