JZ2440 usb裝置驅動

2021-07-13 19:53:33 字數 2103 閱讀 2108

/*

參考例子: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...