1. 為什麼是 OpenWrt?
許多 MaxLinear 網通設備的韌體皆以 OpenWrt 為基礎建立,因此掌握 OpenWrt 的操作方式,對於韌體建置、系統客製化與問題除錯都十分重要。本文將以 OpenWrt SDK 的使用流程為核心進行說明,內容不僅適用於 MaxLinear 平台,也可作為其他 OpenWrt-based 網通設備的開發參考。
下面會開始介紹如何使用 OpenWrt,示範開發板為 Raspberry Pi4。
2. 準備編譯環境
OpenWrt 通常會在 Linux 環境下編譯,例如 Ubuntu 或 Docker container。
sudo apt update
sudo apt install build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib gettext git libncurses-dev \
libssl-dev python3-distutils rsync unzip zlib1g-dev file wget不同 OpenWrt 版本可能會有不同套件需求,可以參考官方文件 (OpenWrt)
3. 下載 OpenWrt 原始碼
git clone https://github.com/openwrt/openwrt.git
cd openwrt在實際開發中,網通廠或晶片商提供的 SDK,通常不是完全原生的 OpenWrt,而是以 OpenWrt 為基礎,加入晶片商已整合好的 BSP、Ethernet、Wi-Fi、驅動與平台設定後形成的版本。
因此,開發者拿到的多半是一套 OpenWrt-based SDK。本文不會深入說明 BSP 或各項硬體功能的整合細節。
4. 更新 feeds
OpenWrt 的套件來源透過 feeds 管理。下載原始碼後,需要先執行:
./scripts/feeds update -a
./scripts/feeds install -a
5. 選擇目標平台 (Optional)
由於廠商提供的 SDK 會設定好 .config,因此這一步通常是不需要的,但目前使用的是原生 OpenWrt,仍需要選擇 Pi4 相關的設定。
進入設定選單:
make menuconfig
Target System → Broadcom BCM27xx
Subtarget → BCM2711 boards (64 bit)
Target Profile → Raspberry Pi 4B/400/CM4
6. 開始編譯
make -j$(nproc)
如果遇到錯誤,可以用這個指令去顯示編譯的訊息,由此得知錯誤原因:
make -j1 V=s
7. 韌體位置
編譯完成後,輸出檔案通常會放在:
bin/targets/
以 Pi4 來說,位置就在:
bin/targets/bcm27xx/bcm2711
進去這個資料夾後,會看到需多 img,其中我們要拿來燒錄的是:
openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img.gz
常見 image 類型可以這樣理解:
| 類型 | 用途 |
|---|---|
| factory image | 通常用於從原廠韌體第一次刷入 OpenWrt |
| sysupgrade image | 用於已經是 OpenWrt 系統的升級 |
| initramfs image | 常用於開發階段,透過 TFTP 或 RAM boot 測試 |
| ext4 image | 常見於 x86、Raspberry Pi 這類平台 |
但實際上,網通廠會有各自的命名方式,因此這個類型參考即可。
8. 燒錄韌體
燒錄可以選擇使用 balenaEtcher 或 Raspberry Pi Imager,這邊會使用 balenaEtcher 作為示範。
選擇燒錄檔案的時候,可以不用特地解壓縮 gz 檔,balenaEtcher 會直接處理,
接著選擇要燒錄的儲存裝置 (SD Card),就可以開始燒錄了。

9. UART 開機
硬體位置可以參考此圖 (Simple Guide to the Raspberry Pi GPIO Header)

此外還需要修改 SD Card 上的 config.txt

修改如下:
[all]
# Place your custom settings here.
enable_uart=1
完成後就可以接上 UART,開機進入系統了

10. 結語
總結來說,OpenWrt 是網通設備韌體開發中常見架構。無論是使用 MaxLinear 平台,或是其他晶片商提供的 SDK,
熟悉基本的建置流程與設定方式,都有利於後續的開發與除錯。
