![如何找出 Linux 正在使用什么来控制我的硬件](https://linux22.com/image/988195/%E5%A6%82%E4%BD%95%E6%89%BE%E5%87%BA%20Linux%20%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%E4%BB%80%E4%B9%88%E6%9D%A5%E6%8E%A7%E5%88%B6%E6%88%91%E7%9A%84%E7%A1%AC%E4%BB%B6.png)
我想知道 Linux 使用什么来控制我的硬件。我猜是模块和驱动程序,也许它们是相同的。
我得到了这个答案:我如何找出硬件正在使用哪个驱动程序?
有一种方法可以列出驱动程序,但我还想为每个列表项添加一个标识符。
如果我运行这个命令,将会发生以下情况:
sudo lshw | grep -Eo 'driver=[^ ]+' | sort -u | cut -d\= -f2
agpgart-intel
ahci
ath9k
atl1c
ehci-pci
hub
i915
intel
lpc_ich
mei_me
pcieport
snd_hda_intel
tun
usb-storage
uvcvideo
答案1
如果您只关心过滤输出以lshw
显示设备及其对应的驱动程序,则可以使用下面的lshw
和awk
组合:
sudo lshw | awk '/product:/{ if(length(PROD) > 0){PROD=""}; for(i=1;i<=NF;i++) PROD=PROD" "$i } /driver=/{ for(j=1;j<=NF;j++){ if($j~/driver=/) DRIVER=$j };print "---",PROD,DRIVER; PROD=""}'
这里的基本思想是,我们找到包含“product: . . . ”的行并将其存储到 PROD 中。由于某些设备没有列出驱动程序,我们可能要反复将一行又一行地附加到 PROD 变量中,因此在开始时我们检查 PROD 字符串的长度。正在进行的另一个匹配是针对包含该driver=
部件的行。一旦我们有了它,我们就会打印产品和驱动程序信息。
下面是组合成脚本的命令和示例输出:
$ cat ./dev-drivers.sh
#!/bin/bash
sudo lshw | awk '/product:/{ if(length(PROD) > 0){PROD=""};\
for(i=1;i<=NF;i++) PROD=PROD" "$i }\
/driver=/{ for(j=1;j<=NF;j++){ if($j~/driver=/) DRIVER=$j };\
print "---",PROD,DRIVER; PROD=""}'
$ ./dev-drivers.sh
[sudo] password for xieerqi:
--- product: ValleyView SSA-CUnit driver=iosf_mbi_pci
--- product: ValleyView Gen7 driver=i915
--- product: ValleyView 6-Port SATA AHCI Controller driver=ahci
--- product: ValleyView USB xHCI Host Controller driver=xhci_hcd
--- product: ValleyView SEC driver=mei_txe
--- product: ValleyView High Definition Audio Controller driver=snd_hda_intel
--- product: ValleyView PCI Express Root Port driver=pcieport
--- product: RTL8101E/RTL8102E PCI Express Fast Ethernet controller driver=r8169
--- product: ValleyView PCI Express Root Port driver=pcieport
--- product: QCA9565 / AR9565 Wireless Network Adapter driver=ath9k
--- product: ValleyView PCI Express Root Port driver=pcieport
--- product: RTS5229 PCI Express Card Reader driver=rtsx_pci
--- product: ValleyView Power Control Unit driver=lpc_ich