LS1043A NH03 OpenWrt 笔记
当前方案概览
- 板级硬件:XSPEED NH03,NXP Layerscape LS1043A,ARMv8。
- 板级 target/profile:
layerscape/armv8_64b/fsl_nh03(显示名称为XSPEED NH03)。 - 个人构建配置:
configs/jungle.config(普通版)和configs/jungle-debug.config(调试版)。 - 当前设备优先从 SATA SSD 启动:内核与 DTB 放在
sda1,根系统位于sda2;SATA 读取失败时回退到 eMMC 的第一、第二分区。 - 根系统生成
rootfs.tar.gz,解压到已经扩容的 ext4 分区,避免每次写入 ext4 镜像后重新扩容。 - U-Boot 从第一分区读取
Image和fsl-nh03-sdk.dtb。
板级代码负责 NH03 的硬件描述、网口映射、默认 LAN/WAN 端口和板载驱动;个人配置负责要安装的软件包、调试能力、主题以及每台设备的运行参数。不要把 COM12/COM14 的地址或 sing-box 等个人设置写进板级 profile。
板级支持(所有 NH03 构建共享)
见 target/linux/layerscape/。各文件职责如下:
| 内容 | 文件 |
|---|---|
| NH03 设备树、I²C/GPIO、存储和 PHY | target/linux/layerscape/files-6.12/arch/arm64/boot/dts/freescale/fsl-nh03-sdk.dts |
| 板级默认 LAN/WAN 端口 | target/linux/layerscape/base-files/etc/board.d/02_network |
fsl_nh03 镜像 profile 和板载驱动包 |
target/linux/layerscape/image/armv8_64b.mk |
| Layerscape 6.12 平台内核选项 | target/linux/layerscape/armv8_64b/config-6.12 |
以太网与 PHY 映射
NH03 的映射不是标准 LS1043A-RDB 映射:
| Linux 接口 | FMan MAC | PHY | MDIO | 地址 | 用途 |
|---|---|---|---|---|---|
| eth0 | e0000 | Marvell 88E1545 | fd000 | 4 | LAN/QSGMII |
| eth1 | e2000 | Marvell 88E1545 | fd000 | 5 | LAN/QSGMII |
| eth2 | e4000 | RTL8211F | fc000 | 1 | WAN/RGMII-ID |
| eth3 | e6000 | RTL8211F | fc000 | 3 | LAN/RGMII-ID |
| eth4 | e8000 | Marvell 88E1545 | fd000 | 6 | LAN/QSGMII |
| eth5 | ea000 | Marvell 88E1545 | fd000 | 7 | LAN/QSGMII |
板级 profile
板级 profile 位于:
1 | target/linux/layerscape/image/armv8_64b.mk |
文件中只有一个 NH03
板级设备定义:define Device/fsl_nh03。它只提供 NH03
板载硬件、设备树和可更换 Wi-Fi 模块所需驱动,不包含 Jungle
的软件包选择或设备运行参数。
个人构建配置(Jungle)
个人配置种子位于 configs/,与板级支持分开维护:
| 配置 | 用途 |
|---|---|
configs/jungle.config |
普通版:LuCI、ttyd、sing-box、网络诊断工具和主题包 |
configs/jungle-debug.config |
调试版:包含普通版内容,并额外启用
perf、BPF/eBPF、BTF、FTrace、Kprobe 和 bpftool |
两个种子都选择 layerscape/armv8_64b 下的
fsl_nh03 目标;选择目标是为了生成 NH03
镜像,软件包和调试选项才是个人配置的差异。
自定义主题源码目录也属于个人配置,必须保存在 Git 中:
1 | package/luci-theme/ |
选择主题包并不会自动保存这些未跟踪源码。
编译个人配置
1 | cp configs/jungle-debug.config .config |
简体中文需要在配置种子中启用
CONFIG_LUCI_LANG_zh_Hans=y。LuCI 翻译包是隐藏选项,只写
CONFIG_PACKAGE_luci-i18n-base-zh-cn=y 而未选择语言时,执行
make defconfig 后会被关闭。两份 Jungle
配置已补齐语言选项。
构建后可确认实际配置:
1 | rg '^(CONFIG_LUCI_LANG_zh_Hans|CONFIG_PACKAGE_luci-i18n-base-zh-cn)=' .config |
关键产物:
1 | build_dir\target-aarch64_generic_musl\linux-layerscape_armv8_64b\Image |
U-Boot 启动参数
把 SATA 和 eMMC 分成两个子命令,bootcmd_manual
按顺序先运行 SATA、再运行 eMMC。SATA 成功执行 booti
后不会返回;只有 SATA 加载或启动失败并返回时,才会继续尝试 eMMC:
1 | setenv bootcmd_manual_emmc "mmc dev 0; if ext4load mmc 0:1 0xa0000000 Image && ext4load mmc 0:1 0xb0000000 image-fsl-nh03-sdk.dtb; then setenv bootargs console=ttyS0,115200 earlycon=uart8250,mmio,0x21c0500 root=/dev/mmcblk0p2 rw rootwait; booti 0xa0000000 - 0xb0000000; else echo eMMC boot failed; fi" |
本机只有一块 SATA SSD,AHCI 驱动也已编入内核,因此 SATA
根分区直接使用 /dev/sda2。eMMC 回退分支使用
/dev/mmcblk0p2。如果以后增加其他 SCSI/SATA
磁盘,设备枚举顺序可能变化,此时再改用 PARTUUID 更稳妥。
首次启动
新 DTB 下:
1 | cat /etc/board.json |
首次启动且没有旧 /etc/config/network 时,OpenWrt 会创建
br-lan,LAN 默认地址通常为:
1 | 192.168.1.1/24 |
首次连接优先使用已经验证可 Link Up 的 eth3 或
eth0:
1 | ssh root@192.168.1.1 |
若恢复旧网络配置,COM12 使用 192.168.2.1,COM14 使用
192.168.3.1:
1 | ssh root@192.168.2.1 |
首次登录立即设置密码:
1 | passwd |
手工恢复基础网络
以下命令建议通过串口执行。下面按 COM14 配置为
192.168.3.1;COM12 保持
192.168.2.1。网络重启后原 SSH 会话会断开。
如果不采用板级脚本生成的默认网络配置,先显式创建
br-lan,并把五个 LAN
口加入网桥。下面第一条命令用于兼容全新系统中已有的匿名
br-lan 设备;没有该设备时也不会影响后续创建:
1 | uci -q rename network.@device[0]='br_lan' |
关闭硬件 bypass
先确认驱动和本次启动分配的 GPIO 范围:
1 | dmesg | grep -Ei 'gpio|pca953|pca955|pca957' |
使用 OpenWrt 自带的 gpio_switch
持久化,重启后仍自动输出低电平:
1 | uci set system.bypass='gpio_switch' |
当前管理地址(2026-10-26)
- 电脑:
192.168.10.159/24。 - COM14 的
WAN(
eth2):192.168.10.2/24,上游网关为192.168.10.1。 - COM14 的 LAN:保持
192.168.3.1/24,无需为上游电脑管理访问修改 LAN。 - 从上游电脑连接
COM14:
ssh root@192.168.10.2;LuCI:http://192.168.10.2/。
192.168.2.1 不是此次串口核验到的 COM14
地址,不要用它连接 COM14。 SSH、LuCI、ttyd 的上游来源白名单使用
192.168.10.0/24;K3s API 的来源仅允许电脑
192.168.10.159。 访问路由器自身使用 INPUT 规则(不设置
dest=lan);下面的 wan_ssh_forward 仅用于访问
LAN 内其他主机,不能替代路由器自身的 SSH 放行规则。
手工恢复防火墙
1 | uci show firewall | grep "\.name=" |
手工恢复 ttyd
1 | uci set ttyd.@ttyd[0].command='/bin/login' |
进阶操作
手工恢复 sing-box
先手工创建并检查: 参考hexo_posts代理与 TUN 模式配置.md
1 | /etc/sing-box/config.json |
不要把包含订阅、密码或密钥的配置提交到公开仓库。然后启用服务:
1 | uci set sing-box.main.enabled='1' |
确认 sing-box 已经监听 127.0.0.1:5353 后,再把 dnsmasq
DNS 转发过去:
1 | netstat -lnup | grep ':5353' |
恢复后检查
检查:
1 | ubus call system board |
DTB 调试
反编译仅用于检查生成结果:
1 | dtc -I dtb -O dts -o /tmp/fsl-nh03-sdk.generated.dts fsl-nh03-sdk.dtb |
正式修改始终编辑源码树中的
fsl-nh03-sdk.dts。不要再直接反编译、修改并覆盖唯一的
DTB。
Wi-Fi AP 配置
当前设备的 radio0 是 2.4 GHz 无线网卡,默认 AP
配置已绑定到 lan,但
wireless.default_radio0.disabled='1',因此不会创建无线接口或广播
SSID。
encryption='psk2' 表示仅使用 WPA2-Personal。更推荐使用
sae-mixed(WPA2/WPA3-Personal 混合模式):支持 WPA3
的设备使用 SAE,旧设备仍可使用 WPA2-PSK。
设备已有 radio0、2.4 GHz、信道、AP 模式以及
lan 绑定,无需重复配置。 只需设置
SSID、加密方式、密码并解除禁用。密码建议使用至少 12 位随机字符:
1 | uci set wireless.default_radio0.ssid='替换为SSID' |
检查无线接口、SSID 和客户端关联状态:
1 | ubus call network.wireless status |
正常情况下,radio0 应显示
up: true,interfaces 不再为空,并能看到 AP
接口和配置的 SSID。 无线客户端会接入 lan。COM14 由 LAN DHCP
分配 192.168.3.0/24 网段地址;COM12 仍使用
192.168.2.0/24。
如果 wifi reload 报 SAE/WPA3 不受支持,说明固件中的
wpad/hostapd 版本未包含 SAE 支持。 可以先回退到仅 WPA2-Personal:
1 | uci set wireless.default_radio0.encryption='psk2' |
不要使用 encryption='none',否则会建立无密码热点。
主题替换
outline 的登录界面好看,直接改
1 | echo "{% include('themes/outline/sysauth', { |