2. 固件定制与烧录
任务说明
本案例面向基于MT7628AN SoC的IoT网关硬件(参考板型为LinkIt Smart 7688),完成OpenWrt固件的定制配置、编译与烧录,并在设备上验证系统启动。最终交付物为:一份可烧录的固件镜像、烧录操作步骤、以及系统启动成功的判定方法。
硬件与依赖准备
目标硬件参数:MT7628AN CPU、64MB DDR2 RAM、8MB SPI NOR Flash、一个UART调试串口(波特率57600)。开发主机需安装Ubuntu 20.04/22.04 x86_64,并具备以下依赖包:
sudo apt update
sudo apt install -y build-essential flex bison git gawk \
gettext libncurses5-dev libssl-dev python3-distutils \
unzip zlib1g-dev file wget rsync
获取源码与配置
拉取OpenWrt 21.02分支源码(该分支对MT7628支持成熟稳定):
git clone -b v21.02.7 --depth 1 https://git.openwrt.org/openwrt/openwrt.git
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a
执行交互式配置,选择目标平台:
make menuconfig
在菜单中依次设置:
Target System: MediaTek Ralink MIPS
Subtarget: MT7628 based boards
Target Profile: LinkIt Smart 7688
为保证最小可用IoT网关功能,额外勾选以下软件包(按需,非必需):
LuCI → Collections → luci-ssl(Web管理界面)
Network → SSH → openssh-server(远程登录)
Utilities → busybox(默认已选,保留)
保存退出menuconfig,生成.config文件。
编译固件
执行编译(首次编译需下载工具链与源码包,耗时较长):
make -j$(nproc) V=s
编译完成后,固件输出于bin/targets/ramips/mt7628/目录,关键文件为:
openwrt-21.02.7-ramips-mt7628-linkit_smart_7688-squashfs-sysupgrade.bin
openwrt-21.02.7-ramips-mt7628-linkit_smart_7688-uboot.bin
其中sysupgrade.bin为完整固件镜像(含内核与根文件系统),uboot.bin为Bootloader镜像(仅当U-Boot损坏时烧录)。
烧录到设备
本案例提供两种烧录路径,按设备当前状态选择:
路径A:设备已有可用的U-Boot(推荐)
将设备UART串口连接主机,在U-Boot启动倒计时阶段按1进入固件升级模式。通过TFTP服务器将sysupgrade.bin传输至设备并烧录:
# 在开发主机上启动TFTP服务,将固件置于TFTP根目录
# 设备U-Boot控制台执行:
setenv serverip 192.168.1.100 # 开发主机IP
setenv ipaddr 192.168.1.1 # 设备临时IP
tftp 0x80060000 openwrt-...-sysupgrade.bin
erase 0x9f000000 +0x800000
cp.b 0x80060000 0x9f000000 0x800000
reset
路径B:全新Flash芯片或U-Boot损坏
使用外部SPI编程器(如CH341A)直接烧录uboot.bin到Flash起始地址,然后重新上电,再按路径A完成系统固件烧录。
验证系统启动
烧录完成后,通过UART串口(57600 8N1)连接设备并重新上电,观察启动日志。系统启动成功的判定标准为以下两条同时满足:
- 串口输出中出现
OpenWrt 21.02.7版本标识,且内核完成解压并挂载squashfs根文件系统,无Kernel panic或Oops错误; - 启动流程结束前出现
Please press Enter to activate this console提示,按回车后能进入root@OpenWrt:/#Shell提示符。
进入Shell后执行cat /etc/openwrt_release,输出应包含DISTRIB_RELEASE='21.02.7'和DISTRIB_TARGET='ramips/mt7628',确认固件版本与目标平台匹配。
验证操作与预期输出
完成烧录并上电后,在串口终端中应观察到类似以下启动序列(节选,实际日志因版本微调可能略有差异):
U-Boot 2018.09 (...)
...
[ 0.000000] Linux version 5.4.154 (builder@host) ...
[ 0.580000] CPU: MIPS 24Kc V7.4
...
[ 2.310000] VFS: Mounted root (squashfs filesystem) readonly on device 31:2
...
Please press Enter to activate this console.
[ 4.120000] eth0: link up (100Mbps/Full duplex)
root@OpenWrt:/# cat /etc/openwrt_release
DISTRIB_ID='OpenWrt'
DISTRIB_RELEASE='21.02.7'
DISTRIB_REVISION='r12345-abc123def4'
DISTRIB_TARGET='ramips/mt7628'
DISTRIB_ARCH='mipsel_24kc'
当串口出现root@OpenWrt:/#提示符且上述版本信息与目标平台一致时,判定固件定制、烧录与启动验证全部通过。若启动过程中出现Kernel panic - not syncing或反复重启,则需检查固件镜像与硬件型号是否匹配,以及Flash烧录地址是否正确。