USB驱动程序之USB设备驱动程序

本文介绍了如何注册USB设备驱动,使用`usb_register_dev`将接口与类关联,并提供了一个测试流程,包括禁用原有USB鼠标驱动,制作新内核,插入模块,查看`/dev/event*`变化,以及通过`cat`和`hexdump`命令交互USB鼠标。
摘要由CSDN通过智能技术生成
 这了实现的目标---usb鼠标用作按键,左、右、中键分别作为字符"l"、"s"、回车的输入。
问1:怎么写USB设备驱动程序?
答:1. 分配/设置usb_driver结构体
        .id_table
        .probe
        .disconnect
2. 注册

下面直接进入代码编写:
/* 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 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)},
	{ }	/* Terminating entry */
};
写 USB 设备驱动时,主要完成的工作是 probe()和 disconnect()函数,即探测和断开函数。
id_table 成员---- 描述这个 USB 驱动支持的 USB 设备列表,它是一个指针,指向一个 usb_device_id 数组,usb_device_id 结构体用于包含 USB 设备的厂商 ID,产品 ID,产品版本,设备类,接口类等信息。
可用宏来生成 usb_device_id 对象:USB_DEVICE(vendor,product);
该宏根据厂商 ID,产品 ID 生成一个 usb_device_id 的对象,在数组中加入该元素将意味着该驱动可支持匹配厂商 ID,产品 ID 的设备。
USB_DEVICE_INFO(class,subclass,protocal) -----创建一个设备指定类型的 usb_device_id 对象。
USB_INTERFACE_INFO(class,subclass,protocal)----创建一个接口指定类型的 usb_device_id 对象。
MODULE_DEVICE_TABLE (usb, skel_table);第一个参数是设备的类型,如果是 USB 设备,那自然是 usb(如果是 PCI 设备,那将是 pci);后面一个参数是设备表,这个设备表的最后一个元素是 空的,用于标识结束。当内核告知热插拔系统一个新的 PCI 设备被发现时,热
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值