答案1
lsusb
从内核提供的虚拟sys
文件系统(挂载在 中)读取数据/sys
;具体来说,从 USB 设备的相关目录位置读取数据。这些设备连接到不同的 PCI 总线,并且(大多数)由 检测udevd
。
例如,在我的计算机中,这里有一个连接到特定 PCI 总线的 USB 设备的定位示例:
/sys/devices/pci0000:00/0000:00:1d.0/usb4/4-1/
目录内容:
% print -l *
4-1:1.0
authorized
avoid_reset_quirk
bcdDevice
bConfigurationValue
bDeviceClass
bDeviceProtocol
bDeviceSubClass
bmAttributes
bMaxPacketSize0
bMaxPower
bNumConfigurations
bNumInterfaces
busnum
configuration
descriptors
dev
devnum
devpath
driver
ep_00
idProduct
idVendor
ltm_capable
maxchild
port
power
quirks
removable
remove
speed
subsystem
uevent
urbnum
version
lsusb
仅从该目录的相关文件读取。
答案2
lsusb
用途libudev获取您看到的设备列表。Libudev 则使用 udev 数据库和搜索/sys
文件系统的组合来查找硬件信息。
相关代码存储库:
https://github.com/gregkh/lsusb
http://cgit.freedesktop.org/systemd/systemd/tree/src/libudev
答案3
抱歉,我不会帮你!如果你想找点乐子:
ldd `which lsusb`
strace lsusb -t
ltrace -l "libudev*" lsusb -t
好吧,我建议至少使用man
或阅读每个命令的详细描述(如果不是整个手册) info
。
答案4
经过快速跟踪,我发现 lsusb 在 /var/lib/usbutils/usb.ids 中保存了与产品名称相关的 VID/PID 列表