第四节:烧录与启动——让D1开发板真正跑起来
好,到了这一步,咱们的D1开发板硬件准备就绪,交叉编译环境也搭好了。接下来要干什么?说白了,就是把编译好的镜像文件烧进板子里,让它真正跑起来。
这一节我带你走一遍完整的烧录流程。从工具选择到镜像说明,再到首次上电启动,每一步我都会把坑点讲清楚。毕竟我自己在这上面栽过跟头,你想想看,烧录失败导致板子变砖,那滋味可不好受。
4.1 烧录工具介绍
全志D1开发板支持两种烧录方式:PhoenixCard 和 LiveSuit。我个人的习惯是:调试阶段用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卡槽坏了(别笑,我真遇到过)
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
4.3 烧录步骤详解
咱们以PhoenixCard为例,走一遍完整的烧录流程。为什么选它?因为简单、稳定、不容易翻车。
4.3.1 准备工作
- 一张TF卡(8GB以上,Class 10)
- 读卡器(最好用USB 3.0的,速度快)
- 下载好的镜像文件(已解压)
- 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,步骤也差不多:
- 按住开发板上的FEL键(有的板子是BOOT键)
- 用USB线连接开发板和电脑
- 松开FEL键,板子进入FEL模式
- 打开LiveSuit,选择镜像,点击「烧录」
4.4 首次上电启动流程
烧录完成后,把TF卡插回D1开发板,接上电源(5V/2A Type-C),按下电源键。嗯,这时候你会看到什么?
4.4.1 启动过程分解
D1开发板的启动流程大致分四步:
- Boot ROM: 芯片上电后,先执行内部固化的Boot ROM代码。它会检查启动介质顺序(TF卡 → eMMC → NAND Flash)
- SPL(Secondary Program Loader): 从TF卡加载SPL到SRAM,初始化DDR内存
- U-Boot: SPL加载U-Boot到DDR,U-Boot负责加载内核和设备树
- 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卡 |
| 内核崩溃 | 设备树不匹配、内核配置错误 | 检查设备树文件,重新编译内核 |
| 文件系统挂载失败 | 根文件系统损坏、分区表错误 | 重新制作根文件系统 |
4.5 小结
这一节我们走完了烧录和启动的全流程。从工具选择到镜像说明,再到实际操作和问题排查,每一步我都尽量把坑点讲清楚。你只要跟着做,应该不会出大问题。
下一节我们会深入D1的硬件设计,看看它的引脚功能和外围电路怎么搭。到时候我会带上示波器,咱们一起测几个关键信号。
公众号:蓝海资料掘金营,微信deep3321