如何识别应该仅通过供应商/产品ID声明设备的模块?


14

假设我知道这里没有硬件的数字产品/供应商ID,并且想知道内核中是否支持我,我可以这样做(USB蓝牙接收器示例):

modinfo btusb
filename:       /lib/modules/3.7.5-030705-generic/kernel/drivers/bluetooth/btusb.ko
[...]
alias:          usb:v0A5Cp*d*dc*dsc*dp*icFFisc01ip01in*
alias:          usb:v0489p*d*dc*dsc*dp*icFFisc01ip01in*
alias:          usb:v413Cp8197d*dc*dsc*dp*ic*isc*ip*in*
[...]

由此,我可以看到要主张哪些设备,btusb并且需要我事先知道模块名称。但是,在某些情况下,我对支持此类设备的模块名称一无所知。

网络硬件是其中很难找到的类别之一。另外,lspcilsusb名称有时是不确定的,也可能是错误的。我目前正在遍历整个内核源代码树,这不是那么好。

  • 有没有办法列出所有的modaliases 所有模块(包括内置到内核)一气呵成,所以我可以找到一个匹配?
  • 或者,是否可以查询内核以向我提供声称我实际上不拥有这种设备的内核模块?

用例:

  • 用户在这里提出问题,我可以通过实际验证“如果您升级到...就获得支持”或“尝试rmmod module1; modprobe module2,因为module2似乎也支持您的设备”来回答/重复。
  • 在购买具有ID的先验知识的硬件之前,请检查支持。除了使用ID搜索外,我还可以查找有关内核模块本身的错误报告。

真正没有简单的方法来获取此信息。并非所有USB设备都基于其ID。基于类的设备(存储,HID以及许多串行和网络设备)根据它们提供的接口进行标识。
2013年

也许usb-modeswitch可以帮上忙。如果没有的话:sudo apt-get install usb-modeswitch
Dimitris Theodoridis 2013年

输入lsusb,您会看到ID
Dimitris Theodoridis

从您的问题中,我只是看到您想查看ID并进行更改,我错了吗?
Dimitris Theodoridis

现在我真的不明白你。请说明您的问题,以使我无法更好地理解它,看看我是否真的可以为您提供帮助
Dimitris Theodoridis

Answers:


3

如果您将问题重述为“如何modinfo在所有(或某些)模块上运行并选择一些输出以供进一步使用?”,则可以使用此技巧(我留下了以前用来弄清楚如何获得此命令的命令)到最终结果):

ls /lib/modules
ls /lib/modules/$(uname -r)
ls /lib/modules/$(uname -r)/kernel
find  /lib/modules/$(uname -r)/kernel -type f -name '*.ko' -print
for i in $( !! ) ; do
for i in $( find  /lib/modules/$(uname -r)/kernel -type f -name '*.ko' -print ) ; do
   j=${i##.*/}
   j=${j%%.ko}
   echo $j
   modinfo $i | egrep 'filename:|alias:'
   echo ""
   done

这个技巧可以在其他地方使用,玩得开心!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.