USB设备驱动程序1

Posted -glb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了USB设备驱动程序1相关的知识,希望对你有一定的参考价值。

目的:USB鼠标用作按键,左键相当于字母L,右键相当于字母S,中键相当于Enter。
如何来实现?
用到输入子系统:
1)分配input_dev
2)设置
3)注册
4)硬件相关操作
对于USB鼠标来说,硬件操作应该怎么做呢?
使用USB总线驱动程序提供的读写函数来收发数据,主要针对于硬件相关的这一部分。
怎么写USB设备驱动程序?
1)分配/设置usb_drv结构体
.id_table
.probe
.disconnect
2)注册
首先来看一个例子:usbmouse.c

1.史上最简单的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 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 */
;


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. 分配/设置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");

2. 在probe函数里可以将bcdUSB、VID、PID打印出来,看看

static int usbmouse_as_key_probe(struct usb_interface *intf, const struct usb_device_id *id)

	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;

以上是关于USB设备驱动程序1的主要内容,如果未能解决你的问题,请参考以下文章

linux USB设备驱动的问题!

7 Linux usb驱动框架分析

linux如何发现和加载对应的USB设备驱动

怎样写linux下的USB设备驱动程序

Linux下 USB设备驱动分析(原创)

Linux:如何将 USB 驱动程序分配给设备 [关闭]