1. 程式人生 > >LINUX核心升級 - 更新網絡卡驅動

LINUX核心升級 - 更新網絡卡驅動

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                    因專案需要,將當前核心(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, <[email protected]>
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, <[email protected]>
srcversion:     E377200391EBF74638FEDA2
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:v00008086d00001526sv*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:v00008086d00000440sv*sd*bc*sc*i*
alias:          pci:v00008086d0000043Csv*sd*bc*sc*i*
alias:          pci:v00008086d0000043Asv*sd*bc*sc*i*
alias:          pci:v00008086d00000438sv*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:v00008086d00001527sv*sd*bc*sc*i*
alias:          pci:v00008086d0000150Fsv*sd*bc*sc*i*
alias:          pci:v00008086d0000150Esv*sd*bc*sc*i*
alias:          pci:v00008086d00001524sv*sd*bc*sc*i*
alias:          pci:v00008086d00001523sv*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*
alias:          pci:v00008086d0000157Csv*sd*bc*sc*i*
alias:          pci:v00008086d0000157Bsv*sd*bc*sc*i*
alias:          pci:v00008086d00001538sv*sd*bc*sc*i*
alias:          pci:v00008086d00001537sv*sd*bc*sc*i*
alias:          pci:v00008086d00001536sv*sd*bc*sc*i*
alias:          pci:v00008086d00001533sv*sd*bc*sc*i*
alias:          pci:v00008086d00001F45sv*sd*bc*sc*i*
alias:          pci:v00008086d00001F41sv*sd*bc*sc*i*
alias:          pci:v00008086d00001F40sv*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)能夠載入新驅動呢?[注意:編譯完成後,已經要確認vermagic欄位是否為指定的核心版本,如果不是,執行後進行重啟時,依然無法正常啟動!切記!]

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、以上工作完成後,可以重啟系統了!  
           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述