寫在前面, 如果你還沒買, 不要 選這款來當你的 Rpi4 外接 Wifi. 我就是太天真想說都什麼時代了, 應該都有支援吧哈哈然後就搞了一天. 想說裝個驅動有什麼難的, 但找不到照著做就能裝好的範例時還真的沒那麼簡單.
本篇教學的軟硬體環境
Raspberry Pi 4 2GB
Linux raspberrypi 5.10.103-v7l+ #1529 SMP Tue Mar 8 12:24:00 GMT 2022 armv7l GNU/Linux
1. 更新及升級樹莓派
sudo apt-get update -y
sudo apt-get upgrade -y
2. 安裝驅動程式相關工具
sudo apt-get install git bc bison flex libssl-dev make raspberrypi-kernel-headers -y
3. 下載驅動程式原始碼
cd ~
mkdir driver
cd driver
git clone https://github.com/McMCCRU/rtl8188gu.git
cd rtl8188gu
4. 修改 Makefile
找到底下設定
###################### Platform Related #######################
CONFIG_PLATFORM_I386_PC = y
CONFIG_PLATFORM_ARM_RPI = n
將 CONFIG_PLATFORM_I386
設定為 n
將 CONFIG_PLATFORM_ARM_RPI
設定為 y
修改後如下
###################### Platform Related #######################
CONFIG_PLATFORM_I386_PC = n
CONFIG_PLATFORM_ARM_RPI = y
5. 修改 kernel process 的結構 (不處理的話等一下編譯驅動程式會出錯)
執行下列 3 行指令
sudo cp /lib/modules/$(uname -r)/build/arch/arm/Makefile /lib/modules/$(uname -r)/build/arch/arm/Makefile.$(date +%Y%m%d%H%M)
sudo sed -i 's/-msoft-float//' /lib/modules/$(uname -r)/build/arch/arm/Makefile
sudo ln -s /lib/modules/$(uname -r)/build/arch/arm /lib/modules/$(uname -r)/build/arch/armv7l
6. 開始編譯驅動程式
sudo make
(會跑一段時間,可能10~20分鐘但不會超過半小時)
7. 安裝驅動程式
依序執行下列指令
sudo make install
sudo depmod -a
sudo modprobe 8188gu
8. 檢查 usb 裝置
執行指令
lsusb
根據目前連接的 USB 裝置數量及種類,內容會有不同,我的輸出內容如下
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 007: ID 0bda:1a2b Realtek Semiconductor Corp.
Bus 001 Device 004: ID 045e:0750 Microsoft Corp. Wired Keyboard 600
Bus 001 Device 003: ID 192f:0916 Avago Technologies, Pte.
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ID 0bda:1a2b 就是 N150UA,0bda 是廠商代號,1a2b 是產品代號。1a2b 代表目前是USB磁碟模式,要輸入指令切換
9. 切換 USB 模式
執行指令
sudo usb_modeswitch -KW -v 0bda -p 1a2b
再次檢查剛剛的 "Bus 001 Device 007: ID 0bda:1a2b Realtek Semiconductor Corp."
ID 應該會變更為 0bda:2005 ,此時網卡就已經啟動了
10. 檢查網卡
ifconfig
iwconfig
這兩個指令如果可以看到 wlan0 及 wlan1 就是成功了。
wlan0 是 RPI 內建的無線網卡, wlan1 就是你剛剛設定的。
但因為 N150UA 預設模式就是 USB 磁碟,每當你重新開機或重新拔插,就要再次執行 usb_modeswitch
。
如果 Wifi USB 固定接在機器上,可以自己寫一個 bash 開機時自動執行,但依然無法避免重新拔插後要再執行 usb_modeswitch
的問題。如果想要一勞永逸的話可以進行下一步。
11. 增加 USB 裝置規則
編輯規則檔
sudo nano /lib/udev/rules.d/40-usb_modeswitch.rules
在 LABEL="modeswitch_rules_end"
這行之前增加下列指令
# Realtek 8188GU Wifi USB
ATTR{idVendor}=="0bda", ATTR{idProduct}=="1a2b", RUN+="/usr/sbin/usb_modeswitch -K -v 0bda -p 1a2b"
完成後重開機, 開機後使用 lsusb
或 ifconfig
指令檢查是否成功切換模式
Realtek Semiconductor Corp. 的 ID 如果是 0bda:2005
或是 wlan0 、 wlan1 都同時存在,就是成功。
Ref.
[Github] rtl8188gu 驅動程式原始碼
rtl8188gu網卡驅動安裝筆記
RTL8811CU/RTL8821CU USB网卡驱动安装 树莓派/工控机 Ubuntu18/20
Linux安装无线网卡驱动通用方法
Automatically use usb_modeswitch for Wifi USB
The USB ID Repository