1. 程式人生 > >linux網卡驅動更新方法

linux網卡驅動更新方法

linu lin errors gcc 找不到 install 指定 set :link

kernel: eth0: igb_reset_task: Reset adapter解決方法

1、 LVS集群web項目,運行大概一個月左右出現訪問慢的情況,查詢mysql服務器時/var/log/message日誌文件,發現以下內容:

Dec 6 04:15:29 localhost kernel: igb 0000:01:00.1: eth1: Reset adapter

Dec 6 04:15:29 localhost kernel: igb 0000:01:00.0: eth0: Reset adapter

Dec 6 04:15:31 localhost kernel: igb: eth0 NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX

Dec 6 04:15:31 localhost kernel: igb: eth1 NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX

Dec 6 04:24:01 localhost kernel: igb 0000:01:00.1: eth1: Reset adapter

Dec 6 04:24:01 localhost kernel: igb 0000:01:00.0: eth0: Reset adapter

Dec 6 04:24:03 localhost kernel: igb: eth0 NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX

Dec 6 04:24:03 localhost kernel: igb: eth1 NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX

解決辦法:

根據各位同仁建議,是升級網卡驅動,根據各自服務器使用的網卡到官網下載。

http://www.intel.cn/content/www/cn/zh/homepage.html Intel官網,下載中心

wget https://downloadmirror.intel.com/13663/eng/igb-5.3.2.tar.gz

https://downloadcenter.intel.com/zh-cn/download/13663/-82575-6-82580-I350-I210-211-Linux-

2、 將當前內核(2.6.32-358.el6.x86_64)升級到目標內核(2.6.32-573.8.1.el6.x86_64),但是編譯的目標內核(2.6.32-573.8.1.el6.x86_64)的對應驅動程序並不一定支持當前系統的對應設備。本篇將詳細講述目標內核驅動無法支持當前網卡設備的處理步驟。

01、更新內核
CentOS release 6.4 (Final)對應的kernel默認為2.6.32-358.el6.x86_64

# uname -r

2.6.32-358.el6.x86_64

安裝增強功能需要kernel-devel包,必須保證kernel-devel和kernel版本的一致。查看軟件源中kernel-devel的版本:

# yum info kernel-devel

當前的kernel-devel版本是2.6.32-573.8.1.el6.x86_64。因此,必須升級kernel:

# yum update kernel

升級完後必須重啟系統,新的kernel才能被使用。

02、安裝kernel-devel和gcc

# yum install kernel-devel gcc gcc-c++

03、顯示所有網卡
由於一個系統可以支持多張網卡,可通過如下命顯示當前系統的所有網卡及其基本信息:

[[email protected]]# ifconfig -a

eth0 Link encap:EthernetHWaddr 0C:C4:7A:15:E3:58

inet addr:192.168.1.120 Bcast:192.168.1.255 Mask:255.255.255.0

inet6addr: fe80::ec4:7aff:fe15:e358/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:33988 errors:0 dropped:0 overruns:0 frame:0

TX packets:8164 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:2939087 (2.8 MiB) TX bytes:1024040 (1000.0 KiB)

04、查看網卡所需驅動

使用ethtool命令可以查看指定網卡所以來的網卡驅動信息:

[[email protected]]# ethtool -i eth0

driver: igb - 網卡em3依賴igb驅動

version: 4.0.1-k

firmware-version: 3.29, 0x023b8000

bus-info: 0000:01:00.0

supports-statistics: yes

supports-test: yes

supports-eeprom-access: yes

supports-register-dump: yes

supports-priv-flags: no

註:igb 驅動程序支持所有基於 82575 、 82576 、 82580 和 I350 的千兆位網絡連接。

錯誤信息:

[[email protected] ~]# lspci

-bash: lspci: command not found

問題原因:

這是因為沒有安裝pciutils包造成的。

解決辦法:

#yum install pciutils

05、查看網卡型號

通過③我們已經知道了網卡所依賴的驅動,但是還不知具體的網卡驅動型號,此時可通過如下命令查詢:

[[email protected] ~]# lspci -nn | grep "Eth"

01:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)

01: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]的支持。

06、查看目標內核的網卡驅動是否支持當前型號網卡

可以通過modinfo命令查看*.ko對哪種設備型號的支持,目標內核(2.6.33-110.el6.x86_64)的相關驅動可在/lib/modules/2.6.33-110.el6.x86_64的目錄想找到,如下所示:

#modinfo /lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/net/igb/igb.ko

filename: /lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/net/igb/igb.ko

version: 4.0.1-k

license: GPL

description: Intel(R) Gigabit Ethernet Network Driver

author: Intel Corporation, <[email protected]>

srcversion: 04D309663B138858B8AF619

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: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:v00008086d00001539sv*sd*bc*sc*i*

depends: ptp,dca

vermagic: 2.6.32-358.el6.x86_64 SMP mod_unload modversions

parm: max_vfs:Maximum number of virtual functions to allocate per physical function (uint)

parm: debug:Debug level (0=none,...,16=all) (int)

從以上信息中找不到[8086:1521]的信息,因此,目標內核(2.6.32-358.el6.x86_64)網卡驅動不支持當前網卡!

07、到官網下載網卡驅動
既然已經明確了目標內核的網卡驅動並不支持當前的網卡設備,也就是說一旦啟用新的內核,將導致系統無法正常使用網絡功能。如果是英特爾的網卡設備,則可到:http://www.intel.cn/content/www/cn/zh/homepage.html 下載所需的驅動源碼到本地。

08、編譯網卡驅動
解壓驅動源碼後,按照以下命令格式編譯驅動源碼:

#cd igb-5.3.2/src

#make BUILD_KERNEL=2.6.32-573.12.1.el6.x86_64

說明:2.6.32-573.12.1.el6.x86_64 為內核版本,請根據自己的服務器內核版本輸入;

以上命令將會生成網卡驅動igb.ko。其中BUILD_KERNEL指明需要為哪個內核編譯驅動,默認是給當前正在運行的內核編譯,在此我們設定為目標內核(2.6.32-573.12.1.el6.x86_64)。那麽又該如何查看新生成的網卡驅動igb.ko是否支持當前的網卡設備呢?

09、檢查網卡驅動是否支持當前網卡
步驟⑦將會生成網卡驅動igb.ko,這時可通過modinfo命令驗證該驅動是否支持網卡設備[8086:1521],如下所示:

[[email protected] src]# modinfo igb.ko

filename: igb.ko

version: 5.3.2

license: GPL

description: Intel(R) Gigabit Ethernet Network Driver

author: Intel Corporation, <[email protected]>

srcversion: B821C1F6B2F95B48EC6DFDA

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: i2c-core,ptp,dca,i2c-algo-bit

vermagic: 2.6.32-573.8.1.el6.x86_64 SMP mod_unload modversions

終於在顯示的信息中找到了[8086:1521]信息,說明新生成的驅動文件能夠支持當前網卡型號。那麽如何讓目標內核(2.6.32-573.8.1.el6.x86_64)能夠載入新驅動呢?

09、更新目標內核驅動

# cd /usr/local/src/igb-5.3.2/src

# make install

# rmmod igb; modprobe igb

對於120秒超時問題在/etc/sysctl.conf文件裏面添加

vm.dirty_background_ratio=5

vm.dirty_ratio=10


10、以上工作完成後,可以重啟系統了!

[[email protected] src]# ethtool -i eth0

driver: igb

version: 5.3.2

firmware-version: 1.52, 0x800007ae

bus-info: 0000:01:00.0

supports-statistics: yes

supports-test: yes

supports-eeprom-access: yes

supports-register-dump: yes

supports-priv-flags: no

linux網卡驅動更新方法