)
裝過 Linux 的朋友基本都有類似遭遇系統(tǒng)裝好了界面也正常結果右上角偏偏沒有 WiFi 圖標。尤其是一臺嶄新的筆記本或者剛換的 USB 無線網卡插上去一點反應沒有那一刻的心情真的有點崩潰。這次要聊的就是 Ubuntu 20.04 下面 Realtek 無線網卡的驅動安裝問題具體型號是 b852 系列對應 Realtek RTL8852BE 等 WiFi 6 網卡。這類網卡在 Windows 下很省心驅動自動裝好但到了 Linux 下就成了玄學——因為官方內核自帶的驅動源里沒有對應模塊或者有模塊但默認沒啟用又或者模塊版本太舊根本不識別。更要命的是很多朋友遇到驅動問題時本身就在一個沒網絡的環(huán)境里。學校機房、公司內網、宿舍只有網線口但沒網線、或者干脆就是一臺不能聯(lián)網的裸機。這就是離線安裝最折磨人的地方你想裝網卡驅動但網卡驅動裝不上就沒有網你沒網就不能用 apt 自動下載依賴包。破解這個死循環(huán)需要一點思路也需要提前準備一些救援工具。這篇文章就把整個過程中涉及的原理、步驟、坑和經驗全部攤開來講包括怎么在沒有網絡的情況下把編譯工具鏈、內核頭文件和驅動源碼全部準備好以及有哪些備用方案可以在斷網時救急。先說明一下我這里說的 b852 是一個系列的統(tǒng)稱實際你可能在 lspci 里看到的是 Realtek RTL8852BE 或者 RTL8852AE也可能看到 Device b852 這個硬件 ID。它們基本都是同一代 WiFi 6 無線網卡方案驅動處理方式大同小異。這篇文章會以這個系列為主線覆蓋從識別硬件型號到離線編譯安裝再到開機自動加載的完整流程。1. 為什么 Ubuntu 20.04 默認搞不定這張網卡1.1 內核、固件和驅動模塊的關系要理解這個問題先得弄清楚 Linux 無線網卡工作時的三層關系硬件芯片、內核驅動模塊、固件文件。硬件芯片就是網卡本身它需要內核里對應的驅動模塊比如 rtw89_pci.ko來指揮它工作而這個模塊在運行時還需要一份固件文件比如 rtw8852be_fw.bin加載到網卡內部網卡才真正能收發(fā)射頻信號。三層缺一不可任何一層的版本不對或者缺失表現(xiàn)就是網卡枚舉不到或者反復掉線。Ubuntu 20.04 的默認內核是 5.4 系列而 Realtek RTL8852BE 對應的 rtw89 驅動是在內核 5.13 之后才正式進了 mainline。也就是說Ubuntu 20.04 自帶的 5.4/5.8/5.11 內核根本沒有可用的 rtw89 驅動模塊。即使你手動改了驅動來源也大概率需要自己去編譯因為官方內核里壓根沒有這個源碼。這就是第一個瓶頸內核太老。Ubuntu 20.04 的 LTS 版本為了保證穩(wěn)定性不會輕易升級大版本內核而新硬件的驅動往往只跟隨新內核發(fā)布。所以不換內核、不打補丁的情況下這張網卡在系統(tǒng)看來就相當于一個不存在的設備。1.2 為什么網卡在 lspci 里能看到但系統(tǒng)不識別你打開終端輸入 lspci十有八九能看到類似這樣的輸出02:00.0 Network controller: Realtek Semiconductor Co., Ltd. Device b852很多人看到這一行就覺得系統(tǒng)已經識別了呀為什么不工作這里要解釋清楚lspci 只是 PCIe 總線層面的枚舉它看到的是硬件設備的 IDs并不代表內核有對應的驅動把它接住。就像你在門口看到一封信從門縫塞進來但這不代表你已經讀完了信。真正的工作負載在驅動模塊上沒有匹配的驅動模塊lspci 能看到設備但系統(tǒng)不知道如何跟網卡通信。更直觀的檢查方式是lspci -nnk | grep -A 3 02:00.0如果沒有看到 Kernel driver in use: rtw89_pci 這樣的字樣而是停在 Kernel modules: ... 為空就說明沒有驅動在用。這是你在排查所有無線網卡問題時首先要做的一步別急著去下載源碼先確認設備到底卡在哪一層。1.3 離線環(huán)境為什么更容易翻車在線環(huán)境下驅動問題相對好解決加一個第三方 PPA比如 lwfinger/rtw89然后 apt update apt install 就完事了。但在離線環(huán)境全部依賴都要手動準備。你需要的東西不僅有驅動源碼還有編譯它所需的工具鏈和內核頭文件。很多新手只帶了驅動源碼的 tar 包結果執(zhí)行 make 的時候報 Cannot find kernel headers 或者 gcc: command not found當場卡住。離線安裝的核心心法很簡單你要在有網的另一臺機器上把所有需要的包全部下載好打包成光盤或 U 盤帶過去。關鍵是你得知道到底需要哪些包以及它們之間的依賴關系。這部分我會在后面專門用一個章節(jié)來講。實操知識Realtek 8812BU/8822CE 等常見型號與 b852 的關系順帶提醒一下Realtek 的無線網卡型號非常多不同型號的驅動方案差異巨大。老一點的 RTL8188/8192 用 rtlwifi/rtl8xxxu 內核模塊RTL8821/8812 用 rtl8812au 外部驅動RTL8822/8852 系列則用到 rtw88/rtw89 內核驅動。如果你搜索時直接搜Realtek 無線網卡驅動很容易下到完全不對的東西。先確認硬件 ID 再動手這是血淚教訓。b852 這個設備 ID 對應的是 RTL8852BE要用 rtw89 系列的驅動代碼而不是 rtl8812au 之類的老驅動。2. 離線安裝的整體思路與前置準備2.1 兩種可行的技術路線對比針對 Ubuntu 20.04 RTL8852BE業(yè)界主流的方案大體上分兩條路。第一條路是打補丁升級內核。因為 rtw89 驅動在 5.13 內核中已經包含如果你能把內核升到 5.15比如 Ubuntu 的 HWE 內核或者 mainline 內核那么驅動模塊就直接有了。HWEHardware Enablement內核是 Ubuntu 專門為新硬件準備的20.04 后面幾個小版本會提供 5.15 內核的 HWE。這條路的好處是一勞永逸內核帶著驅動而且和系統(tǒng)集成度高。壞處是內核升級可能帶來其他軟件的兼容性風險離線環(huán)境下升級內核還需要準備大量內核 deb 包體積很大。第二條路是手動編譯外部驅動。從 Realtek 官方 GitHub 或者 lwfinger 的倉庫拉取 rtw89 源碼在自己當前內核上編譯成 .ko 模塊加載進系統(tǒng)。這條路不需要換內核對系統(tǒng)整體影響小但每次內核更新后模塊需要重新編譯用 DKMS 可以自動化。離線環(huán)境下準備源碼和編譯依賴比準備整個內核包要輕量得多。我建議新手優(yōu)先走第二條路因為它精準打擊只解決網卡問題不波及系統(tǒng)其他部分。如果你需要同時解決很多新硬件問題比如新的核顯、新的聲卡那升級內核可能更劃算。2.2 在有網的機器上準備離線安裝包離線安裝的實際難點在于你需要在一臺能上網的 Ubuntu 20.04 機器上把所有需要的 deb 包拉下來然后再搬運到目標機器上。這里有個特別需要注意的原則裝飾包的版本要和目標機器的系統(tǒng)版本一致因為內核頭文件和 gcc 版本直接影響編譯結果。最穩(wěn)妥的做法就是用一臺同樣裝 Ubuntu 20.04 的機器作為打包機。需要準備的內容分三類。第一類是編譯工具鏈。主要是 gcc、make、build-essential。你可以用 apt download 的方式逐個下載也可以用更省事的方法apt-get download build-essential gcc make dkmsbuild-essential 在 Ubuntu 里是一個 meta 包它依賴 gcc、g、make 等但你 apt-get download 只是下載它本身并不會自動把依賴也下載下來。所以你需要用另一種方式apt-cache depends build-essential通過這個命令查看它的依賴樹然后手動把依賴列出來再逐個 apt-get download。這個過程有點繁瑣。更推薦的做法是使用 apt 的--download-only參數(shù)配合apt-get install --reinstallmkdir /tmp/netinstall cd /tmp/netinstall apt-get install --reinstall --download-only build-essential dkms這樣 apt 會把 build-essential 和它的所有依賴包全部下載到 /var/cache/apt/archives 目錄下你直接把這個目錄里的 .deb 文件全部拷走就行。第二類是內核頭文件和內核模塊頭文件。編譯內核模塊必須用到當前內核的 headers版本必須完全匹配apt-get install --reinstall --download-only linux-headers-$(uname -r)注意uname -r必須在目標機器上執(zhí)行因為頭和頭之間不能混用。如果你在打包機上執(zhí)行uname -r得到的版本號和目標機器不同編譯出來的模塊可能加載不上。第三類是驅動源碼。你可以從 GitHub 上下載源碼包這里推薦兩個源Realtek 官方 GitHub 倉庫https://github.com/rtw88/rtw89 這個是內核上游驅動的源代碼鏡像更接近 mainlinelwfinger/rtw89 倉庫https://github.com/lwfinger/rtw89 維護很活躍修復了很多新內核的兼容問題支持范圍更廣我個人的建議是用 lwfinger 的版本因為它對 Ubuntu 20.04 的適配性更好而且它自帶 DKMS 支持的配置文件可以直接安裝成內核模塊管理后續(xù)內核升級時能自動重編譯。2.3 如何用 U 盤/移動硬盤把環(huán)境搬過去有了這些包之后你需要做一個離線安裝工具箱。這里有個小技巧不要直接把 deb 文件放在 U 盤根目錄就完事了建議按目錄分類整理/offline-tool/ ├── drv/ # 驅動源碼壓縮包 ├── debs/ # 所有依賴的 deb 包 ├── scripts/ # 一鍵安裝腳本 └── README.md # 安裝說明這么做的原因是目標機器上的環(huán)境可能比較干凈你可能需要連續(xù)執(zhí)行多個 dpkg 命令如果文件全堆在一起很容易漏裝某個依賴。README 里把安裝順序寫好按照順序來能少踩很多坑。還有一個細節(jié)U 盤的文件系統(tǒng)建議用 exFAT 或者 ext4盡量不要用 NTFS因為一些 Linux 發(fā)行版對 NTFS 的掛載需要額外驅動雖然 Ubuntu 20.04 默認裝了 ntfs-3g但保不齊你的目標機器環(huán)境更精簡。另外U 盤里放一個md5sums.txt方便校驗文件是否完整拷貝尤其 deb 包這種二進制文件拷貝過程中損壞一個字節(jié)都可能讓 dpkg 安裝時報錯。3. 驅動源碼的獲取與選擇3.1 官方倉庫、第三方倉庫和發(fā)行版補丁的區(qū)別Realtek 驅動的源碼在互聯(lián)網上有好幾個版本這是新手最容易迷惑的地方。簡單區(qū)分一下官方 GitHub 上的 rtw89 是 Linux 內核模塊的上游源代碼它和 Linux mainline 內核同步維護。如果你用的是比較新的內核比如 5.15直接用官方倉庫的代碼往往就能編譯通過。但如果你用的還是較老的內核比如 5.4官方倉庫的代碼可能會因為 API 變化而編譯失敗需要你在編譯時手動做一些適配。lwfinger 的倉庫維護目標就更加向下兼容。這個維護者長期做 Realtek 網卡驅動的移植和兼容工作他的倉庫代碼通常會兼容較老的內核 API也會附帶更完整的固件文件加載邏輯。對 Ubuntu 20.04 這種老系統(tǒng)我優(yōu)先推薦 lwfinger 的版本。還有一種是發(fā)行版補丁比如 Debian 的 linux firmware 包或 Ubuntu 的 linux-firmware 包。但要注意固件文件和驅動源碼是兩回事。很多時候你缺的不是驅動代碼而是固件文件。比如你在 dmesg 里看到rtw89_8852be: Direct firmware load for rtw89/rtw8852be_fw.bin failed這就說明驅動模塊在嘗試加載固件時沒找到文件。這種情況你需要裝 linux-firmware 或者單獨下載固件文件放到 /lib/firmware/rtw89/ 目錄。恰恰這個細節(jié)會導致你明明編譯成功了驅動模塊但網卡還是無法工作。3.2 具體怎么下載和校驗如果你在有網的機器上可以用 git clone 拉源碼git clone https://github.com/lwfinger/rtw89.git然后打包tar czf rtw89.tar.gz rtw89/如果你用的 GitHub 下載 zip 的網頁方式記得在下載時選擇對應分支通常 master 或者 main 就行。另外強烈建議下載后生成一下源碼包的哈希值sha256sum rtw89.tar.gz把哈希值寫進 README到了目標機器上可以先校驗一遍防止拷過去之后文件損壞。雖然這個概率很低但離線環(huán)境下排查問題的代價極高提前花十秒校驗一下很劃算。還有一件事要注意確認目標機器是否缺少固件文件。這個在離線環(huán)境下尤其重要。你可以到 linux-firmware 的 Git 倉庫里https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/找到 rtw89 目錄下的 .bin 文件手動放到目標機器的 /lib/firmware/rtw89/ 下。如果你用的驅動源碼包比較新它可能自帶 copy-firmware 腳本或者文檔說明仔細看一下 README。4. 依賴解決的完整實戰(zhàn)從打包到落地4.1 離線依賴安裝的兩種方法對比到了目標機器上安裝 deb 包一般有兩種方式。一種是直接用 dpkgsudo dpkg -i /path/to/offline-tool/debs/*.deb但 dpkg 不會自動處理依賴關系如果安裝順序不對它會提示依賴問題。所以更推薦用另一種方式sudo apt install /path/to/offline-tool/debs/*.debapt 會讀取這些本地 deb 文件的依賴信息并嘗試從系統(tǒng)已有的包包括你手動放進來的這些 deb中滿足依賴。只要 debs 目錄里的包足夠完整apt 就能自己理清順序全部裝好。這比手動排列 dpkg 命令要省心太多。如果你下載了很多包但不確定是否完整可以用這個簡單方法檢查dpkg-deb -I /path/to/package.deb | grep Depends:看看某個 deb 的依賴項然后和 debs 目錄列表比對缺哪個就去補哪個。4.2 安裝驅動源碼并編譯假設你已經把 rtw89 源碼解壓到了目標機器的 home 目錄接著進入源碼目錄先看一下 README 或者 Makefile 文件開頭的注釋確認編譯步驟。通常這個倉庫的編譯流程是make sudo make install在動手之前先執(zhí)行一下make clean這個命令不是必須的但如果你的源碼包是從別處拷貝來的遇到了什么奇怪的編譯錯誤先 clean 一下可以排除緩存殘留問題。編譯過程中你可能遇到的第一個報錯是缺少內核頭文件make[1]: *** /lib/modules/5.4.0-XXX-generic/build: 沒有那個文件或目錄這就說明內核頭文件沒裝?;氐?debs 目錄找到 linux-headers-$(uname -r) 和 linux-headers-$(uname -r | cut -d- -f1)-common 等包安裝上去。安裝完后再執(zhí)行一下ls /lib/modules/$(uname -r)/build如果能正常列出內容就說明頭文件目錄就緒了。編譯命令跑完后會生成 .ko 文件。用 make install 把它安裝到 /lib/modules/$(uname -r)/ 下面然后執(zhí)行sudo depmod -a sudo modprobe rtw89_pcidepmod 是更新模塊依賴關系modprobe 是加載模塊。如果加載成功再次執(zhí)行l(wèi)spci -nnk | grep -A 3 02:00.0這時應該能看到 Kernel driver in use: rtw89_pci 了。4.3 DKMS 與開機自動加載的設置到這里驅動雖然裝上了但還沒完。如果你直接重啟可能驅動模塊會不見因為 modprobe 只是臨時的除非系統(tǒng)啟動時會自動加載這個模塊。有兩種方式保證開機自動加載。第一種是手動配置。把 rtw89_pci 寫入 /etc/modulesecho rtw89_pci | sudo tee -a /etc/modules這樣每次啟動時內核會嘗試加載這個模塊。第二種是更優(yōu)雅的 DKMS 方式。DKMS 的全稱是 Dynamic Kernel Module Support它可以管理外部內核模塊的安裝并且在內核升級時自動重新編譯。這樣你就不用擔心以后系統(tǒng)更新內核導致驅動失效的問題。安裝 DKMS 和內核頭文件sudo apt install dkms linux-headers-$(uname -r)然后進入源碼目錄執(zhí)行sudo dkms add . sudo dkms build -m rtw89 -v 1.0 sudo dkms install -m rtw89 -v 1.0其中-v 1.0的版本號要根據(jù)源碼里的 dkms.conf 文件來確定。你可以在 dkms.conf 里看到這樣一行PACKAGE_VERSION1.0把這個版本號抄下來替換進命令即可。DKMS 安裝成功后它會自動注冊模塊到系統(tǒng)啟動流程里以后內核升級也不會丟。強烈建議用這種方式。關于固件的補充步驟驅動模塊可以加載成功不代表 WiFi 就能正常工作。如果你發(fā)現(xiàn)模塊加載正常但ip link里沒有 wlan0 接口多半是固件缺失。確認方法sudo dmesg | grep rtw89如果看到 firmware 相關的報錯就去 linux-firmware 倉庫下載 rtw89 固件文件。具體需要三個文件rtw8852be_fw.bin、rtw8852b_table.bin、rtw8852b_fw.bin具體名稱以驅動源碼要求為準。把它們放到 /lib/firmware/rtw89/ 目錄然后重新加載模塊sudo rmmod rtw89_pci sudo modprobe rtw89_pci這時再查 dmesg應該能看到固件加載成功的日志。5. 常見問題與排查技巧實錄5.1 編譯報錯速查表我把自己和網友實際遇到過的編譯問題整理成了一張表按出現(xiàn)頻率排了個序報錯信息原因解決方式/lib/modules/.../build 不存在缺少內核頭文件安裝 linux-headers-$(uname -r)gcc: 未找到命令缺少編譯工具鏈安裝 build-essential函數(shù)未聲明 / 隱式聲明內核 API 版本太老源碼不兼容換 lwfinger 的 rtw89 版本或換新內核undefined reference to ...內核配置缺少某些符號檢查內核 config開啟 CONFIG_CFG80211 和 CONFIG_MAC80211權限不足非 root 編譯sudo make或用 root 用戶操作make: *** 沒有規(guī)則可以創(chuàng)建目標 modules沒有進入源碼根目錄cd 到源碼目錄再執(zhí)行 make5.2 CONFIG_CFG80211 和 CONFIG_MAC80211 是什么有些朋友編譯時遇到undefined reference或者unknown symbol原因在于內核配置關閉了無線網絡框架相關的選項。RTW89 驅動依賴內核的 cfg80211 和 mac80211 子系統(tǒng)這兩個是 Linux 無線網絡的基礎框架。如果沒有這些配置項驅動代碼里引用的函數(shù)符號就找不到。檢查方法grep CONFIG_CFG80211 /boot/config-$(uname -r) grep CONFIG_MAC80211 /boot/config-$(uname -r)如果結果顯示# CONFIG_CFG80211 is not set說明內核沒啟用無線框架。這種情況很少見因為大多數(shù)發(fā)行版內核都啟用了這些選項。如果你用的精簡內核或者自己編譯的內核就需要注意這個點。解決方案一般不是去重編內核那太痛苦了而是換一個發(fā)行版提供的標準內核比如 Ubuntu 的 generic 內核。在離線環(huán)境下你需要額外準備 linux-image-generic 和匹配的 linux-modules 包。5.3 WiFi 圖標不顯示但模塊已加載模塊加載成功后右上角的網絡圖標不顯示先不要急著懷疑驅動。按順序排查執(zhí)行ip link看有沒有 wlan0 或者 wlp2s0 接口。有接口但處于 DOWN 狀態(tài)執(zhí)行sudo ip link set wlan0 up。如果提示 RTNETLINK answers: Operation not possible due to RF-kill說明無線開關被硬件禁用了。執(zhí)行rfkill list查看如果是 soft block可以用rfkill unblock wifi解除。如果接口都正常檢查 NetworkManager 是否在運行systemctl status NetworkManager。有些精簡系統(tǒng)用的是 systemd-networkd 或其他網絡管理器需要你手動用 nmcli 連接 WiFi。我之前遇到過一種情況驅動和固件都沒問題接口也出現(xiàn)了但 NetworkManager 一直不顯示 WiFi 列表。最后發(fā)現(xiàn)是 NetworkManager 沒有 wifi 后端權限把它加入 netdev 用戶組就解決了sudo usermod -a -G netdev $USER這個坑比較冷門但也值得記錄一下。5.4 模塊已加載但搜索不到 WiFi 信號這種情況大概率是固件版本和驅動版本不匹配。你可能從 A 地方下載了驅動源碼從 B 地方下載了固件兩者版本不一致表現(xiàn)出來就是能掃描到零個 AP或者能掃到但連不上、連上就掉線。解決辦法是把驅動源碼自帶的固件一般在 firmware 子目錄下復制到 /lib/firmware/rtw89/確保固件和驅動來自同一份源碼包。還有一個容易被忽略的點WiFi 6 網卡默認啟用了 802.11ax 模式部分老路由器對這個模式兼容性不好導致連接不穩(wěn)定。可以嘗試禁用 802.11axsudo modprobe rtw89_pci disable_11ax1如果確認有效就把它寫入 /etc/modprobe.d/rtw89.confoptions rtw89_pci disable_11ax1這個參數(shù)在部分型號的老驅動里沒有可以先通過modinfo rtw89_pci查看可用參數(shù)列表。5.5 沒有有網打包機時的備用方案最后聊一個現(xiàn)實問題如果你身邊壓根沒有第二臺能上網的 Ubuntu 機器怎么破方案一用 U 盤啟動一個 Live 系統(tǒng)。下載 Ubuntu Desktop 的 ISO 文件寫入 U 盤然后在 U 盤啟動的 Live 環(huán)境里聯(lián)網下載依賴包再把 deb 包打包放到硬盤分區(qū)里。前提是你的筆記本在這個 Live 環(huán)境里能識別有線網卡或者能通過手機 USB 共享網絡。方案二手機 USB 網絡共享。對手機接入電腦開啟USB 網絡共享Ubuntu 系統(tǒng)一般會自動識別為一個有線網卡接口rndis_host 或者 cdc_ether這樣你就能在目標機器上直接聯(lián)網了。這個方案很多老手都在用不只是裝驅動時好用任何斷網救援場景都能用上強烈建議掌握。操作步驟是把手機用 USB 線連上電腦手機端設置里開啟USB 網絡共享Ubuntu 的 NetworkManager 一般會自動彈出一個新連接幾分鐘內搞定網絡。方案三如果你手頭有樹莓派或者其他 Linux 小主機可以把它們當作下載機在它們上下載 deb 包再拷貝到目標機器。但要提醒一下下載包的機器架構不同會導致 deb 包不通用。X86 機器上要下載 amd64 架構的包ARM 樹莓派上下載的是 arm64 架構不能混用。所以更好的辦法是直接用手機 USB 共享網絡只要目標機器能上網所有依賴都能用 apt get 直接裝省去手動下載依賴的麻煩。6. 安裝完成后的驗證與系統(tǒng)加固6.1 驗證網卡是否真正可用驅動加載、固件就位、接口出現(xiàn)這只是第一步。真正驗證網卡可用要連上 WiFi 做一次斷網重連測試。在終端里用 nmcli 連接nmcli dev wifi list nmcli dev wifi connect 你的SSID password 你的密碼如果連接成功用 ping 測試穩(wěn)定性ping -c 10 223.5.5.5看丟包率和延遲如果都正常說明網卡硬件和驅動工作狀態(tài)良好。再用 iperf3 測一下實際吞吐能到幾百 Mbps 基本就沒什么問題了。如果你發(fā)現(xiàn)連接后頻繁斷流可以參考前面提到的 disable_11ax1 參數(shù)或者換一個無線信道試試。6.2 內核升級后驅動丟失的預防DKMS 已經能解決 90% 的內核升級問題但有時候內核版本跨度太大比如從 5.4 升到 5.15DKMS 重編譯也可能失敗。這時你需要檢查 /var/lib/dkms/rtw89/ 目錄下的 build 日志看看編譯失敗的具體原因一般是內核 API 變化導致等待驅動倉庫更新即可。另外還有一個小技巧在 Ubuntu 的 unattended-upgrades自動安全更新配置里可以排除內核更新包避免系統(tǒng)半夜自動升級內核導致驅動失效。這個配置在 /etc/apt/apt.conf.d/50unattended-upgrades 里找到 Package-Blacklist 部分加上linux-image-*; linux-headers-*; linux-modules-*;這樣內核更新不會被自動執(zhí)行想升級時手動操作可以更好地控制驅動兼容性。6.3 備份自己的離線驅動部署包既然已經安裝成功建議留一個備份。把 U 盤里的 debs 目錄和驅動源碼再打一個包存到本地磁盤的某個目錄里標注好日期、內核版本、驅動版本。以后如果再遇到另一臺同型號網卡的機器或者系統(tǒng)需要重裝直接照著這個流程走一遍就能快速恢復。我在實際工作里就吃過虧裝完一臺機器后沒留備份過了幾個月系統(tǒng)崩了重裝又遇到同樣的驅動問題但當時已經忘了當初具體下載了哪個倉庫的哪個 commit重新折騰了好幾個小時。后來我把離線部署包固定放在 /srv/offline-packages/ 目錄并且寫了一鍵安裝腳本從那以后再也沒在這個問題上浪費時間。結尾說點實際感受折騰 Linux 無線網卡驅動這個事情很多新手容易陷入一個誤區(qū)就是盲目試各種教程里的命令結果越試越亂。我的體會是任何驅動安裝類的問題都要先花時間把硬件 ID - 驅動模塊 - 固件文件 - 內核配置這條鏈路看清楚知道當前卡在哪一環(huán)再去針對性解決。尤其是離線環(huán)境準備工作做得越細踩的坑就越少。最后再分享一個小技巧如果你以后看到內核日志里報 firmware 加載失敗但又不知道固件文件應該叫什么名字可以使用這個命令modinfo /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtw89/rtw89_pci.komodinfo 輸出的信息里通常會列出固件文件名。比如 fw: rtw89/rtw8852be_fw.bin這個就是你需要放到 /lib/firmware/rtw89/ 目錄里的文件名。很多驅動源碼的 README 里沒寫清楚固件文件名用這個方法一查就清楚了。準備離線包之前先查詢一遍就能把固件一次性準備好避免到了目標機器上才發(fā)現(xiàn)缺文件的尷尬。