免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6428 | 回复: 6
打印 上一主题 下一主题

区分两个usb设备的方法? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-17 13:52 |只看该作者 |倒序浏览
有一个问题想请教一个各高手,有两个usb设备,是使用了相同的usb控制芯片,只不过固件软件里面设置了不同的标志号,
所以可以通过windows的设备管理器查看到有相同的PID和VID,只是Rev后面的标志号不同,请问这样的两个设备在linux系统下如何区分?
已经有linux驱动文件了,单独的一个设备可以连接成功,同时有这两个设备就不知道怎么区分了。

论坛徽章:
2
卯兔
日期:2013-09-22 20:08:052015亚冠之广州富力
日期:2015-05-18 17:31:30
2 [报告]
发表于 2011-08-17 21:27 |只看该作者
fdisk -l 会显示不同的设备文件名,以及相关的信息.

论坛徽章:
0
3 [报告]
发表于 2011-08-18 09:52 |只看该作者
谢谢kinger1172 兄,不过我的这个usb设备不是u盘性质的,usb驱动加载后,会生成一个myusb0的设备文件,我的应用软件就通过读写这个myusb0这个文件来和usb设备进行通信.盼有对linux2.6下usb驱动框架熟悉的朋友指点一下,pid和vid相同,rev的值不一致,怎么去区分这两个设备,谢谢!

论坛徽章:
0
4 [报告]
发表于 2011-08-18 21:37 |只看该作者
lsusb命令,
cat  /proc/devices
ls /dev/bus/usb/<bus num>/<device num> 这些命令、信息应该有用处

论坛徽章:
0
5 [报告]
发表于 2011-09-16 16:29 |只看该作者
自己顶一下,欢迎各位指点.

论坛徽章:
0
6 [报告]
发表于 2011-09-16 18:20 |只看该作者
首先谢谢各位的回复,可惜目前这个问题还没有解决.
查找了一下资料,我想到有两个途径可以去尝试:
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) },
  { }
};

增加了版本号的高位字节和低位字节来判断.请问一下各位该方法是否可行,谢谢了!

论坛徽章:
0
7 [报告]
发表于 2011-10-14 15:07 |只看该作者
该问题以及解决,是根据我的第二种方法,采用
static struct usb_device_id usbreader_id_table [] = {
{ USB_DEVICE_VER(USB_READER_VENDOR, USB_PRODUCT_VENDOR, Version_High,Version_Low) },
  { }
};
这样的方法来区分两个usb设备。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP