linux usb驱动,一个简单的usb驱动,simp_usb

2019-07-14 01:22发布

我的内核版本:3.16 myusb.c:

#include
#include
#include
#include
//把以下ID替换成你的USBID,sudo cat /proc/bus/usb/devices可以看到这两个ID
#define USB_STORAGE_VENDOR_ID 0X8644   
#define USB_STORAGE_PRODUCT_ID 0X800a

//驱动支持的设备列表
static struct usb_device_id myusb_table[] = {
    {USB_DEVICE(USB_STORAGE_VENDOR_ID,USB_STORAGE_PRODUCT_ID)},
    {}
};

//告知用户空间
MODULE_DEVICE_TABLE(usb,myusb_table);

static int myusb_probe(struct usb_interface *interface,const struct usb_device_id *id)
{
    printk("[myusb_probe] ");
    return 0;
}

static void myusb_disconnect(struct usb_interface *interface)
{
    printk("[myusb_disconnect] ");
}
static struct usb_driver myusb_driver = {
    .name = "myusb_driver",
    .probe = myusb_probe,
    .disconnect = myusb_disconnect,
    .id_table = myusb_table,
};

static int __init myusb_init(void)
{
    printk("[myusb_init] ");
    return usb_register(&myusb_driver);
}

static void __exit myusb_exit(void)
{
    printk("[myusb_exit] ");
    usb_deregister(&myusb_driver);
}

module_init(myusb_init);
module_exit(myusb_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("ZHYANG");
Makefile:  //根据你的内核版本修改下面的KDIR
obj-m = myusb.o

KDIR := /lib/modules/3.16.0-33-generic/build/   

all:
    $(MAKE) -C $(KDIR) SUBDIRS=$(shell pwd) modules

clean:
    rm -rf *.o *.ko *.mod.* *.symvers *.order
测试步骤: 参考这篇:http://wenku.baidu.com/link?url=brtd9myO4XIaEjRPaRB0yWgV2_TfXmNxS6KKjB_avq7d0hPs3SknJdrs-JLtWe--oIkEYYGT49wtYRCXfDm_EVZQPisA3mvjJJmESXmNgL7 从实验过程开始,已建立了内核源码树忽略前3步。 希望对你们有帮助,这只是一个很简单的usb驱动,并不能做到真正的去读写U盘,有问题留言。