771 字
4 分钟
MT7987 (AirPi E87N) eMMC U-Boot 刷写指南
MT7987(AirPi E87N)在 eMMC 架构下刷入第三方 U-Boot 时,需要分别处理 BL2 与 FIP 两个镜像。这里记录两种实战方式:最简便的系统内直接刷写,以及最稳妥的 TTL + Ramboot 内存试跑。
刷写前必备前置条件
- 底层已备份:确保 U 盘或本地电脑中留有出厂系统的
mmcblk0boot0.bin、mmcblk0boot1.bin以及mmcblk0p1~p4单分区镜像。 - 准备刷写文件:
bl2.bin:第一阶段引导,写入硬件 Boot 分区fip.bin:BL31 + U-Boot + 设备树,写入 GPT 主存储的分区 3
方案一:系统内直接刷写(无需拆机与串口线)
适合板子已处于正常运行的 OpenWrt/Linux 系统环境。
步骤 1:挂载并准备固件
将存放有 bl2.bin 和 fip.bin 的 U 盘插入设备并进入挂载目录:
cd /mnt/sda1ls -lh bl2.bin fip.bin步骤 2:解锁并写入 BL2
Linux 内核为了保护硬件启动区,默认对 mmcblk0boot0 设置了强制只读(RO)。必须先解除只读才能执行写入:
# 1. 解除 boot0 的强制只读锁定echo 0 > /sys/block/mmcblk0boot0/force_ro
# 2. 验证是否解锁成功(输出应为 0)cat /sys/block/mmcblk0boot0/force_ro
# 3. 写入新 BL2 到硬件 boot0dd if=bl2.bin of=/dev/mmcblk0boot0 bs=4k
# 4. 重新开启写保护echo 1 > /sys/block/mmcblk0boot0/force_ro步骤 3:写入 FIP 主引导镜像
FIP 镜像存放在主存储的 GPT p3(大小 2M)分区中,直接写入即可:
dd if=fip.bin of=/dev/mmcblk0p3 bs=4k步骤 4:清空旧 U-Boot 环境变量(关键避坑)
更换第三方 U-Boot 后,旧的启动命令(bootcmd)和引导参数经常会导致无法开机或死循环。直接擦除 p1(512K 环境变量分区),让新 U-Boot 在开机时自动载入自身的安全预设:
dd if=/dev/zero of=/dev/mmcblk0p1 bs=512 count=1024步骤 5:同步落盘并重启
syncreboot方案二:TTL + Ramboot 试跑刷写(最稳妥标准方案)
如果手头有 USB-TTL 串口转换器(3.3V 电平,波特率 115200),可通过内存无损试跑,验证通过后再进行硬件写入。
步骤 1:内存注入试跑(完全不改写物理 Flash)
电脑端安装 mtk_uartboot 工具并连接开发板 TTL 串口(RX、TX、GND):
mtk_uartboot -s /dev/ttyUSB0 -p ramboot_bl2.bin -f fip.bin执行命令后给板子上电,BootROM 会直接将固件载入 DDR 内存运行。
步骤 2:Web 页面固化
- 网线直连电脑与板卡,浏览器访问
http://192.168.1.1或http://failsafe.lan。 - 在 Web 控制台中选择固件更新功能,分别上传并刷入正式版
bl2.bin和fip.bin完成硬件固化。
日常使用:进入 U-Boot Failsafe Web 界面
新版 U-Boot(如 Yuzhii 分支)自带 DHCP 服务,操作电脑无需手动配置静态 IP:
- 设备断电。
- 按住板上的 Reset 键(或对应 GPIO 按键),插上电源。
- 等待指示灯快闪或常亮(约 5 秒)后松开按键。
- 用网线直连电脑,电脑会自动获取到
192.168.1.x段 IP。 - 浏览器访问
http://192.168.1.1,即可进入 Failsafe 救砖控制台进行固件升级、分区备份或恢复操作。
相关文章
MT7987 (AirPi E87N) eMMC U-Boot 刷写指南
https://iiii.fun/posts/openwrt/e87n/mt7987-e87n-uboot-flash/