如何检查Linux内核是否支持我的系统设备
时间:2020-03-05 15:26:08 来源:igfitidea点击:
内核如何支持设备及其驱动程序。
查找网络设备的名称
以下是与网络设备关联的名称。
注意:LO是Loopback设备名称,它不添加到任何网络设备。
bobbin@theitroad:~$ls /sys/class/net/ eth0 eth1 lo bobbin@theitroad:~$
查找添加到上面名称的设备
我们可以看到eth0与IP地址设置并使用Rx/Tx值活动。
它使用具有1500 MTU尺寸的标准帧。
bobbin@theitroad:~$ifconfig -a eth0 Link encap:Ethernet HWaddr 08:00:27:1d:20:09 inet addr:10.0.3.17 Bcast:10.0.3.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe1d:2009/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:124 errors:0 dropped:0 overruns:0 frame:0 TX packets:177 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:33456 (33.4 KB) TX bytes:19854 (19.8 KB) eth1 Link encap:Ethernet HWaddr 08:00:27:e7:1d:7f inet6 addr: fe80::a00:27ff:fee7:1d7f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:100 errors:0 dropped:0 overruns:0 frame:0 TX packets:100 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:7864 (7.8 KB) TX bytes:7864 (7.8 KB) bobbin@theitroad:~$
找到哪些模块支持eth0
哪个司机正在控制eth0设备?
以下输出显示E1000驱动程序正在控制ETH0网卡。
bobbin@theitroad:/$ls /sys/class/net/eth0/device/driver/module/drivers/ pci:e1000 bobbin@theitroad:/$
查找添加到服务器的以太网PCI设备
我们可以从以下输出中看到,服务器上有两个英特尔网卡,具有修订版02. LSPCI命令输出的前几位显示此设备的PCI总线ID,即00:03.0和00:08.0
bobbin@theitroad:~$lspci | grep -i Ethernet 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02) 00:08.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02) bobbin@theitroad:~$
进入/SYS/BUS/PCI /设备/列出所有不同的PCI设备,
bobbin@theitroad:~$cd /sys/bus/pci/devices/ bobbin@theitroad:/sys/bus/pci/devices$ls 0000:00:00.0 0000:00:02.0 0000:00:05.0 0000:00:08.0 0000:00:01.0 0000:00:03.0 0000:00:06.0 0000:00:0d.0 0000:00:01.1 0000:00:04.0 0000:00:07.0 bobbin@theitroad:/sys/bus/pci/devices$
具有前导0000的内核编号PCI设备:在LSPCI程序的输出中不会出现。
因此,将前导0000添加到使用LSPCI并进入该目录中找到的数字。
bobbin@theitroad:/sys/bus/pci/devices$cd 0000:00:03.0 bobbin@theitroad:/sys/bus/pci/devices/0000:00:03.0$ls broken_parity_status driver net resource2 class enable power subsystem config irq remove subsystem_device consistent_dma_mask_bits local_cpulist rescan subsystem_vendor d3cold_allowed local_cpus reset uevent device modalias resource vendor dma_mask_bits msi_bus resource0 bobbin@theitroad:/sys/bus/pci/devices/0000:00:03.0$
在此目录中,我们可以找到供应商和设备文件名
bobbin@theitroad:/sys/bus/pci/devices/0000:00:03.0$cat vendor 0x8086 bobbin@theitroad:/sys/bus/pci/devices/0000:00:03.0$cat device 0x100e bobbin@theitroad:/sys/bus/pci/devices/0000:00:03.0$
内核使用这些值正确地将驱动程序与设备匹配.PCI驱动程序告诉内核,其中供应商和设备ID它们将支持,以便内核知道如何将驱动程序绑定到正确的设备。
找到内核和驱动程序支持
搜索供应商和设备ID的内核源文件
bobbin@theitroad:/usr/src/linux-headers-3.8.0-29$grep -i 0x8086 include/linux/pci_ids.h #define PCI_VENDOR_ID_INTEL 0x8086 bobbin@theitroad:/usr/src/linux-headers-3.8.0-29$
bobbin@theitroad:/usr/src/linux-headers-3.8.0-29$grep -i 0x100e include/linux/pci_ids.h #define 0x100e bobbin@theitroad:/usr/src/linux-headers-3.8.0-29$
现在在"PCI_VENDOR_ID_INTEL"中搜索驱动程序源文件。
现在,我们需要查找驱动程序的关注C文件,并在文件中查看
bobbin@theitroad:/usr/src/linux-source-3.2.0/drivers/net$grep -Rl PCI_VENDOR_ID_INTEL * can/pch_can.c ethernet/dec/tulip/tulip_core.c ethernet/oki-semi/pch_gbe/pch_gbe_main.c ethernet/broadcom/tg3.c ethernet/intel/e100.c ethernet/intel/e1000/e1000_main.c ethernet/intel/e1000/e1000.h irda/smsc-ircc2.c wireless/iwlegacy/iwl-core.h wireless/iwlwifi/iwl-pci.c wireless/ipw2x00/ipw2100.c wireless/ipw2x00/ipw2200.c wireless/rtlwifi/pci.c bobbin@theitroad:/usr/src/linux-source-3.2.0/drivers/net$
bobbin@theitroad:/usr/src/linux-source-3.2.0/drivers/net/ethernet/intel$cat e1000_main.c | more
* {PCI_DEVICE(PCI_VENDOR_ID_INTEL, device_id)} */ static DEFINE_PCI_DEVICE_TABLE(e1000_pci_tbl) = { INTEL_E1000_ETHERNET_DEVICE(0x1000), INTEL_E1000_ETHERNET_DEVICE(0x1001), INTEL_E1000_ETHERNET_DEVICE(0x1004), INTEL_E1000_ETHERNET_DEVICE(0x1008), INTEL_E1000_ETHERNET_DEVICE(0x1009), INTEL_E1000_ETHERNET_DEVICE(0x100C), INTEL_E1000_ETHERNET_DEVICE(0x100D), INTEL_E1000_ETHERNET_DEVICE(0x100E), INTEL_E1000_ETHERNET_DEVICE(0x100F), INTEL_E1000_ETHERNET_DEVICE(0x1010), INTEL_E1000_ETHERNET_DEVICE(0x1011), INTEL_E1000_ETHERNET_DEVICE(0x1012), INTEL_E1000_ETHERNET_DEVICE(0x1013), INTEL_E1000_ETHERNET_DEVICE(0x1014),
所有PCI驱动程序都包含它们支持的不同设备的列表。
列表包含在define_pci_device_table表中的静态定义中,就像这个一样。
这就是我们需要查看的东西,以确定此驱动程序是否支持我们的设备。
在我们的情况下,供应商值和设备ID匹配,因此此驱动程序将能够支持我们的设备。