- 论坛徽章:
- 0
|
首先谢谢各位的回复,可惜目前这个问题还没有解决.
查找了一下资料,我想到有两个途径可以去尝试:
1 接两个usb设备时,驱动probe函数会被调用两次,
每调用一次时,根据id的数值去判断哪个版本号再生成固定的设备文件名.
原来的结构如下:
static struct usb_class_driver reader_class = {
.name = "usb_device/usbdev%d",
.fops = &reader_fops,
.minor_base = USB_READER_MINOR_BASE,
};
现在改动成两个设备所对应的class
static struct usb_class_driver reader_class1 = {
.name = "usb_device/usbdev1",
.fops = &reader_fops,
.minor_base = USB_READER_MINOR_BASE,
};
static struct usb_class_driver reader_class2 = {
.name = "usb_device/usbdev2",
.fops = &reader_fops,
.minor_base = USB_READER_MINOR_BASE,
};
调用usb_register_dev来注册设备时候根据固件版本的不同来调用所对应的注册class.
这种方法是一个驱动文件(ko文件)对应了两个usb设备。
2: 修改驱动代码中usb设备识别的代码,原来是根据
static struct usb_device_id usbreader_id_table [] = {
{ USB_DEVICE(USB_READER_VENDOR, USB_PRODUCT_VENDOR) },
{ }
};
这个PID和VID来判断,现在能否增加版本号来判断是否是想要的usb设备
计划修改成这样:
static struct usb_device_id usbreader_id_table [] = {
{ USB_DEVICE_VER(USB_READER_VENDOR, USB_PRODUCT_VENDOR, Version_High,Version_Low) },
{ }
};
增加了版本号的高位字节和低位字节来判断.请问一下各位该方法是否可行,谢谢了! |
|