第四节:烧录与启动——让D1开发板真正跑起来

好,到了这一步,咱们的D1开发板硬件准备就绪,交叉编译环境也搭好了。接下来要干什么?说白了,就是把编译好的镜像文件烧进板子里,让它真正跑起来。

这一节我带你走一遍完整的烧录流程。从工具选择到镜像说明,再到首次上电启动,每一步我都会把坑点讲清楚。毕竟我自己在这上面栽过跟头,你想想看,烧录失败导致板子变砖,那滋味可不好受。

4.1 烧录工具介绍

全志D1开发板支持两种烧录方式:PhoenixCardLiveSuit。我个人的习惯是:调试阶段用LiveSuit,量产或快速部署用PhoenixCard。

4.1.1 PhoenixCard

这个工具专门用来制作TF卡启动盘。它会把镜像直接写入TF卡,然后板子从TF卡启动。我在项目中遇到过几次,用PhoenixCard烧录的卡,启动速度比LiveSuit快不少。

适用场景:

  • 首次烧录,需要快速验证镜像
  • 批量生产,一张卡一个板子
  • 板子上没有预装任何系统

注意事项:

  • TF卡容量建议8GB以上,Class 10速度等级
  • 烧录前会格式化整张卡,数据全丢
  • 支持Windows和Linux双平台

4.1.2 LiveSuit

LiveSuit是全志官方推荐的烧录工具。它通过USB线连接开发板和电脑,直接把镜像写入板载的NAND Flash或eMMC。嗯,这里要注意:LiveSuit需要板子进入FEL模式才能识别。

适用场景:

  • 板子已经焊好eMMC,想直接写入内部存储
  • 调试阶段频繁更换镜像
  • TF卡槽坏了(别笑,我真遇到过)
⚠️ 重要提醒: LiveSuit在Windows下需要安装驱动。如果你用的是Windows 10/11,记得先禁用驱动签名强制。我曾经因为这个折腾了一下午,最后发现是驱动没装对。

4.2 镜像文件说明

D1开发板的镜像文件通常以 .img 结尾。但这里面门道不少,我简单给你拆解一下。

镜像类型 文件后缀 说明
完整系统镜像 .img 包含bootloader、内核、根文件系统,直接烧录即可
分区镜像 .img 只包含某个分区(如boot分区、rootfs分区)
压缩包 .tar.gz / .xz 需要先解压,再用工具写入

你从网上下载的官方镜像,一般是一个 .img.xz 文件。为什么压缩?因为完整镜像动辄1-2GB,压缩后只有几百MB。解压命令很简单:

# Linux下解压
xz -d d1_sdk_image.img.xz

# 或者用7z
7z x d1_sdk_image.img.xz
💡 我的经验: 解压后记得检查一下文件大小。如果只有几十MB,那很可能是下载出错了。完整镜像应该在1GB以上。

4.3 烧录步骤详解

咱们以PhoenixCard为例,走一遍完整的烧录流程。为什么选它?因为简单、稳定、不容易翻车。

4.3.1 准备工作

  1. 一张TF卡(8GB以上,Class 10)
  2. 读卡器(最好用USB 3.0的,速度快)
  3. 下载好的镜像文件(已解压)
  4. PhoenixCard软件(Windows版或Linux版)

4.3.2 烧录步骤

第一步:插入TF卡
把TF卡插入读卡器,连上电脑。注意:如果电脑识别出多个盘符,确认一下哪个是你的TF卡。我见过有人把U盘当成TF卡烧了,结果...嗯,你懂的。

第二步:打开PhoenixCard
启动软件后,它会自动检测到你的TF卡。如果没有,点一下「刷新」按钮。

第三步:选择镜像
点击「固件」按钮,选择你解压好的 .img 文件。这里有个小细节:PhoenixCard只认 .img 文件,别选错了。

第四步:选择烧录模式
PhoenixCard提供两种模式:

  • 启动卡模式: 烧录后TF卡作为启动盘,板子从TF卡启动
  • 量产卡模式: 烧录后TF卡可以批量烧录到其他板子

咱们选「启动卡模式」就行。

第五步:开始烧录
点击「烧录」按钮,等待进度条走完。这个过程大概3-5分钟,取决于TF卡速度和镜像大小。

✅ 烧录成功标志: 进度条走完,弹出「烧录成功」提示。如果中途报错,别慌,先检查TF卡是不是坏了,或者换个USB口试试。

4.3.3 LiveSuit烧录补充

如果你非要用LiveSuit,步骤也差不多:

  1. 按住开发板上的FEL键(有的板子是BOOT键)
  2. 用USB线连接开发板和电脑
  3. 松开FEL键,板子进入FEL模式
  4. 打开LiveSuit,选择镜像,点击「烧录」
⚠️ 注意: LiveSuit烧录过程中不要断开USB线,否则板子可能变砖。我有个同事就是手贱拔了线,结果板子再也起不来了。

4.4 首次上电启动流程

烧录完成后,把TF卡插回D1开发板,接上电源(5V/2A Type-C),按下电源键。嗯,这时候你会看到什么?

4.4.1 启动过程分解

D1开发板的启动流程大致分四步:

  1. Boot ROM: 芯片上电后,先执行内部固化的Boot ROM代码。它会检查启动介质顺序(TF卡 → eMMC → NAND Flash)
  2. SPL(Secondary Program Loader): 从TF卡加载SPL到SRAM,初始化DDR内存
  3. U-Boot: SPL加载U-Boot到DDR,U-Boot负责加载内核和设备树
  4. Linux内核: 内核解压并启动,挂载根文件系统,最后启动用户空间

你可能会问:为什么这么复杂?说白了,芯片内部SRAM太小,装不下完整的bootloader,只能分阶段加载。

4.4.2 串口输出观察

如果你想看到启动过程,需要用USB转串口工具连接开发板的UART0引脚。波特率设置成115200,8N1。连接后上电,你会看到类似这样的输出:

U-Boot 2021.10 (Jan 10 2023 - 15:30:00 +0800) Allwinner Technology

CPU:   Allwinner D1 (SUN20i)
DRAM:  512 MiB
MMC:   mmc@4020000: 0
Loading Environment from FAT... OK
Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 5.4.61 (build@ubuntu) (gcc version 9.2.0) #1 SMP
[    0.000000] CPU: rv64imafdcv (0x0) 
[    0.000000] Memory: 512MB

看到这些输出,说明你的板子已经成功启动了。如果卡在某一步不动,那就得排查问题了。

4.4.3 常见启动问题排查

我整理了几个我遇到过的典型问题:

现象 可能原因 解决方法
串口无输出 串口线接反、波特率不对、板子没上电 检查接线,确认电源灯亮
卡在U-Boot 镜像损坏、TF卡接触不良 重新烧录,换一张TF卡
内核崩溃 设备树不匹配、内核配置错误 检查设备树文件,重新编译内核
文件系统挂载失败 根文件系统损坏、分区表错误 重新制作根文件系统
💡 避坑指南: 我曾经因为TF卡质量问题,烧录了三次都启动失败。后来换了一张三星的卡,一次就成功了。所以,别在TF卡上省钱,买大品牌的。

4.5 小结

这一节我们走完了烧录和启动的全流程。从工具选择到镜像说明,再到实际操作和问题排查,每一步我都尽量把坑点讲清楚。你只要跟着做,应该不会出大问题。

下一节我们会深入D1的硬件设计,看看它的引脚功能和外围电路怎么搭。到时候我会带上示波器,咱们一起测几个关键信号。

公众号:蓝海资料掘金营,微信deep3321