lshw命令是否找到系统没有驱动程序的设备?

问题描述 投票:0回答:1

如果系统没有合适的驱动程序,硬件设备是否可见?如果它们可见,是否有用于设备识别甚至属性列表的标准协议。因此,例如,在不知道设备D存在的情况下,我可以看到设备并知道它是D设备。它甚至可以告诉我它需要什么样的驱动程序。

硬件设备必须提供一些低级信息,否则即插即用将如何工作?设备必须提供一些身份。即使操作系统包括注册表,也可以从中检索更多信息的一些库存,设备必须提供一些查找键。所以...

hardware drivers
1个回答
0
投票

当然,有一种识别设备的方法。也就是说,这取决于总线类型。例如,PCI设备提供PCI ID。说,我的英特尔NIC是8086:1503。冒号前面的数字代表设备制造商,最后一个数字表示确切的设备型号。很少,后者可能不会反映硬件,而是包含一些虚拟值(可能是一位数字改变)以指示一些衍生物(例如,设备的PCI虚拟功能)。

当然,即插即用广泛使用它。比如说,PCI设备驱动程序通常会填充特殊结构,让内核知道应该为某些类型的泛型操作调用哪些处理程序。这样的结构将在内核中注册,以及该特定驱动程序要服务的PCI ID列表。因此,内核会提示要使用某些PCI ID探测哪个驱动程序。

对于我的NIC,ID(0x1503)中的最后一个数字在E1000_DEV_ID_PCH2_LV_V的源代码中定义为e1000e,并在PCI ID表(drivers/net/ethernet/intel/e1000e/netdev.c)中引用:

static const struct pci_device_id e1000_pci_tbl[] = {
        ...
        { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH2_LV_V), board_pch2lan },
        ...
};
MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);

我相信,谈论其他类型的总线可能不值得。可以这么说,这些可能在某种程度上依赖于或多或少类似的约定。

使用lshw可能并不总是提供详尽的信息或触摸特定方面。搜索更好的应用程序可能也不会结果。相反,更好的方法是检查内核维护的sysfs

说,我知道(例如,来自lspci -vvv)我的英特尔NIC PCI插槽号是0000:00:19.0。了解到这一点后,我可以继续以下步骤:

cat /sys/bus/pci/devices/0000:00:19.0/uevent

这将显示许多有用的提示,包括PCI ID和当前使用的驱动程序:

DRIVER=e1000e
PCI_CLASS=20000
PCI_ID=8086:1503
PCI_SUBSYS_ID=1043:849C
PCI_SLOT_NAME=0000:00:19.0
...

如果我然后将网卡重新绑定到vfio-pci或其他一些狡猾的驱动程序,此输出将更改一点:

DRIVER=vfio-pci

总而言之,无论是否有驱动程序,操作系统通常都可以看到硬件。

© www.soinside.com 2019 - 2024. All rights reserved.