
簡介瑞昱RTL8168B是常見的PCI-E接口以太網控制芯片多用于臺式機與服務器主板。在Linux發行版如Fedora 6中只有安裝對應驅動后才能正常識別網卡并建立有線網絡連接。這份資源提供該網卡的官方驅動源碼包版本r8168-8.013.00壓縮包共11個文件包含C語言源碼、頭文件、makefile編譯腳本、htm格式安裝說明及readme文檔包體僅58KB適合需要手動編譯驅動的用戶快速獲取。通過編譯并加載該驅動模塊讀者可以熟悉Linux內核模塊管理的基本操作了解configure、make、modprobe等命令的實際用法并學會使用ifconfig或ip addr驗證網卡狀態。由于Fedora 6是較老發行版編譯過程中容易遇到內核頭文件不匹配、依賴缺失等問題資源附帶的說明文檔提供了針對性的排錯指引。目前該資源已有2869人學習下載適合Linux運維人員、系統管理員以及需要為舊版本系統配置硬件驅動的用戶參考。 裝了這么多年Linux十個里面有八個會把時間花在網卡驅動上尤其是碰上Realtek的網卡。Realtek的芯片出貨量大、覆蓋廣從百兆老網卡到2.5G/5G有線網卡再到各種USB無線網卡幾乎每個裝機佬的抽屜里都能翻出兩三塊。但Realtek官方對Linux的支持一直談不上積極官網掛出來的Linux驅動源碼很多年都不更新遇到新版內核直接編譯不過而Linux內核自帶的開源驅動雖然能用可碰上一些特殊型號要么識別不了要么速度跑不滿。這篇文章就從我實際裝機的經歷出發把Linux系統下Realtek網卡驅動的型號識別、驅動選擇、源碼編譯、問題排查整套流程捋一遍希望對準備在Linux下折騰網卡的朋友有點幫助。1. 先做身份確認你的網卡到底是什么型號驅動裝不上、裝完沒效果90%的情況不是驅動有問題而是壓根沒搞清楚自己手上是什么芯片。Realtek的網卡型號命名看著簡單但“RTL8111”“RTL8168”“RTL8125”這些編號在市面上經常混著用同一個型號還可能有好幾個硬件版本驅動方案完全不同。所以第一步不是下載驅動而是先把網卡的準確型號和接口類型摸清楚。1.1 有線網卡lspci一次定位有線網卡的識別最簡單直接執行lspci | grep -i ethernet輸出大概是這個樣子02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)看到這個輸出基本可以確定是RTL8111或RTL8168系列的千兆網卡。內核自帶的r8169驅動一般可以直接驅動它但這只是“能用”后面再細說。如果是2.5G或5G的新卡輸出會是RTL8125或RTL8126之類的字樣需要重點確認內核版本和驅動方案。如果lspci看不到任何Realtek有線網卡別急著下結論。有些主板把網卡走的是USB通道或者網卡在BIOS里被禁用了。先查BIOS設置確保板載網卡處于開啟狀態再說。還有一種情況是網卡沒有物理連接lspci也會顯示但用起來沒有任何反應這時候優先檢查網線和交換機端口。1.2 無線網卡不像你想的那么好認無線網卡的識別有兩種方式。如果網卡是PCIe接口板載或獨立插槽用上面的lspci命令就能看到比如“RTL8822BE”“RTL8852BE”等。但USB接口的無線網卡要換命令lsusb輸出類似Bus 002 Device 003: ID 0bda:b812 Realtek Semiconductor Corp. 802.11ac NIC注意看ID后面的數字0bda是Realtek的USB廠商ID后面那個b812才是具體芯片型號的線索。不過USB無線網卡經常出現“套殼”問題比如芯片明明是RTL8192EU但設備ID被廠商改寫了lsusb只能看到廠商自定義的ID。這時候建議配合dmesg | grep -i realtek查看內核識別信息或者直接拆開網卡看芯片絲印。踩過太多次坑了買USB網卡不拆殼看清楚芯片后續裝驅動基本靠猜。1.3 系統默認驅動能不能先頂上在動手編譯官方驅動之前先看看系統能不能用自帶驅動把網卡跑起來。插上網線或者USB網卡后執行dmesg | grep -i r8169 dmesg | grep -i rtl如果有驅動加載成功的日志而且ip addr里已經能看到網卡的IP地址那恭喜你最少基礎聯網沒問題。這時候就能先用系統自帶的源把編譯工具鏈裝好后面做任何操作都有退路。我個人的習慣是任何時候動網卡驅動之前先確保手上有一個可以用的聯網通道哪怕是手機USB共享網絡也行。反正在線裝依賴、下載源碼、查錯誤日志沒網絡寸步難行。2. 有線網卡驅動內核自帶與官方源碼怎么取舍2.1 r8169能用但有時候只是“能用”Realtek的千兆有線網卡在內核里對應的是r8169驅動RTL8111、RTL8168、RTL8169這些經典型號都被它接管。很多發行版默認就加載它系統裝完插上網線就能上網這也是大多數用戶覺得“Realtek沒坑”的原因。但“能上網”和“工作正常”是兩碼事。r8169在部分平臺上會出現兩個典型問題一是連接速率降級千兆寬帶只能跑出百兆速度執行ethtool eth0看到的是Speed: 100Mb/s而不是1000Mb/s二是高負載下斷流尤其是跑大流量傳輸或者連續壓測時網卡突然無響應dmesg里刷出大量超時日志。出現這些情況先別急著罵r8169排除一下網線、交換機和BIOS省電設置。確認硬件沒問題之后再考慮換官方驅動。而且有一個點容易被忽略r8169其實是個通用驅動它同時覆蓋了多個型號某些新內核里對老型號的初始化邏輯做了改動反而會讓老網卡出現兼容性問題。這時候換回廠商驅動反而更穩。2.2 什么時候必須換r8168/r8125啟動后懷疑驅動不對可以執行lsmod | grep r8169如果加載的是r8169但你的網卡是RTL8111/8168并且頻繁掉線或速率不達標那就該考慮用Realtek官方的r8168驅動替換掉內核的r8169了。RTL8125、RTL8126這類2.5G/5G網卡則對應官方驅動r8125如果你用的內核版本比較舊內置驅動很可能是當成千兆網卡在跑這也要靠官方驅動才能發揮全部速率。這里必須說清楚一個概念內核自帶的驅動和Realtek官網提供的驅動源碼是兩套獨立實現功能范圍不一樣。r8169是內核社區維護的開源驅動優點是跟內核兼容性好升級內核不用重新編譯缺點是遇到新硬件或某些特殊功能比如部分網卡支持的WOL、巨型幀、硬件時間戳支持不完整。r8168/r8125是Realtek官方發布的閉源驅動源碼優點是對自家芯片的寄存器配置最準確速率、功耗、溫度表現更符合“出廠參數”缺點是需要自己編譯而且內核一升級就得重新來一遍除非你用DKMS機制把它自動化。2.3 官方驅動源碼編譯的完整流程以RTL8125為例到Realtek官網找到對應型號的Linux驅動下載鏈接通常是一個tar.gz壓縮包。編譯安裝的完整流程如下# 先裝編譯工具鏈 sudo apt update sudo apt install -y build-essential dkms linux-headers-$(uname -r) # 解壓源碼 tar -xvf r8125-9.011.01.tar.bz2 cd r8125-9.011.01 # 編譯并安裝 sudo make -j$(nproc) sudo make install # 刷新模塊依賴 sudo depmod -a # 暫時手動加載測試 sudo modprobe r8125編譯過程如果沒有任何報錯執行lsmod | grep r8125能看到模塊已加載再執行ethtool eth0查看速度。很多年前我第一次編譯時直接卡在make找不到頭文件這一步其實原因就是忘了裝linux-headers-$(uname -r)。記住這個包名前面要帶一個內核版本號也就是說如果你用的發行版是Ubuntu、Debian系上面的apt install只會裝最新版本的headers如果跟當前運行內核版本不匹配照樣報錯。可以先執行uname -r確認版本號再手動指定sudo apt install linux-headers-$(uname -r)利用命令替換能保證安裝的就是當前內核對應的頭文件。2.4 用DKMS把驅動固化成系統模塊直接make install的問題在于內核一旦升級新內核啟動后驅動就失效了因為編譯出來的.ko模塊只對當時的編譯環境有效。所以強烈建議用DKMS來管理驅動一條命令把驅動注冊進系統以后每次內核升級DKMS會自動重新編譯模塊# 在源碼目錄下 sudo make clean sudo dkms add . sudo dkms build -m r8125 -v 9.011.01 sudo dkms install -m r8125 -v 9.011.01版本號以你下載的源碼包為準不同版本不同。執行dkms status可以查看到當前注冊的驅動狀態。這里有個細節dkms add .是讀取當前目錄下的dkms.conf配置文件如果源碼包沒帶這個文件需要自己寫一份。好在官方驅動一般都會提供別亂改里面的參數。加載新驅動前建議先看下當前是否有r8169在占用網卡。如果存在需要把新驅動名寫進/etc/modules同時把r8169加入黑名單比如創建/etc/modprobe.d/blacklist-r8169.conf寫入blacklist r8169然后把r8125加入自動加載echo r8125 | sudo tee -a /etc/modules重啟后執行lsmod | grep r8125確認同時ethtool eth0確認速率。3. USB無線網卡驅動從源碼編譯到固件加載3.1 先看芯片再找驅動順序不能反USB無線網卡的水比有線深得多。同一個型號的網卡不同批次可能用了不同芯片同一個芯片不同廠商的驅動方案也可能不一樣。比如市面上常見的RTL8188EU、RTL8188GU、RTL8192EU、RTL8821CU、RTL8822BU驅動源碼完全不是一套用錯驅動不但編譯不過就算勉強編譯出來也加載不了。識別芯片的準確方法還是lsusb加dmesg把設備ID記下來然后去搜索引擎查“芯片型號 linux driver”基本都能找到Linux社區維護的開源驅動倉庫。這個搜索動作千萬不能省因為Realtek官方很多USB無線網卡的Linux驅動更新極慢甚至連新內核的適配都沒有直接下官網源碼編譯大概率報錯。第三方倉庫反而維護積極適配了新內核的API比如aircrack-ng/rtl8188eus、morrownr/rtl88x2bu這些開源項目比官方代碼靠譜得多。3.2 第三方開源驅動與官方代碼怎么選選第三方開源驅動不是因為它免費而是因為它解決了“能在新內核上編譯通過”這個最基本的問題。以RTL8188EU為例內核從5.15開始把內部API改了不少官方2012年左右的老代碼在6.x內核上根本編譯不過但社區維護的rtl8188eus項目持續跟進make一次就能過。第三方驅動倉庫的編譯流程和官方差別不大以rtl88x2bu為例git clone https://github.com/morrownr/rtl88x2bu.git cd rtl88x2bu sudo make -j$(nproc) sudo make install sudo modprobe 88x2bu注意驅動模塊名可能是88x2bu而不是rtl88x2bu加載前先用lsmod看看有沒有舊的同功能模塊有的話先modprobe -r卸載掉避免兩個驅動搶同一個USB設備。如果你只是在桌面環境用個無線網卡上網優先選DKMS模式安裝。第三方倉庫很多都在README里給了DKMS安裝說明千萬別嫌麻煩跳過不然每次內核升級之后無線網卡就“消失”那感覺真的很難受。3.3 固件缺失最容易忽略的一環源碼編譯成功、模塊加載正常但網卡就是掃描不到WiFi這時候大概率是固件文件缺失。Realtek網卡的無線部分除了驅動模塊外還需要把芯片運行時的固件載入硬件。固件文件一般放在/lib/firmware/rtlwifi/目錄下如果缺少對應文件dmesg日志里會出現類似“rtl8188eu: firmware rtle.fw not found”的報錯。遇到這種情況安裝發行版的固件包即可Debian/Ubuntu系可以執行sudo apt install firmware-realtek裝完重啟或者重新插拔網卡再看dmesg日志。這里要提醒一句有些第三方驅動倉庫會把固件文件一起打包進安裝腳本有些不會。如果按README裝完還是掃不到WiFi第一反應就去看dmesg別反復重編譯。4. 問題排查實錄編譯報錯、加載失敗、跑不滿速4.1 編譯階段最常見的報錯速查源碼編譯是踩坑重災區。我整理了一張速查表基本能覆蓋八成常見問題。現象原因處理方法make: *** No rule to make target modules內核頭文件沒有安裝或不匹配安裝linux-headers-$(uname -r)fatal error: linux/compiler.h: No such file or directory內核頭文件版本不對確認/usr/src下頭文件目錄與uname -r對應error: implicit declaration of function ...內核API版本太新老驅動不兼容換用社區維護的新驅動源碼selinux is enabled安裝模塊被拒SELinux攔截內核模塊加載改用官方簽名模塊或臨時setenforce 0測試insmod: ERROR: could not insert module: Unknown symbol驅動與當前內核版本不匹配全部重編確保使用當前內核的headers編譯編譯報錯還有個通用排查思路打開源碼里的Makefile看開頭的內核路徑KDIR是否指向了正確的頭文件目錄。大部分情況是指向/lib/modules/$(shell uname -r)/build但如果你用的是云服務器或定制內核這個路徑可能是空的所以編譯前先檢查一下這個build目錄是否存在。4.2 模塊加載失敗與安全啟動模塊編譯好了modprobe加載卻報錯“Required key not available”或者“Module has invalid signature”這是安全啟動Secure Boot在攔路。現在很多預裝Win11的筆記本默認開啟Secure BootLinux內核在啟動時會校驗內核模塊的簽名未簽名的第三方驅動會被拒絕加載。解決方式有兩種。第一種是臨時關閉Secure Boot進BIOS里找到Secure Boot選項并禁用簡單粗暴但對安全敏感的場景不太友好。第二種是使用mokutil工具給模塊簽名在Ubuntu系下可以這樣操作sudo mokutil --disable-validation設置一個密碼并重啟在藍色MOK管理界面里確認操作。這里有個細節MOK管理只有重啟后進入藍色界面才能確認密碼要記住不然重啟后會卡在驗證環節。4.3 網卡起來了速度不對優先查這幾處驅動加載成功不代表速度正常。如果我碰到速率不達標的情況按下面的順序排查先用ethtool eth0看當前協商速率如果顯示100Mb/s拔插網線、更換網線再看貓和交換機端口是否支持千兆。很多時候問題根本不在驅動。查看dmesg | grep -i r8169/rtl是否有“link down”“carrier lost”之類日志有的話重點檢查網口的省電模式BIOS里把綠色以太網、節能以太網這類選項關掉。測試大文件傳輸用iperf3打流。如果單線程跑不滿試試多線程無線網卡跑不滿屬于正常有線網卡要是單線程跑不滿基本可以認定驅動或網線有問題。最終手段是換回內核自帶驅動或換驅動版本交叉對比。Realtek的驅動版本跨度大有時舊驅動在某個內核上表現反而更穩定別死磕最新版。5. 特殊環境下的驅動方案5.1 服務器平臺與整機定制驅動服務器采購回來后自己裝Linux系統網卡識別不出來這種情況在Realtek芯片上不算罕見。服務器主板上的網卡大多是板載多口千兆或萬兆但部分型號的網卡是“Realtek芯片 廠商自定義固件”標準的r8169驅動能識別出硬件卻拿不到完整的MAC地址或者PHY初始化順序不對。碰到這種問題優先去整機廠商的官網找“Linux驅動”或“網卡固件更新”頁面下載驅動包時注意選擇內核版本對應的版本。廠商定制驅動和Realtek官方源碼的區別在于它會額外帶上PHY初始化腳本和自定義的device ID映射編譯方式大多類似但可能在Makefile里預置了額外的宏定義所以盡量別拿官方通用版去替代。如果實在找不到定制版也可以先用臨時無線網卡聯網把dmidecode的信息和網卡ID記錄好再去社區里搜關鍵詞往往能找到別人的解決方案。5.2 國產Linux發行版下的兼容性國產主流Linux發行版比如Deepin、UOS、麒麟系列底層還是Debian或Fedora的體系所以驅動安裝方式和Ubuntu差別不太大。要注意的區別在于這些發行版默認內核版本往往比較保守官方軟件源里不一定有build-essential和dkms需要手動開啟“開發者模式”或“源碼倉庫”后安裝。另外這些系統預裝的網卡驅動白名單可能和Debian官方不太一樣某些內核模塊默認就被安全策略攔截了。比如我遇到過在UOS上編譯好的rtl8821cu模塊modprobe提示“Operation not permitted”查了半天才發現是系統的模塊加載策略沒放行需要在/etc/modprobe.d/下加一個allowlist文件把驅動名寫進去。這類問題不在Realtek官方文檔里只能靠多翻發行版社區帖子。6. 最后分享一個小習慣Realtek網卡驅動折騰得多了我養成一個習慣每次裝完驅動先把當前生效的模塊名字、版本號、相關配置文件路徑記到文檔里同時執行dkms status和modprobe -l把狀態快照下來。這個習慣幫我省了大量重復排查時間。畢竟Realtek的驅動體系相對分散有線和無線是兩套完全獨立的代碼USB和PCIe的芯片方案也不一樣指望一個通用方法解決所有型號不現實但有記錄、有日志、有對照表總能把問題一步步縮小到具體環節。希望這篇文章能幫你少走點彎路。本文還有配套的精品資源點擊獲取