[TL]请问在linux下如何知道一个usb设备产生了哪些设备文件

108 views
Skip to first unread message

Peter Xu

unread,
Jul 27, 2010, 7:53:07 AM7/27/10
to pongba
大家好:

最近正在在linux平台下写一个C的程序。这里,我希望程序能够及时的知道有usb
设备插入,并保存这个设备产生的设备文件。但是,不知道应该如何实现?

具体一点来说,如果大家使用过GSM等无线模块的话,会知道:当一个模块插入usb
插口后,系统会自动识别并加载usbserial驱动,并在/dev /目录下生成ttyUSB0的
设备文件。如果插入多个(也有一些模块,如LC6311,会一下产生6个设备文
件),则继续生成 ttyUSB1,ttyUSB2...等设备文件。我的程序里要实现的就是,
当设备插入usb插口后,能够及时的检测到设备信息(如 VendorID,ProductID等信
息),并知道对应的设备产生了哪些设备文件(如果这是第一个虚拟串口设备,这
里往往便是/dev /ttyUSB0)。

我大致了解了一下libusb库,应该是可以通过轮询的方法检测到设备和相应ID信
息,但是,似乎没有办法知道这个usb设备产生了哪些设备文件。请问大家有好的
办法么?

xzpeter


Rockins Chen

unread,
Jul 27, 2010, 10:31:02 AM7/27/10
to pon...@googlegroups.com
hotplug行不行?
--
BRs,
Rockins Chen
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TP-LINK, Shenzhen, Guangdong, China
http://rockins.cn/
ybc...@gmail.com

Simon Liu

unread,
Jul 27, 2010, 10:48:16 AM7/27/10
to pon...@googlegroups.com
usb插入之后,内核会产生一个netlink事件,你在用户态直接用select或者epoll捕捉这个netlink句柄的事件就行了。

PS:我记得事件类型貌似是NETLINK_KOBJECT_UEVENT,你可以google下。

张增波

unread,
Jul 27, 2010, 10:50:30 AM7/27/10
to pon...@googlegroups.com
配置udev的rules.

darkraven

unread,
Jul 27, 2010, 10:52:10 AM7/27/10
to pon...@googlegroups.com
udisks (aka devicekit-disks)

XiongJia Le

unread,
Jul 27, 2010, 11:07:09 AM7/27/10
to pon...@googlegroups.com
Hotplug 应该可以,至少我们以前程序监视 USB Disk 插拔事件时可以...

Hotplug 说明:
http://lsec.cc.ac.cn/~tengfei/doc/ldd3/ch14s07.html

2010/7/27 Rockins Chen <ybc...@gmail.com>

Peter Xu

unread,
Jul 30, 2010, 12:21:54 AM7/30/10
to pon...@googlegroups.com, 张增波
谢谢大家的回复。

谢谢张增波。udev应该是我想要的。通过配置udev的rules,现在成功在/dev/目录下对应特定模块建立不同的设备文件链接,呵呵。具体方法我 参照的这两个文章:
http://www.chinarhcx.com/node/315
http://www.reactivated.net/writing_udev_rules.html

关于HotPlug我也查看了一下,现在的内核似乎已经不使用了,而是用udev取代:
https://lists.ubuntu.com/archives/ubuntu-devel-announce/2005-December/000028.html

xzpeter
Reply all
Reply to author
Forward
0 new messages