... h2. Теория У устройств известен *PCI-ID*. Драйвера при загрузке сообщают ядру, устройства с каким PCI-ID они поддерживают. Так для устройства подбирается драйвер. Коллизий в поддержке разными драйверами одних и тех же устройств не бывает, а если бывают - это ошибка. h2. Примеры: как разобраться почему устройство не работает? h3. Узнать PCI-ID устройства {code} # lspci -nn | grep X7 03:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 02) {code} PCI-ID в квадратных скобках и состоит из двух чисел: *Vendor ID* \- 8086 и *Device ID* \- 1572. 8086 - Intel Corporation 1572 - Ethernet Controller X710 for 10GbE SFP\+ h3. Найти упоминание драйвера в исходном коде В исходных кодах драйверов можно найти упоминание device-id. Если его там нет - значит этот драйвер не поддерживает это устройство. {code} # grep -r 1572 ./ ./src/i40e_devids.h:#define I40E_DEV_ID_SFP_XL710 0x1572 {code} В драйверах для Intel с SourceForge обычно в корне есть файл pci.updates, в нём перечислены поддерживаемые устройства: {code} # egrep '(8086|1572)' pci.updates 8086 Intel Corporation 1572 Ethernet Controller X710 for 10GbE SFP+ ... {code} h3. Гипотеза - NO-CARRIER на интерфейсах из-за неподдерживаемых SFP\+ модулей В логе {code} /var/log/messages {code} есть строчки: {code} kernel: i40e 0000:03:00.0: Rx/Tx is disabled on this device because an unsupported SFP+ module type was detected. {code} В ixgbe драйвере есть параметр, с помощью которого можно игнорировать неподдерживаемые SFP\+ модули: {code} allow_unsupported_sfp=1,1 {code} Но ни обновлённый i40e-драйвер: {code} # modinfo i40e | egrep '(filename|parm)' filename: /lib/modules/2.6.32-754.el6.x86_64/updates/drivers/net/ethernet/intel/i40e/i40e.ko parm: debug:Debug level (0=none,...,16=all) (int) {code} Ни стандартный, от CentOS 6: {code} # modinfo /lib/modules/2.6.32-754.el6.x86_64/kernel/drivers/net/i40e/i40e.ko | egrep '(filename|parm)' filename: /lib/modules/2.6.32-754.el6.x86_64/kernel/drivers/net/i40e/i40e.ko parm: debug:Debug level (0=none,...,16=all) (int)
|