我的内核版本: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盘,有问题留言。