ILP32Wrt
以 OpenWrt 25.12.6 為基礎的路由器韌體,使用者空間是 AArch64 ILP32(musl 1.2.5), kernel 支援 ILP32。
這是什麼
- 只有使用者空間是 ILP32;kernel、TF-A、U-Boot 和 GRUB 仍是 64 位元。
- 套件架構名稱會多一個
_ilp32後綴(例如aarch64_cortex-a53_ilp32),ILP32 和 LP64 的套件不會混在一起。 - 在有支援的 target 上,可以同時開啟指標驗證、BTI 和 SVE。
支援的機型
| Target | 狀態 |
|---|---|
armsr/armv8(QEMU、虛擬機) | 已在 QEMU 測試 |
mediatek/filogic(OpenWrt One) | 已在實機測試,包含 ILP32 與 LP64 之間互相 sysupgrade |
bcm27xx/bcm2710(Raspberry Pi 3 B+) | 已在實機測試:開機、有線網路、Wi-Fi、LuCI(尚未測試出廠韌體刷寫和 sysupgrade) |
其他 mediatek/filogic 路由器、Raspberry Pi 4 和 5 | 已編出 image,尚未在實機測試 |
| 其他 target(高通、Rockchip…) | 尚未編譯 |
ILP32Wrt 多做了什麼
除了 ILP32 的 kernel、musl 和工具鏈之外,ILP32Wrt 從下一版(v25.12.6-ilp32.3)起,會用打上我們 patch 的 clang 22 編譯最常用的套件(ucode、lucihttp、json-c),其他套件仍用 GCC 14.3。這些 patch 會把位址偏移合併進定址模式, 並避免把指標運算擴成 64 位元,所以這些套件在 ILP32 上跑得更快。
| OpenWrt One,同一份原始碼 | LP64 (GCC) | ILP32 (GCC) | ILP32Wrt (熱門套件用 clang) |
|---|---|---|---|
| 重新載入 200 條防火牆規則 | 2.58 秒 | 2.84 秒 (+10%) | 2.63 秒 (+2%) |
| LuCI 20 次請求 | 1.73 秒 | 1.81 秒 (+5%) | 1.76 秒 (+2%) |
| 使用者空間記憶體(PSS) | 38.3 MB | 28.9 MB | 28.9 MB (-24.6%) |
比較的對象是同一份原始碼用 GCC 14.3 編成的 LP64 映像,不是官方 OpenWrt 的映像。 LP64 用 clang 編的版本還沒量過。自己編映像時,也可以用 clang 編其他套件,例如 python3。
原始碼與 image
原始碼和編譯說明:github.com/ilp32-a64/openwrt-ilp32。 image 之後會以實驗性的 pre-release 發佈在那裡;目前還沒有套件庫。
回報你的機型
在你的設備上試過了嗎?不論能不能開機,都歡迎在 repo 裡用機型回報表單開一個 issue。
ILP32Wrt 與 OpenWrt 無關聯。OpenWrt 是 Software Freedom Conservancy(SFC)的註冊商標, 詳見 openwrt.org。