realtek網卡bug

狀況1描述:在ubuntu系統下,使用主機版內建的網卡 RTL8111E 平時都能正常使用,突然有一天網卡的燈號熄滅,顯示無法連線,跑到switch那兒去看該port位的燈號也是熄滅,檢查實體線路沒問題,電腦重開機也不能恢愎正常。

狀況2描述:在linux (debian) 系統下,onboard 網卡 RTL8111D,原本在 cisco C2950 switch 上正常使用,該款 switch 是舊型 switch 不支援 green ethernet 功能。換接到新式 switch 有支援 green ethernet 上之後,網卡燈號即熄滅,switch port上的燈號也熄滅,無法連線。

原因: Realtek 網卡的 driver 在 linux 底下驅動不良,簡單說就是有bug,導致這網卡只要遇到有支援 green ethernet 的 switch (新款的 switch 都有) 都會沈睡不醒。

問題分析:在linux下,無法連線時下指令 ifdown eth0, ifup eth0 或重啟網路 /etc/init.d/networking restart ,下指令 dmesg 看系統 log ,可看到這様的字様 r8169: eth0: link down再用這些的字様直接貼到 google 即可找到許多資料。我之前以為是 green ethernet 的問題用這様的關鍵字 linux “green ethernet” 去查,只查到一筆有關的資料,但可用資料太少,無法解決我的問題。

比較有用的資料在這裡,並詳細寫了解法,綜合其它資料整理解法如下,底下的解法順序是依簡單到困難、複雜排列,有的人可能前幾個步驟就能解決了,若不行的話,請一個個步驟做下去吧。

0. 我們的問題是網路線有接,但系統卻顯示 link down 沒有網路線,所以請再次檢查實體線路。

1. 關機、拔除電源線等待15秒之後再插上、開機。 (我試過只管用一次而已,再重開機又不行了)

2.有些主機版的 BIOS 的選項裡有 Green Ethernet 可以將它關閉(設為 disable) 我的另一台電腦,這様做就解決問題了。

3.在這裡提到,只要重覆載入、卸載 r8169 driver 即可,指令是 rmmod r8169 、modprobe r8169 這様就可以了,對其他人管用,但對我不管用,所以只好繼續下一步。

4. 在這裡有看到另一招比較簡單的方法,就是先安裝 ethtool 工具包,指令 aptitude install ethtool ,裝完之後,在網卡啟動上我們要加個參數,請修改此檔

vim /etc/network/interfaces
範例如下:
iface eth0 inet static
pre-up /sbin/ethtool -s eth0 autoneg off
address 192.168.98.1
netmask 255.255.255.0

但這招對我來說,只管用了一半,網卡燈號亮了、switch port 上的燈號也亮了,但網路仍不通。該篇作者還提到在新版的kernel Linux 2.6.26-rc5 這問題就完全解決了,但我的 kernel 已是 2.6.32-5-amd64 問題依舊。

5.可以的話換網卡,此bug只針對 RealTek 螃蟹卡,換張 Intel 網卡就沒這問題了。

6.下載新版的 driver 可在官網下載最新版的driver2011/05/27備用下載點。此方法我還沒試過,只是記錄下來。

7.由於有bug的driver只是在linux底下,windows底下的drvier並沒有bug,所以我們可在windows底下調整這張網卡的一些設定,使它在linux底下能正常運作。

它的原理是:Windows 為了要關閉 Wake-on-lan 這功能,預設會在電腦關機時關閉(disable)網卡,網卡會維持在關閉的狀態直到下一次 Windows 開機時才會再度開啟網卡,但在 linux 底下 kernel 並不知道要如何去開啟網卡,所以才會造成這問題,解法也簡單,只要在Windows 底下去此網卡的 driver 選項裡開啟 Wake-on-lan 的功能即可,英文是 enable the feature “Wake-on-lan after shutdown.” 或者是有另一個選項英文我忘了中文大意是”關機後關閉網卡”將此功能設為 disable 即可。

說是簡單,但我在一台純 linux 的機器上哪來的 Windows driver 選項來給我設定呀?難不成要我再塞進一顆硬碟、灌進Windows後,才能做這個設定動作嗎? (別懷疑,這招雖然笨,但卻管用,真沒招兒了時,還真得用這招)。所幸還有一個變通的方法, Windows 也有 Live CD 版本,也就是說不用安裝系統,直接在光碟上就可進 Windows XP 系統,這東西叫 XPE,但它通常是盜版的、也就是違法的。XPE 在比較新的版本中內建了 RTL8111D 網卡的 Driver ,所以我們可以在這個系統裡做上面提到的設定動作。若你沒有 XPE 硬碟上又沒有雙系統的話,那你就乖乖的塞進一顆硬碟灌Windows吧。

基本上這様做就可以解決問題了。

但原文在最後還附加了一條
Powering off and unplugging the machine for a few seconds (around 10 usually does it) seems to reset the card, so it will work in Linux again until you boot Windows again.

但我不太確定它的意思是什麼,是指拔插頭10秒後,就會重設網卡,這様你的 linux 就又可以用了,還是指你的問題就又會重現了,直到你重新進入 Windows。 總之先記下再說。

參考資料: CiscoRedhat

本篇發表於 linux。將永久鏈結加入書籤。

1 則回應給 realtek網卡bug

  1. guanting 說道:

    我的很慘

    換了一塊 H67MA-UD2H-B3 的主機板後

    網路無法連線 ifconfig 也沒有 eth0

    抓了驅動程式回來執行,發現無法使用 好像是少 build 資料夾之類的。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *