成人sese/国产免费人成视频在线观看/九色 在线/免费观看又色又爽又黄的/啪在线视频/日日做日日摸夜夜爽

首頁 新聞 > 科技 > 正文

USB設備驅動程序

// drivers\hid\usbhid\usbmouse.c#include "linux/kernel.h"#include "linux/slab.h"#include "linux/module.h"#include "linux/init.h"#include "linux/usb/input.h"#include "linux/hid.h"static struct input_dev *uk_dev;static char *usb_buf;static dma_addr_t usb_buf_phys;static int len;static struct urb *uk_urb;static struct usb_device_id usbmouse_as_key_id_table [] = {{ USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT,USB_INTERFACE_PROTOCOL_MOUSE) },//{USB_DEVICE(0x1234,0x5678)}, //表示USB設備驅動程序只支持某個廠家生產的某個產品{ } // Terminating entry};static void usbmouse_as_key_irq(struct urb *urb){static unsigned char pre_val;#if 0int i;static int cnt = 0;printk("data cnt %d: ", ++cnt);for (i = 0; i < len; i++){printk("x ", usb_buf[i]);}printk("\n");#endif// USB鼠標數據含義* data[0]: bit0-左鍵, 1-按下, 0-松開* bit1-右鍵, 1-按下, 0-松開* bit2-中鍵, 1-按下, 0-松開*//if ((pre_val & (1<<0)) != (usb_buf[0] & (1<<0))){// 左鍵發生了變化input_event(uk_dev, EV_KEY, KEY_L, (usb_buf[0] & (1<<0)) ? 1 : 0);input_sync(uk_dev);}if ((pre_val & (1<<1)) != (usb_buf[0] & (1<<1))){// 右鍵發生了變化input_event(uk_dev, EV_KEY, KEY_S, (usb_buf[0] & (1<<1)) ? 1 : 0);input_sync(uk_dev);}if ((pre_val & (1<<2)) != (usb_buf[0] & (1<<2))){// 中鍵發生了變化input_event(uk_dev, EV_KEY, KEY_ENTER, (usb_buf[0] & (1<<2)) ? 1 : 0);input_sync(uk_dev);}pre_val = usb_buf[0];// 重新提交urbusb_submit_urb(uk_urb, GFP_KERNEL);}static int usbmouse_as_key_probe(struct usb_interface *intf, const struct usb_device_id *id){struct usb_device *dev = interface_to_usbdev(intf);struct usb_host_interface *interface;struct usb_endpoint_descriptor *endpoint;int pipe;interface = intf->cur_altsetting;endpoint = &interface->endpoint[0].desc;// a. 分配一個input_devuk_dev = input_allocate_device();// b. 設置// b.1 能產生哪類事件set_bit(EV_KEY, uk_dev->evbit);set_bit(EV_REP, uk_dev->evbit);// b.2 能產生哪些事件set_bit(KEY_L, uk_dev->keybit);set_bit(KEY_S, uk_dev->keybit);set_bit(KEY_ENTER, uk_dev->keybit);//c. 注冊input_register_device(uk_dev);// d. 硬件相關操作(使用USB總線驅動程序提供的函數進行讀、寫操作)// 數據傳輸3要素: 源,目的,長度// 1、源: USB設備的某個端點pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);// 2、長度:len = endpoint->wMaxPacketSize;///3、目的:usb_buf = usb_buffer_alloc(dev, len, GFP_ATOMIC, &usb_buf_phys);// 使用"3要素"// 首先分配usb request blockuk_urb = usb_alloc_urb(0, GFP_KERNEL);// 使用"3要素設置urb"usb_fill_int_urb(uk_urb, dev, pipe, usb_buf, len, usbmouse_as_key_irq, NULL, endpoint->bInterval);uk_urb->transfer_dma = usb_buf_phys;uk_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;// 使用URBusb_submit_urb(uk_urb, GFP_KERNEL);return 0;}static void usbmouse_as_key_disconnect(struct usb_interface *intf){struct usb_device *dev = interface_to_usbdev(intf);//printk("disconnect usbmouse!\n");usb_kill_urb(uk_urb);usb_free_urb(uk_urb);usb_buffer_free(dev, len, usb_buf, usb_buf_phys);input_unregister_device(uk_dev);input_free_device(uk_dev);}// 1. 分配/設置usb_driverstatic struct usb_driver usbmouse_as_key_driver = {.name = "usbmouse_as_key_",.probe = usbmouse_as_key_probe,.disconnect = usbmouse_as_key_disconnect,.id_table = usbmouse_as_key_id_table, //比較id_table匹配成功以后調用probe函數};static int usbmouse_as_key_init(void){// 2. 注冊usb_register(&usbmouse_as_key_driver);return 0;}static void usbmouse_as_key_exit(void){usb_deregister(&usbmouse_as_key_driver);}module_init(usbmouse_as_key_init);module_exit(usbmouse_as_key_exit);MODULE_LICENSE("GPL");=================================================================現象:把USB設備接到PC1. 右下角彈出"發現android phone"2. 跳出一個對話框,提示你安裝驅動程序問1. 既然還沒有"驅動程序",為何能知道是"android phone"答1. windows里已經有了USB的總線驅動程序,接入USB設備后,是"總線驅動程序"知道你是"android phone"提示你安裝的是"設備驅動程序"USB總線驅動程序負責:識別USB設備, 給USB設備找到對應的驅動程序問2. USB設備種類非常多,為什么一接入電腦,就能識別出來?答2. PC和USB設備都得遵守一些規范。比如:USB設備接入電腦后,PC機會發出"你是什么"?USB設備就必須回答"我是xxx", 并且回答的語言必須是中文USB總線驅動程序會發出某些命令想獲取設備信息(描述符),USB設備必須返回"描述符"給PC問3. PC機上接有非常多的USB設備,怎么分辨它們?USB接口只有4條線: 5V,GND,D-,D+答3. 每一個USB設備接入PC時,USB總線驅動程序都會給它分配一個編號接在USB總線上的每一個USB設備都有自己的編號(地址)PC機想訪問某個USB設備時,發出的命令都含有對應的編號(地址)問4. USB設備剛接入PC時,還沒有編號;那么PC怎么把"分配的編號"告訴它?答4. 新接入的USB設備的默認編號是0,在未分配新編號前,PC使用0編號和它通信。問5. 為什么一接入USB設備,PC機就能發現它?答5. PC的USB口內部,D-和D+接有15K的下拉電阻,未接USB設備時為低電平USB設備的USB口內部,D-(表示全速設備12Mbps)或D+(表示高速設備480Mbps)接有1.5K的上拉電阻;它一接入PC,就會把PC USB口的D-或D+拉高,從硬件的角度通知PC有新設備接入其他概念:1. USB是主從結構的所有的USB傳輸,都是從USB主機這方發起;USB設備沒有"主動"通知USB主機的能力。例子:USB鼠標滑動一下立刻產生數據,但是它沒有能力通知PC機來讀數據,只能被動地等得PC機來讀。2. USB的傳輸類型:a. 控制傳輸:可靠,時間有保證,比如:USB設備的識別過程b. 批量傳輸: 可靠, 時間沒有保證, 比如:U盤c. 中斷傳輸:可靠,實時,比如:USB鼠標d. 實時傳輸:不可靠,實時,比如:USB攝像頭3. USB傳輸的對象:端點(endpoint)我們說"讀U盤"、"寫U盤",可以細化為:把數據寫到U盤的端點1,從U盤的端點2里讀出數據除了端點0外,每一個端點只支持一個方向的數據傳輸端點0用于控制傳輸,既能輸出也能輸入4. 每一個端點都有傳輸類型,傳輸方向5. 術語里、程序里說的輸入(IN)、輸出(OUT) "都是" 基于USB主機的立場說的。比如鼠標的數據是從鼠標傳到PC機, 對應的端點稱為"輸入端點"6. USB總線驅動程序的作用a. 識別USB設備b. 查找并安裝對應的設備驅動程序c. 提供USB讀寫函數USB驅動程序框架:app: -------------------------------------------USB設備驅動程序 // 知道數據含義內核 --------------------------------------USB總線驅動程序 // 1. 識別, 2. 找到匹配的設備驅動, 3. 提供USB讀寫函數 (它不知道數據含義)-------------------------------------------USB主機控制器UHCI OHCI EHCI硬件 -----------USB設備UHCI: intel, 低速(1.5Mbps)/全速(12Mbps)OHCI: microsoft 低速/全速EHCI: 高速(480Mbps)USB總線驅動程序的作用1. 識別USB設備1.1 分配地址1.2 并告訴USB設備(set address)1.3 發出命令獲取描述符描述符的信息可以在include\linux\usb\Ch9.h看到2. 查找并安裝對應的設備驅動程序3. 提供USB讀寫函數把USB設備接到開發板上,看輸出信息:usb 1-1: new full speed USB device using s3c2410-ohci and address 2usb 1-1: configuration #1 chosen from 1 choicescsi0 : SCSI emulation for USB Mass Storage devicesscsi 0:0:0:0: Direct-Access HTC Android Phone 0100 PQ: 0 ANSI: 2sd 0:0:0:0: [sda] Attached SCSI removable disk拔掉usb 1-1: USB disconnect, address 2再接上:usb 1-1: new full speed USB device using s3c2410-ohci and address 3usb 1-1: configuration #1 chosen from 1 choicescsi1 : SCSI emulation for USB Mass Storage devicesscsi 1:0:0:0: Direct-Access HTC Android Phone 0100 PQ: 0 ANSI: 2sd 1:0:0:0: [sda] Attached SCSI removable disk在內核目錄下搜:grep "USB device using" * -nRdrivers/usb/core/hub.c:2186: "%s %s speed %sUSB device using %s and address %d\n",hub_irqkick_khubdhub_threadhub_eventshub_port_connect_changeudev = usb_alloc_dev(hdev, hdev->bus, port1);dev->dev.bus = &usb_bus_type;choose_address(udev); // 給新設備分配編號(地址)hub_port_init // usb 1-1: new full speed USB device using s3c2410-ohci and address 3hub_set_address // 把編號(地址)告訴USB設備usb_get_device_descriptor(udev, 8); // 獲取設備描述符retval = usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE);usb_new_device(udev) err = usb_get_configuration(udev); // 把所有的描述符都讀出來,并解析usb_parse_configurationdevice_add // 把device放入usb_bus_type的dev鏈表,// 從usb_bus_type的driver鏈表里取出usb_driver,// 把usb_interface和usb_driver的id_table比較// 如果能匹配,調用usb_driver的probe怎么寫USB設備驅動程序?1. 分配/設置usb_driver結構體.id_table.probe.disconnect2. 注冊測試1th/2th:1. make menuconfig去掉原來的USB鼠標驅動->Device Drivers->HID Devices<>USB Human Interface Device (full HID) support2. make uImage 并使用新的內核啟動3. insmod usbmouse_as_key.ko4. 在開發板上接入、拔出USB鼠標測試3th:1. insmod usbmouse_as_key.ko2. ls /dev/event*3. 接上USB鼠標4. ls /dev/event*5. 操作鼠標觀察數據測試4th:1. insmod usbmouse_as_key.ko2. ls /dev/event*3. 接上USB鼠標4. ls /dev/event*5. cat /dev/tty1 然后按鼠標鍵6. hexdump /dev/event0

關鍵詞: USB設備驅動程

最近更新

關于本站 管理團隊 版權申明 網站地圖 聯系合作 招聘信息

Copyright © 2005-2018 創投網 - www.zhigu.net.cn All rights reserved
聯系我們:33 92 950@qq.com
豫ICP備2020035879號-12

 

主站蜘蛛池模板: 日韩深夜视频 | 日韩va在线观看 | 成年av动漫网站久久 | 精品福利一区二区 | 国产美女视频一区二区三区 | 国产精品嫩草久久久久 | 制服丝袜国产av无码 | 天天躁日日躁狠狠躁欧美老牛 | 一区www | 日韩黄色免费 | 亚洲欧美成人aⅴ大片 | 欧美国产精品 | 国产欧美日韩va另类在线播放 | 高潮白浆潮喷正在播放 | 天堂中文资源库官网 | 18未满禁止免费69影院 | 老子午夜精品888无码不卡 | 在线精品动漫一区二区无码 | 久久久无码精品亚洲日韩按摩 | 国产亚洲日韩欧美另类丝瓜app | 55夜色66夜色国产精品视频 | 亚洲一码二码三码精华液 | 麻豆av一区二区三区 | 奇米影视色777四色在线首页 | 亚洲色欲色欲大片www无码 | 日本不卡视频在线播放 | 日韩激情网址 | 无码av不卡一区二区三区 | 欧美色插 | 色爽 av| 亚洲无av码在线中文字幕 | 国产一区二区成人 | 亚洲7天堂人人爽人人爽 | 日本高清视频色wwwwww色 | 久久亚洲国产五月综合网 | 老牛影视免费一区二区 | 色网站综合 | 欧美乱妇无乱码大黄a片 | 四虎海外 | 精品国产乱码久久久久久红粉 | 99精品国产成人一区二区 | 日本视频一区二区 | 久久久久成人免费看a含羞草久色 | 欧美激情视频网址 | 人与动人物xxxx毛片人与狍 | 肉体暴力强伦轩在线播放 | 美女啪啪无遮挡 | 无码国产玉足脚交极品网站 | 成视频年人黄网站视频福利 | 成年男女免费视频网站 | 无码熟熟妇丰满人妻porn | 精品无码成人片一区二区 | 日韩在线免费观看av | 人人爽天天碰天天躁夜夜躁 | 久久精品中文字幕无码绿巨人 | 精品视频免费 | 欧美自拍视频在线观看 | 亚洲国产综合精品一区 | 日韩精品在线免费观看 | 主站蜘蛛池模板: 蛛词}| 偷拍精偷拍精品欧洲亚洲网站 | 国产香蕉97碰碰视频va碰碰看 | 日韩欧美视频一区二区三区 | 好爽好大久久久级淫片毛片小说 | 久久精品第一国产久精国产宅男66 | 一本色道久久综合亚洲高 | 人妻熟妇乱又伦精品无码专区 | 成人精品影院 | 成人做爰www免费看视频网站 | 人妻av一区二区三区精品 | 深夜在线网址 | 国产成年人 | 国产亚洲a∨片在线观看 | 国产成人无码18禁午夜福利免费 | 国产成人啪精品视频免费软件 | 一级黄色日本片 | 91香蕉网| 人成午夜免费大片 | 青青青在线免费 | 亚洲成色网 | 四虎视频精品免费观看 | 亚洲一二三四在线 | 中日韩高清无专码区2021 | 国语自产视频在线 | 国产在线第二页 | www,日韩| 国产中文一区 | 国产精品嫩草影视 | 三上悠亚国产精品一区内容阅读 | 国产亚洲精品拍拍拍拍拍 | 欧美精欧美乱码一二三四区 | 男女插插插网站 | 日本中文字幕一区 | 免费床视频大全叫不停欧美 | 狠狠躁夜夜躁青青草原 | 99国内精品久久久久久久软件 | 肥白大屁股bbwbbwhd | 国产探花在线精品一区二区 | 最新国产麻豆aⅴ精品无码 精品视频一区二区三区四区戚薇 | 天天操天天舔天天干 | 中文字幕国产剧情 | 91丝袜在线观看 | 性猛交富婆 | 亚洲永久免费观看 | 中文字幕一级片 | 无码专区人妻系列日韩精品少妇 | 中文字幕在线不卡精品视频99 | 日产精品一区2区卡四卡二卡 | 性欧美俄罗斯极品 | 欧美一区二区三区另类 | 国产午夜精品久久久久久久 | 成视频年人黄网站免费视频 | 亚洲高清无在码在线电影不卡 | 国产精品亚洲视频在线观看 | 中文字幕资源网 | 婷婷丁香综合色 | 婷婷国产天堂久久综合五月 | 日韩丰满少妇无吗视频激情内射 | 手机在线亚洲国产精品 | 主站蜘蛛池模板: 蛛词}| 国产成人在线精品 | 天海翼一区二区三区高清在线 | 亚洲一卡2卡三卡四卡精品 日韩少妇中文字幕 | 激情综合婷婷丁香五月 | 国产乱子伦在线一区二区 | 亚洲欧美日本在线观看 | 欧美日韩高清在线观看 | 白丝爆浆18禁一区二区三区 | 日本加勒比一区 | 麻豆tv入口在线看 | 亚洲成av人在线观看成年美女 | 极品女勾搭老汉av | 男女性爽大片在线观看 | av无码av不卡一区二区 | 亚洲愉拍一区二区三区 | 91久久精品国产91性色tv | 色婷婷综合激情综在线播放 | 国产欧美一区二区三区四区五区 | 亚洲一区成人在线 | 在线看片免费人成视频影院看 | 91精品久久天干天天天按摩 | 免费观看av的网站 | 国产亚洲黑人性受xxxx精品 | 伊人无码精品久久一区二区 | 亚洲自拍激情 | 欧美极品少妇×xxxbbb | 亚洲综人网 | 日本亚洲精品色婷婷在线影院 | 四虎国产精品永久免费观看视频 | www.狠狠 | 一区二区三区日本久久九 | 亚洲 欧美日韩 国产 中文 | 97香蕉久久国产超碰青草软件 | 少妇裸体性猛交视频 | 日韩亚洲欧美一区二区 | 97精品久久天干天天天按摩 | 毛片无码高潮喷液视频 | 国产精品久久久久久久久久白浆 | 日韩裸体人体欣赏pics | 一边添奶一边添p好爽视频 亚洲粉嫩高潮的18p | 青青在线免费观看 | 精品欧美一区二区久久久伦 | 伊人久久大香线焦av色 | 99ri精品 | 国产中文字幕二区 | 国产亚州精品女人久久久久久 | 亚洲色精品三区二区一区 | 乱辈干柴烈火小说 | 国精产品一区一区三区有限公司杨 | 香港三日本三级少妇三级99 | 强开乳罩摸双乳吃奶网站 | 亚洲综合福利 | 国产精品普通话国语对白露脸 | 天天澡天天揉揉av无码 | 国产熟女亚洲精品麻豆 | 亚洲日本欧洲 | 国产成人综合自拍 | 嫩草影院网站 | 亚洲成色www久久网站 | 主站蜘蛛池模板: 蛛词}| 亚洲欧美色图小说 | 人人爽久久涩噜噜噜蜜桃 | 亚洲中文波霸中文字幕 | 狠狠躁天天躁日日躁欧美 | 久久人人爽人人爽爽久久 | 日本福利一区二区 | 无码中文字幕加勒比一本二本 | 国产精品国产三级国产av主播 | 国产精品久久99 | 免费av不卡 | 欧美一级理论片 | 特黄色毛片 | 久草最新| 国产成人精品一区二区三区无码 | 激情无码人妻又粗又大 | 麻豆一区二区三区四区 | 久久综合一色综合久久小蛇 | 亚洲区少妇熟女专区 | 齐天大性床战铁扇公主 | 精品亚洲视频在线观看 | 亚洲中文字幕无码一区二区三区 | 欧乱色国产精品兔费视频 | 国产精品午夜影院 | 国产精品久久久久久亚洲伦 | 波多野结衣不卡视频 | 国产91极品白丝呻吟娇喘 | 国产色在线 | 国产 国产精品精品自在线拍 | 精品国产天堂综合一区在线 | 中文精品久久久久鬼色 | 99热99热| 久久青青草原国产毛片 | 看全色黄大色黄大片 视频 欧美丰满大黑帍在线播放 在国产线视频a在线视频 | 亚洲天堂岛国片 | 天天av天天爽无码中文 | 久久精品第一国产久精国产宅男66 | 日韩两性视频 | 欧美一级片在线 | 亚洲 日韩 国产 中文有码 | 曰韩精品无码一区二区三区视频 | 国产美女午夜福利视频 | 一区二区在线不卡 | 久久久一区二区三区捆绑sm调教 | 五月婷婷一区二区三区 | 日韩黄站 | 十八禁无码精品a∨在线观看 | 亚洲一区有码 | 成年网站在线在免费线播放欧美 | 毛片站 | 国产精品毛片一区二区在线看舒淇 | 日本免费黄色一级片 | 99久久精品国产系列 | 欧美黑人做爰爽爽爽 | 亚洲 高清 成人 动漫 | 五月天婷婷色 | 国产精品久久精品三级 | 亚洲综合在线观看视频 | 久久久久久九九99精品 | 超碰网站在线观看 | 欧美 丝袜 自拍 制服 另类 | 主站蜘蛛池模板: 蛛词}| 亚洲精品久久久蜜夜影视 | 天堂av在线中文在线 | 欧美一级特黄aaaaaa | 亚洲欧美激情四射在线日 | 小雪尝禁果又粗又大的视频 | 国产三级精品三级在线观看 | 国产wwwwww| 爽爽影院在线免费观看 | 在线播放免费人成毛片乱码 | 波多野吉av无码av乱码在线 | 亚洲欧洲日本综合aⅴ在线 成人性视频免费看的鲁片 熟女人妻aⅴ一区二区三区电影 | 国产一级视频 | 亚洲一区二区三区影视 | 日韩欧美在线一区 | 亚洲美女激情视频 | 牛鞭伸入女人下身的真视频 | 日本亚洲精品色婷婷在线影院 | av免费网站| 中文字幕亚洲高清精品一区在线 | 国产激情大臿免费视频 | 96免费视频 | 国产精品毛片a∨一区二区三区 | 青青草无码精品伊人久久7 中文字幕 欧美激情 | 一本久道中文无码字幕av | 久久九九有精品国产23百花影院 | 成人黄色性视频 | 亚洲中文无码成人手机版 | 欧美一级特黄aaaaaa大片在线观看 | 欧美三级网站 | 精品国产乱码久久久久久免费 | 欧美三级大片 | 欧洲精品在线视频 | 青青草成人av | 中国69av| 中国china体内裑精亚洲日本 | 青青草视频播放 | 你懂的中文字幕 | 亚洲va欧美va人人爽午夜 | 日韩精品一区二区三区在线观看 | 97热视频 | 91超碰人人 | 日本一区二区在线高清观看 | 光棍天堂av | 二区免费视频 | av毛片在线 | 国产做爰xxxⅹ高潮69 | av在线加勒比 | 伊人影院在线免费观看 | 日本亚州视频在线八a | 欧美激情亚洲色图 | 91精品久久久久久久久中文字幕 | 91精品国产99久久久 | 亚洲卡一卡二卡三乱草莓 | 欧美午夜刺激影院 | 中文字幕人妻少妇引诱隔壁 | 久久国产传媒 | 久久久久婷 | 亚洲精品国偷拍自产在线观看 | 久久精品小视频 |