4、系统镜像烧录:制作SD卡或eMMC启动盘,烧录Linux系统镜像,验证系统启动

算能BM1684/BM1688盒子(如SE5、SM5系列或第三方载板)出厂时通常不带系统或仅带测试固件,开发者拿到的第一项硬核任务就是为板卡制作可启动的系统盘。这一环节看似只是“把镜像写进存储介质”,实则涉及启动模式选择、镜像格式匹配、烧录工具链、校验机制和串口/网口验证等多个关键决策点。如果烧录方式不当,轻则系统无法启动,重则损坏eMMC引导分区或导致文件系统不可恢复。本章将围绕SD卡与eMMC两种启动介质的烧录全流程展开,从原理到实操,从常见误区到排障案例,帮助你在第一次上电前就把启动链路打通。

BM1684/BM1688 系统镜像烧录与启动验证链路 镜像获取与校验 官方/定制Linux镜像 烧录工具选择 balenaEtcher / dd / rkdeveloptool 目标介质 SD卡 / eMMC / USB存储 烧录动作 写入镜像 → 校验哈希 → 弹出介质 启动模式配置 拨码开关 / 跳线 / 烧录eMMC时需进入MaskROM模式 启动验证 串口日志 / IP获取 / SSH登录 / NPU状态 排障反馈 启动失败→检查介质/模式/镜像 关键决策点:镜像格式(.img/.raw)、烧录工具、启动介质、验证手段

上图展示了从镜像准备到启动验证的完整链路。在实际操作中,开发者需要根据手中盒子型号(BM1684或BM1688)、存储介质类型(SD卡或eMMC)以及宿主机操作系统(Linux/macOS/Windows)来选择不同的烧录路径。下面我们将分模块深入讲解。

4.1 核心原理:启动介质与镜像格式

BM1684/BM1688盒子通常支持从SD卡、eMMC或USB存储启动。启动时,芯片内部的BootROM会按照预设顺序扫描启动介质,找到合法的引导头后加载U-Boot,再由U-Boot引导内核。对于开发者而言,最常用的两种方式为:

  • SD卡启动:适合开发调试阶段,镜像可随时更换,不影响板载eMMC。缺点是SD卡读写速度有限,且长期运行可能因供电不稳导致数据损坏。
  • eMMC启动:适合量产或稳定运行场景,读写速度快,可靠性高。但烧录eMMC需要进入MaskROM模式(或使用专用烧录工具),操作不当可能变砖。

镜像格式方面,算能官方提供的Linux镜像通常为.img或.raw格式,内部包含分区表、U-Boot、内核、设备树和根文件系统。部分第三方镜像可能为.tar.gz压缩包,需要先解压再烧录。烧录的本质是将镜像逐字节写入存储介质,因此必须使用块设备写入方式,不能像拷贝文件一样拖拽。

关键概念:镜像烧录与普通文件拷贝的本质区别在于——镜像包含分区表和引导扇区,只有按字节写入才能保留其引导能力。使用dd或Etcher等工具时,工具会直接操作/dev/sdX或/dev/mmcblkX设备节点,而非挂载后的文件系统路径。

4.2 判断方法与操作流程:从镜像到启动盘

在动手烧录前,需要先确认三个关键信息:盒子型号(BM1684还是BM1688)、启动介质(SD卡还是eMMC)、宿主机系统。不同组合对应不同工具和步骤。以下为通用操作流程:

步骤一:获取并校验镜像

  1. 从算能官方资源站或合作方获取对应型号的Linux镜像包(如BM1684_SDK_v2.7.img)。
  2. 使用md5sum或sha256sum校验镜像完整性,与官方提供的哈希值比对。
  3. 如果镜像为压缩包,先解压得到.img文件。
# Linux宿主机校验镜像
md5sum BM1684_SDK_v2.7.img
# 输出示例:a3f2b8c9d4e5f6a7b8c9d0e1f2a3b4c5  BM1684_SDK_v2.7.img

步骤二:准备SD卡或eMMC烧录环境

  • SD卡烧录:将SD卡插入读卡器,连接到宿主机。使用lsblk或diskutil list确认设备节点(如/dev/sdb)。
  • eMMC烧录:需要将盒子进入MaskROM模式。通常通过短接板上的特定触点或按住功能键再上电实现。具体操作参考硬件手册。

步骤三:执行烧录

# Linux/macOS使用dd命令烧录SD卡(注意:/dev/sdb为示例,务必确认)
sudo dd if=BM1684_SDK_v2.7.img of=/dev/sdb bs=4M status=progress conv=fsync
# 烧录完成后同步并弹出
sync
sudo eject /dev/sdb

Windows用户推荐使用balenaEtcher或Win32DiskImager,图形化界面操作,选择镜像和目标盘后点击烧录即可。eMMC烧录通常使用算能提供的BM1684_emmc_burn_tool,通过USB连接盒子和宿主机,在工具中选择镜像后点击烧录。

步骤四:验证烧录结果

烧录完成后,不要急于上电。先检查分区表是否正常:

# 查看SD卡分区
sudo fdisk -l /dev/sdb
# 应看到类似输出:/dev/sdb1  /dev/sdb2 等分区

如果分区表为空或报错,说明镜像写入不完整或介质有问题,需要重新烧录。

4.3 案例拆解:从烧录失败到成功启动的完整排障

某开发团队拿到一块BM1684盒子,计划使用SD卡启动定制Linux系统。他们按照官方文档烧录后,上电发现串口无任何输出,LED灯不亮。以下是他们的排障过程:

排查项 操作 结果
电源检查 使用万用表测量12V输入 电压正常,排除供电问题
SD卡接触 重新插拔SD卡,确认卡到位 接触正常,但问题依旧
镜像校验 重新下载镜像并md5校验 哈希值一致,镜像无损坏
烧录工具 改用balenaEtcher重新烧录 烧录成功,但启动仍失败
启动模式 查阅硬件手册,发现拨码开关需设为SD卡启动 调整拨码后,串口输出正常

最终定位为启动模式配置错误。该盒子默认从eMMC启动,未检测到eMMC系统时不会自动回退到SD卡,必须手动将拨码开关拨到“SD Boot”位置。复盘经验:烧录前务必确认启动介质优先级,尤其是同时存在eMMC和SD卡时,硬件设计可能不会自动切换。

风险提示:在烧录eMMC时,如果中途断电或USB线松动,可能导致eMMC引导分区损坏。此时盒子可能无法从任何介质启动,需要重新进入MaskROM模式并完全擦除eMMC后重烧。操作前务必确保供电稳定,并备份原始镜像。

4.4 常见误区与总结复盘

在烧录环节,开发者常犯的错误集中在以下几个方面:

  • 误将镜像写入挂载点:使用dd时指定了/dev/sdb1而非/dev/sdb,导致分区表未写入,系统无法引导。
  • 忽略启动模式配置:部分盒子需要跳线或拨码选择启动介质,默认可能为eMMC优先。
  • 使用不兼容的镜像:BM1684和BM1688的镜像不通用,混用会导致内核崩溃或外设无法识别。
  • 烧录后未校验:烧录工具提示成功,但实际写入过程中出现坏块,导致启动时文件系统错误。

为避免上述问题,建议遵循以下最佳实践:

  1. 烧录前使用lsblk确认设备节点,避免误写系统盘。
  2. 烧录完成后,使用fsck检查文件系统完整性(仅对可挂载分区)。
  3. 首次上电时连接串口线(通常为UART,波特率115200),观察U-Boot和内核日志,这是最直接的验证手段。
  4. 如果使用eMMC烧录工具,确保USB驱动已安装,且盒子处于正确的烧录模式。

经验之谈:建议准备两张SD卡,一张烧录官方原版镜像作为“救急盘”,另一张用于开发调试。当定制系统崩溃时,可快速切换回原版系统排查硬件问题。同时,将烧录好的SD卡标记好版本号和日期,避免混淆。

系统启动验证是烧录环节的收尾动作。除了观察串口日志外,还可以通过以下方式确认系统正常运行:

  • 使用路由器管理页面或nmap扫描局域网,找到盒子分配的IP地址。
  • 通过SSH登录(默认账号通常为root或linaro),执行uname -a查看内核版本。
  • 运行npu-smi或bm-smi命令,确认NPU驱动已加载且芯片温度正常。