ILP32Wrt
基于 OpenWrt 25.12.6 的路由器固件,用户空间为 AArch64 ILP32(musl 1.2.5), 内核支持 ILP32。
这是什么
- 只有用户空间是 ILP32;内核、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 | 已构建镜像,尚未在实机测试 |
| 其他 target(高通、Rockchip…) | 尚未构建 |
ILP32Wrt 多做了什么
除了 ILP32 的内核、musl 和工具链,ILP32Wrt 从下一版(v25.12.6-ilp32.3)起,会用打上我们补丁的 clang 22 编译最常用的软件包(ucode、lucihttp、json-c),其他软件包仍用 GCC 14.3。这些补丁把地址偏移合并进寻址模式, 并避免把指针运算扩展为 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。
源代码与镜像
源代码和编译说明:github.com/ilp32-a64/openwrt-ilp32。 镜像之后会以实验性的 pre-release 发布在那里;目前还没有软件源。
反馈你的设备
在你的设备上试过了吗?无论能否启动,都欢迎在仓库中使用设备反馈表单提交 issue。
ILP32Wrt 与 OpenWrt 无关联。OpenWrt 是 Software Freedom Conservancy(SFC)的注册商标, 详见 openwrt.org。