usb驱动程序实现

本文展示了Linux内核中一个USB设备驱动的实现,主要关注`usbmouse_as_key`驱动的初始化、注册过程以及如何通过`probe`函数识别和打印USB设备的详细信息。当insmod加载模块后,dmesg输出显示驱动成功加载并识别到USB设备。
摘要由CSDN通过智能技术生成

1、代码如下



/*

 * 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>





/* USB Device ID */

#define USB_VENDOR_ID_AIC                0xA69C



#ifndef CONFIG_USB_BT

#define USB_PRODUCT_ID_AIC               0x8800

#else

#define USB_PRODUCT_ID_AIC               0x8801

#endif



static struct usb_device_id aicwf_usb_id_table[] = {

	//{USB_DEVICE(0x8801,0x8800)},

	//{ }	/* Terminating entry */



#ifndef CONFIG_USB_BT

    {USB_DEVICE(USB_VENDOR_ID_AIC, USB_PRODUCT_ID_AIC)},

#else

    {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDOR_ID_AIC, USB_PRODUCT_ID_AIC, 0xff, 0xff, 0xff)},

#endif

    {}

};





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;

}



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	= aicwf_usb_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、insmod 加载usbmouse_as_key.ko

dmesg 信息说明加载成功

[ 3928.470862] found usbmouse!
[ 3928.470888] bcdUSB = 200
[ 3928.470909] VID    = 0xa69c
[ 3928.470926] PID    = 0x8800

[ 3928.471201] kobject: 'drivers' (88a095c0): kobject_add_internal: parent: 'usbmouse_as_key', set: '<NULL>'
[ 3928.471372] kobject: 'usbmouse_as_key_' (887cfe80): kobject_uevent_env
[ 3928.471433] kobject: 'usbmouse_as_key_' (887cfe80): fill_kobj_path: path = '/bus/usb/drivers/usbmouse_as_key_'
[ 3928.474580] usbcore: registered new interface driver usbmouse_as_key_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值