USB设备驱动及测试1
来源:互联网 发布:excel怎么做数据统计图 编辑:程序博客网 时间:2024/04/29 15:26
看这本《LINUX内核源代码情景分析》,上面讲USB很全
怎么写USB设备驱动程序?
1. 分配/设置usb_driver结构体
.id_table
.probe
.disconnect
2. 注册
测试1th/2th:
1. make menuconfig去掉原来的USB鼠标驱动
-> Device Drivers
-> HID Devices
<> USB Human Interface Device (full HID) support
- make uImage 并使用新的内核启动
cp arch/arm/boot/uImage /work/nfs_root/uImage_nohid
make 生成.ko文件
cp usbmouse_as_key.ko /work/nfs_root/first_fs
进入uboot
nfs 30000000 192.168.31.105:/work/nfs_root/uImage_nohid
bootm 30000000
挂接网络根文件系统
mount -t nfs -o nolock,vers=2 192.168.31.105:/work/nfs_root/first_fs /mnt
3. insmod usbmouse_as_key.ko
4. 在开发板上接入、拔出USB鼠标
代码Usbmouse_as_key.c 1th
/* * 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 usb_device_id usbmouse_as_key_id_table [] = { //设置接口类是HID,子类BOOT,协议MOUSE。 { USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT, USB_INTERFACE_PROTOCOL_MOUSE) }, //{USB_DEVICE(0x1234,0x5678)}, //usb的厂家id、设备id.完全可以指定USB的设备驱动程序支持某个产家生产的某款产品 { } /* Terminating entry */};static int usbmouse_as_key_probe(struct usb_interface *intf, const struct usb_device_id *id){ printk("found usbmouse!\n"); //接上鼠标打印这句话 return 0;}static void usbmouse_as_key_disconnect(struct usb_interface *intf){ printk("disconnect usbmouse!\n"); //拔出鼠标打印这句话}/*1,2 两步完成usb总线设备驱动的机制*//* 1. 分配/设置usb_driver */static 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,};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");
我们想把厂家的id ,设备id打印出来,能不能做到?
答: 在prob函数里面想把厂家id,设备id打印出来,这些都在设备描述符里面,当我们接入USB设备后, USB总线驱动程序已经把这些设备符通通读出来,我们只要用就可以了。
通过接口得usb_device结构体,usb_device结构体里面有设备描述符descriptor,descriptor里面有厂家id,USB版本号等
将prob函数改为
static int usbmouse_as_key_probe(struct usb_interface *intf, const struct usb_device_id *id){ /* 在prob函数里面想把厂家id,设备id打印出来,这些都在设备描述符里面,当我们接入USB设备后, USB总线驱动程序已经把这些设备符通通读出来,我们只要用就可以了*/ /*通过接口得usb_device结构体,usb_device结构体里面有设备描述符descriptor,descriptor里面有厂家id,USB版本号等*/ struct usb_device *dev = interface_to_usbdev(intf); printk("found usbmouse!\n"); printk("bcdUSB = %x\n", dev->descriptor.bcdUSB); printk("VID = 0x%x\n", dev->descriptor.idVendor); printk("PID = 0x%x\n", dev->descriptor.idProduct); return 0;}
阅读全文
0 0
- USB设备驱动及测试1
- Linux usb 设备驱动 (1)
- Linux usb 设备驱动 (1)
- USB设备硬件、驱动、及USB口的读写
- USB设备硬件、驱动、及USB口的读写
- usb鼠标驱动注解及测试
- usb鼠标驱动注解及测试
- usb鼠标驱动注解及测试
- usb 鼠标驱动注解及测试
- Linux USB鼠标驱动注解及测试
- usb鼠标驱动注解及测试
- usb鼠标驱动注解及测试
- usb鼠标驱动注解及测试
- usb鼠标驱动注解及测试
- usb鼠标驱动注解及测试收藏
- usb鼠标驱动注解及测试
- usb鼠标驱动注解及测试
- Usb设备驱动1:root hub 设备驱动安装
- opencv抠图
- Powershell批量删除Git中无人维护的Branch
- 第十四周(subsets,NP问题)
- centos7防火墙开放端口等命令
- 打包提示 xxx is not translated in "zh" (Chinese)
- USB设备驱动及测试1
- 在CentOS7下从0开始搭建docker并发布tomcat项目
- Objective-C语法之代码块(block)的使用
- android 资源 记录
- translate.proposedLanguage()||translate.use(); 获取当前语言
- 安卓照片压缩问题
- 深入浅出RxJava(一:基础篇)
- java基础--while实现五位数中的回文数
- springmvc的model传值到jsp,el的表达式引用不显示结果