前幾天裝了幾台伺服器測試,在使用的過程中發現,每次重啟系統,登錄界面會彈出網卡提示 “r8169 0000:02:00 eth0 Invalid ocp reg 17758!” 系統版本: 經過測試發現: 1、開機前將eth0/eth1網口插上網線,系統啟動後識別到eth0/eth1網口有網線連接, ...
前幾天裝了幾台伺服器測試,在使用的過程中發現,每次重啟系統,登錄界面會彈出網卡提示 “r8169 0000:02:00 eth0 Invalid ocp reg 17758!”
系統版本:
經過測試發現:
1、開機前將eth0/eth1網口插上網線,系統啟動後識別到eth0/eth1網口有網線連接,此時系統登錄界面不會提示網卡信息。
2、如果開機前eth0/eth1沒連網線,此時登錄界面會彈出網卡提示,此時給eth0/eth1插上網線識別成功後,提示消失。緊接著拔掉eth0/eth1網線,也不會再彈出提示。
3、主板上還插了一個Intel的千兆四口PCI-E網卡,這個網卡倒是沒有提示。
總結:當網卡配置為ONBOOT=yes,板載的兩個網卡開機界面會提示,Intel網卡不提示。配置ONBOOT=no時,開機不啟動網卡,也不會出現提示。
經過幾天的折騰,發現是網卡驅動問題。
一、查看網卡驅動
查看系統當前所有網卡信息:
lspci |grep net
發現板載的2個網卡都是Realtek的網卡,版本是RTL8111/8168/8411
查看當前eth0使用網卡驅動版本:
ethtool -i eth0
發現系統當前使用的網卡驅動是r8169,(這個驅動版本應該是centos7預設安裝的版本)
到這裡懷疑是網卡驅動版本不匹配導致的,網上查了一下發現關於r8169和r8168的描述還挺多,大部分都是網路不通,網卡啟動失敗等。
既然版本不一樣,那就讓它一樣唄,開搞。
二、更新網卡驅動
先去Realtek官網下載對應版本的網卡驅動:
發現最新版本更新到8.050.03了,才113kb,直接下載
解壓安裝:
tar -jxvf r8168-8.050.03.tar.bz2
cd r8168-8.050.03
#解壓後有一個README文件,發現已經寫好腳本了,直接執行腳本安裝,簡單
./autorun.sh
果然,事情不會那麼順利,這裡發現無法直接編譯通過。報了三處錯誤,如下圖所示:
2.1編譯錯誤處理
2.1.1、‘ether_addr_copy’重定義
根據報錯提示的文件及行數,編輯文件:r8168.h,找到53行。
這裡需要修改第52行內容,根據系統內核版本修改,我這個是3.10.0
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)
改為:
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
2.1.2、初始值設定項里有未知的欄位‘ndo_change_mtu’
先查看系統內核:
cat /usr/src/kernels/3.10.0-1160.el7.x86_64/include/linux/netdevice.h |grep ndo_change_mtu
發現有這個欄位:ndo_change_mtu_rh74 ,修改r8168_n.c文件的第26768行,把ndo_change_mtu修改為ndo_change_mtu_rh74
.ndo_change_mtu = rtl8168_change_mtu,
改為
.ndo_change_mtu_rh74 = rtl8168_change_mtu,
2.1.3、‘struct net_device’沒有名為‘last_rx’的成員
這個錯誤,直接註釋掉即可,修改r8168_n.c文件的第29487行,將改行註釋掉
修改完成後,繼續編譯:
沒有報錯,查看網卡驅動版本:
改過來了,重啟後,發現系統載入的還是r8169,查了資料發現,Centos7版本替換驅動文件後,需要執行dracut --force
命令來更新initrd/initramfs,以防止載入舊版本的驅動。
dracut --force
執行完後,重啟系統。查看網卡驅動信息:
載入的是r8168,這樣,即使eth0/eth1不插網線,開機界面也不會提示網卡信息了。