因項目需要,將當前內核(2.6.32-220.el6.x86_64)升級到目標內核(2.6.33-110.el6.x86_64),但是編譯的目標 內核(2.6.33-110.el6.x86_64)的對應驅動程序並不一定支持當前系統的對應設備。本篇將詳細講述目標內核驅動無法支持當前網卡設備的 處理步驟。
01、編譯目標內核
請參考內核編譯相關文檔(省略)
02、顯示所有網卡
由於一個系統可以支持多張網卡,可通過如下命顯示當前系統的所有網卡及其基本信息:
#ifconfig -a
em1 Link encap:Ethernet HWaddr EC:F4:BB:D0:0B:60
UP BROADCAST 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)
em2 Link encap:Ethernet HWaddr EC:F4:BB:D0:0B:62
UP BROADCAST 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)
em3 Link encap:Ethernet HWaddr EC:F4:BB:D0:0B:64
UP BROADCAST 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)
Memory:dbe80000-dbf00000
03、查看網卡所需驅動
使用ethtool命令可以查看指定網卡所以來的網卡驅動信息:
#ethtool -i em3
driver: igb - 網卡em3依賴igb驅動
version: 3.0.6-k
firmware-version: 1.6-7
bus-info: 0000:08:00.0
注:igb 驅動程序支持所有基於 82575 、 82576 、 82580 和 I350 的千兆位網絡連接。
04、查看網卡型號
通過③我們已經知道了網卡所依賴的驅動,但是還不知具體的網卡驅動型號,此時可通過如下命令查詢:
# lspci -nn | grep "Eth"
01:00.0 Ethernet controller [0200]: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01)
01:00.1 Ethernet controller [0200]: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01)
03:00.0 Ethernet controller [0200]: Intel Corporation 82599EB 10-Gigabit SFP+ Network Connection [8086:154d] (rev 01)
03:00.1 Ethernet controller [0200]: Intel Corporation 82599EB 10-Gigabit SFP+ Network Connection [8086:154d] (rev 01)
08:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)
08:00.1 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)
注:Gigabit為千兆 10-Gigabit為萬兆
由④的操作可知當前內核(2.6.32-220.el6.x86_64)千兆網絡驅動igb支持網卡型號[8086:1521],因此必須要求目標內核(2.6.33-110.el6.x86_64)對該型號網卡[8086:1521]的支持。
05、查看目標內核的網卡驅動是否支持當前型號網卡
可以通過modinfo命令查看*.ko對哪種設備型號的支持,目標內核(2.6.33-110.el6.x86_64)的相關驅動可在/lib/modules/2.6.33-110.el6.x86_64的目錄想找到,如下所示:
#modinfo /lib/modules/2.6.33-110.el6.x86_64/kernel/drivers/net/igb/igb.ko
filename: igb.ko
version: 2.1.0-k2
license: GPL
description: Intel(R) Gigabit Ethernet Network Driver
author: Intel Corporation, <e1000-devel@lists.sourceforge.net>
srcversion: 412D1CB4C85682CBF07976F
alias: pci:v00008086d000010D6sv*sd*bc*sc*i*
alias: pci:v00008086d000010A9sv*sd*bc*sc*i*
alias: pci:v00008086d000010A7sv*sd*bc*sc*i*
alias: pci:v00008086d000010E8sv*sd*bc*sc*i*
alias: pci:v00008086d0000150Dsv*sd*bc*sc*i*
alias: pci:v00008086d000010E7sv*sd*bc*sc*i*
alias: pci:v00008086d000010E6sv*sd*bc*sc*i*
alias: pci:v00008086d00001518sv*sd*bc*sc*i*
alias: pci:v00008086d0000150Asv*sd*bc*sc*i*
alias: pci:v00008086d000010C9sv*sd*bc*sc*i*
alias: pci:v00008086d00001516sv*sd*bc*sc*i*
alias: pci:v00008086d00001511sv*sd*bc*sc*i*
alias: pci:v00008086d00001510sv*sd*bc*sc*i*
alias: pci:v00008086d0000150Fsv*sd*bc*sc*i*
alias: pci:v00008086d0000150Esv*sd*bc*sc*i*
depends:
vermagic: 2.6.33-110.el6.x86_64 SMP mod_unload modversions
從以上信息中找不到[8086:1521]的信息,因此,目標內核(2.6.33-110.el6.x86_64)網卡驅動不支持當前網卡!
06、到官網下載網卡驅動
既然已經明確了目標內核的網卡驅動並不支持當前的網卡設備,也就是說一旦啟用新的內核,將導致系統無法正常使用網絡功能。如果是英特爾的網卡設備,則可 到:http://www.intel.cn/content/www/cn/zh/homepage.html 下載所需的驅動源碼到本地。
07、編譯網卡驅動
解壓驅動源碼后,按照以下命令格式編譯驅動源碼:
#make BUILD_KERNEL=2.6.33-110.el6.x86_64
以上命令將會生成網卡驅動igb.ko。其中BUILD_KERNEL指明需要為哪個內核編譯驅動,默認是給當前正在運行的內核編譯,在此我們設定為目標內核(2.6.33-110.el6.x86_64)。那么又該如何查看新生成的網卡驅動igb.ko是否支持當前的網卡設備呢?
08、檢查網卡驅動是否支持當前網卡
步驟⑦將會生成網卡驅動igb.ko,這時可通過modinfo命令驗證該驅動是否支持網卡設備[8086:1521],如下所示:
#modinfo igb.ko
filename: igb.ko
version: 5.2.9.4
license: GPL
description: Intel(R) Gigabit Ethernet Network Driver
author: Intel Corporation, <e1000-devel@lists.sourceforge.net>
srcversion: E377200391EBF74638FEDA2
alias: pci:v00008086d000010D6sv*sd*bc*sc*i*
......
......
alias: pci:v00008086d00001522sv*sd*bc*sc*i*
alias: pci:v00008086d00001521sv*sd*bc*sc*i*
alias: pci:v00008086d00001539sv*sd*bc*sc*i*
......
depends: hwmon
vermagic: 2.6.33-110.el6.x86_64 SMP mod_unload modversions
parm: InterruptThrottleRate:Maximum interrupts per second, per vector, (max 100000), default 3=adaptive (array of int)
parm: IntMode:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default 2 (array of int)
parm: Node:set the starting node to allocate memory on, default -1 (array of int)
parm: LLIPort:Low Latency Interrupt TCP Port (0-65535), default 0=off (array of int)
parm: LLIPush:Low Latency Interrupt on TCP Push flag (0,1), default 0=off (array of int)
parm: LLISize:Low Latency Interrupt on Packet Size (0-1500), default 0=off (array of int)
parm: RSS:Number of Receive-Side Scaling Descriptor Queues (0-8), default 1, 0=number of cpus (array of int)
parm: VMDQ:Number of Virtual Machine Device Queues: 0-1 = disable, 2-8 enable, default 0 (array of int)
parm: max_vfs:Number of Virtual Functions: 0 = disable, 1-7 enable, default 0 (array of int)
parm: MDD:Malicious Driver Detection (0/1), default 1 = enabled. Only available when max_vfs is greater than 0 (array of int)
parm: QueuePairs:Enable Tx/Rx queue pairs for interrupt handling (0,1), default 1=on (array of int)
parm: EEE:Enable/disable on parts that support the feature (array of int)
parm: DMAC:Disable or set latency for DMA Coalescing ((0=off, 1000-10000(msec), 250, 500 (usec)) (array of int)
parm: LRO:Large Receive Offload (0,1), default 0=off (array of int)
parm: debug:Debug level (0=none, ..., 16=all) (int)
終於在顯示的信息中找到了[8086:1521]信息,說明新生成的驅動文件能夠支持當前網卡型號。那么如何讓目標內核(2.6.33-110.el6.x86_64)能夠載入新驅動呢?
09、更新目標內核驅動
首先,將新驅動igb.ko拷貝到目標內核/lib/modules/2.6.33-110.el6.x86_64下的指定目錄
#cp igb.ko /lib/modules/2.6.33-110.el6.x86_64/kernel/drivers/net/igb/
其次,使用depmod更新目標內核(2.6.33-110.el6.x86_64)模塊的依賴關系
#depmod -a 2.6.33-110.el6.x86_64
10、以上工作完成后,可以重啟系統了!