成人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 創投網 - m.zhigu.net.cn All rights reserved
聯系我們:33 92 950@qq.com
豫ICP備2020035879號-12

 

主站蜘蛛池模板: 亚洲国产精品va在线看黑人 | 狠狠色丁香久久综合频道日韩 | 欧美在线亚洲 | 久久99精品久久久久久水蜜桃 | 黄色毛片毛茸茸 | 一区二区三区国产在线 | 欧美久久一区二区三区 | 大片视频免费观看视频 | 精品国产乱码久久久久久移动网络 | 强奷乱码欧妇女中文字幕熟女 | 人人爽人人添 | 在线看免费无码av天堂的 | 国产精品无码翘臀在线观看 | 狠狠躁夜夜躁人蜜臀av小说 | 狠狠色丁香婷婷久久综合考虑 | 亚洲网视频| 久综合在线 | 国产成人精品综合久久久久 | 国模小黎自慰gogo人体 | 蜜臀av无码国产精品色午夜麻豆 | 亚洲成a人无码av波多野 | 小泽玛利亚一区二区在线 | 久久综合久久综合九色 | 99久久精品费精品国产一区二区 | 午夜在线播放视频 | 亚洲色图吧 | 精精国产xxxx视频在线播放 | 成人性午夜视频在线观看 | 北野未奈禁欲在线观看 | 漂亮人妻洗澡被公强 日日躁 | 又色又爽又黄的吃奶视频免费观看 | 久久精品国产精品亚洲精品 | 日韩成人综合 | 欧洲亚洲色一区二区色99 | 日本xxxx在线观看 | 天天噜日日噜狠狠噜免费 | 免费观看又色又爽又湿的视频软件 | blacked精品一区国产在线观看 | 欧美1页 | 精品无码国产日韩制服丝袜 | 一本一本久久a久久精品综合麻豆 | 2021精品亚洲中文字幕 | 18禁亚洲深夜福利人口 | 色综亚洲国产vv在线观看 | 狠狠亚洲色一日本高清色 | 中文不卡av | 成人97视频一区二区 | 欧美色视频在线 | 久久精品国产最新地址 | 日韩精品久久久久久久玫瑰园 | 国产超碰人人做人人爱 | 偷自拍亚洲视频在线观看 | 狠狠色综合色综合网站久久 | q2002日韩午夜伦高清 | 91视频免费观看网站 | 就去色综合 | 国产aaaaav久久久一区二区 | 国产特黄大片aaaa毛片 | 动漫精品中文无码通动漫 | 主站蜘蛛池模板: 蛛词}| 亚洲精品欧美日韩一区 | 少妇太爽了太深了太硬了 | 国产九九99久久99大香伊 | 熟女少妇内射日韩亚洲 | 日本中文字幕在线 | 聊斋艳谭之乱淫鸳鸯 | 中文字幕v亚洲日本 | 亚洲情a成黄在线观看动漫尤物 | 好男人社区www在线官网 | 亚洲成aⅴ人片在线观看 | 免费无码又爽又刺激网站 | 高清精品国内视频 | 精品国产乱码久久久久久夜深人妻 | 国产午夜精品一区二区理论影院 | 色五月丁香六月欧美综合 | 免费的黄色av | 99热在线观看免费 | 日日噜噜噜夜夜爽爽狠狠视频, | 国产精品久久久久久久久电影网 | 性欧美寡妇黑人异族 | 中文字幕在线播放一区二区 | 亚洲综合精品 | 亚洲国产人成在线观看69网站 | 毛片视频播放 | 日韩在线观看不卡 | 午夜片无码区在线观看爱情网 | 国产精品久久久久久久久费观看 | 12萝自慰喷水亚洲网站 | 国产精品r级最新在线观看 亚洲人成人无码www影院 | 国产肥熟女视频一区二区三区 | 久久国产色av免费观看 | 欧美一区二区三区四区五区 | 韩日欧美| 欧美视频一二三 | 蜜臀久久精品99国产精品日本 | 中文字幕巨大的乳专区 | 国产色拍拍拍拍在线精品 | 成人三级在线视频 | 日本少妇3p | 少妇又紧又大又色又爽视频 | 婷婷综合在线视频 | 后入到高潮免费观看 | 国产日韩在线视看高清视频手机 | 免费精品一区 | 91神马午夜| 综合综合综合网 | 午夜福利啪啪无遮挡免费 | 国产精品美女久久久久网站浪潮 | 欧美一区二区在线视频观看 | 一本一本久久a久久精品综合妖精 | 亚洲日本乱码一区二区产线一∨ | 免费超碰在线 | 两根大肉大捧一进一出好爽视频 | 亚洲精品毛片一区二区 | 青青青在线视频免费观看 | 国产精品久久777777换脸 | 男女野外做爰全过程69影院 | 日日噜噜夜夜狠狠久久香91 | 无码少妇一区二区性色av | 主站蜘蛛池模板: 蛛词}| 国产精品嫩 | 欧美熟妇的荡欲在线观看 | 羞羞影院成人午夜爽爽在线 | 国产精品久免费的黄牛仔短裤 | 国产毛片3 | 中国少妇裸体淫交 | 亚洲小说区图片区色综合网 | 亚洲a片v一区二区三区有声 | 色777狠狠狠综合伊人 | 一本一道色欲综合网中文字幕 | 日韩在线视频一区二区三区 | 国产一区精选播放022 | 国产欧美不卡 | 成人国产精品久久久春色 | 亚洲国产成人影院播放 | 亚洲老妈激情一区二区三区 | 男女精品国产乱淫高潮 | 丰满护士巨好爽好大乳 | 亚洲人xxx日本人18 | 夜夜嗨av一区二区三区 | 精品国产一区二区三区久久久 | 国产系列丝袜熟女精品网站 | 韩国19禁无遮挡啪啪无码网站 | 日本卡2卡3卡4卡5卡精品视频 | 丁香五月缴情综合网 | 麻豆一区二区三区在线观看 | 国产一级一片免费播放放a 国产偷摄中国推油按摩富婆 | 亚州男人的天堂 | 亚洲欧洲日韩极速播放 | 日本大乳奶做爰洗澡三级 | 欧乱色国产精品兔费视频 | 黄色一级在线视频 | 人人超碰人人 | 国产成人亚洲在线观看 | 亚洲卡一卡二乱码新区仙踪 | 高大丰满熟妇丰满的大白屁股 | 特级做a爰片毛片免费看无码 | 日韩黄色小说 | av黄色免费观看 | 国产激情久久久久影院 | 国产午夜亚洲精品一区 | 黄色免费视屏 | 国产精品黑色丝袜久久 | 日本做爰xxxⅹ高潮欧美 | 久草2| 久草新视频| 国产乱码字幕精品高清av | 国产亚洲精品久久久ai换 | av无码精品一区二区三区四区 | 久久成人黄色 | 在线观看91av | jzzijzzij亚洲成熟少妇18 久久久久日本精品毛片蜜桃成熟时 | 中文字幕不卡视频 | 久久久精品日韩 | 最近免费韩国日本hd中文字幕 | 无码国产69精品久久久久孕妇 | 韩国国内大量揄拍精品视频 | 青青草原综合久久大伊人精品 | 97蜜桃网 | 主站蜘蛛池模板: 蛛词}| 国产精品久久久久久久久av大片 | 偷窥妇女撒尿久久 | 久久久久久久久久久久福利 | 99久久精品国产同性同志 | 亚洲色图狠狠爱 | 男人天堂黄色 | 综合在线视频精品专区 | 最近中文字幕在线中文高清版 | 最新欧美激情-推荐欧美激情 - 右手影院 | 天堂8中文在线最新版在线 男人天堂黄色 | 国产人妖在线播放 | 久久国产精品精品国产色婷婷 | www亚洲精品| 久久久久99精品成人片三人毛片 | 亚洲色最新高清av网站 | 中文字幕成熟丰满人妻 | 国产夫妻露脸 | 国产欧美日韩久久久久 | 人人妻人人藻人人爽欧美一区 | 中文字幕在线精品乱码 | xxxx18国产 | 松岛枫av在线一区二区 | 女m羞辱调教视频网站 | 国产精品成人免费精品自在线观看 | 在线观看免费人成视频网 | 日韩免费视频观看 | 国产成人精品亚洲午夜 | 琪琪777午夜理论片在线观看播放 | 久久在线免费 | 天天舔天天插 | 午夜理论无码片在线观看免费 | 高清国产一区二区 | 亚洲另类调教 | 日韩v在线观看 | 在线观看免费人成视频色 | 欧美精品videossex另类日本 | a毛片毛片av永久免费 | 国产成人啪免费观看软件 | 国产精品奇米一区二区三区小说 | 精品国偷自产在线视频九色 | 超碰97人人做人人爱可以下载 | 亚洲精品一区二区三区四区久久 | 日韩精品中字 | aaaa级国产大片直接观看调教 | 国产白袜脚足j棉袜在线观看 | 深夜爽爽无遮无挡视频 | 午夜无人区免费网站 | 欧美日韩免费 | 性xxxx18免费观看视频 | 亚洲手机视频 | 免费又大粗又爽又黄少妇毛片 | 男女无套免费视频网站动漫 | 亚洲高清在线 | 国产精品一品二区三区四区18 | 亚洲国产精品无码中文字满 | 欧美变态另类牲交zozo | 一本大道色婷婷在线 | 夜夜欢好(高 h) | 久久av无码精品人妻系列果冻 | 主站蜘蛛池模板: 蛛词}| av免费线上看| 在线观看福利网站 | 2018亚洲а∨天堂 | 天天综合在线观看 | 欧美日韩的一区二区 | 麻豆人妻少妇精品无码专区 | 又爽又黄又无遮挡的激情视频 | av在线中文字幕不卡电影网 | 无遮挡做爰激吻国产999 | 97久久日一线二线三线 | 免费观看欧美猛交视频黑人 | 97超级碰碰人国产在线观看 | 久久疯狂做爰xxxⅹ高潮直播 | 福利国产视频 | 国产精品免费一区二区三区都可以 | 亚洲春色av无码专区在线播放 | 东京热人妻系列无码专区 | 国语精品对白露脸少妇网站 | 男女做视频md806xyz | 亚洲欧美闷骚影院 | 男女做爰猛烈叫床视频免费 | 99久久婷婷国产一区二区 | 欧美黄色片在线观看 | 日韩乱码人妻无码中文视频 | 热热av | 国产精品久久久久久久久动漫 | 国产 亚洲 制服 无码 中文 | 国产精品久免费的黄牛仔短裤 | 夜夜夜夜操 | 成人啪啪18免费网站看 | 久啪视频 | 国产口语对白老妇 | 日韩精品视频在线观看一区二区 | 国产又粗又猛又爽又黄的视频一 | 夜夜嗨av一区二区三区免费区 | 久久综合入口 | 久久视频免费在线观看 | 99亚洲精品久久久99 | 国产精品自在线拍国产手青青机版 | 久久精品国产精品亚洲38 | 神马久久春色 | 国产精品导航一区二区 | 欧美午夜一区二区三区 | 色婷婷一区二区三区av免费看 | 好紧好爽免费午夜视频 | 99久久国产露脸精品竹菊传媒 | wwwxxxx在线观看 | 欧美色欧美亚洲高清在线观看 | 国产精品视频一区二区噜噜 | 亚洲自偷自拍另类12p | 国产视频一区三区 | 成人三级视频在线观看一区二区 | 尤物视频在线 | 黑人上司粗大拔不出来电影 | 亚洲精品爆乳一区二区h | 久久精品国产sm调教网站演员 | 国产曰批视频免费观看完 | 91caoporn超碰| 女人下边被添全过视频 |