假设我知道这里没有的硬件的数字产品/供应商 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*
[...]
Run Code Online (Sandbox Code Playgroud)
从这里我可以看到哪些设备要声明btusb,它需要我事先知道模块名称。但是,在某些情况下,我不知道支持此类设备的模块名称。
网络硬件是那些似乎很难找到的类别之一。此外,lspci和lsusb名称有时不确定或完全错误。我目前正在遍历整个内核源代码树,这不是那么优雅。
用例:
如果您将问题重述为“如何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
Run Code Online (Sandbox Code Playgroud)
这个技巧可以用在其他地方,玩得开心!
| 归档时间: |
|
| 查看次数: |
2397 次 |
| 最近记录: |