You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Yocto构建Olimex A20镜像后如何烧录多文件至SD卡启动?

Olimex A20 SOM-EVB Yocto镜像烧录指南

1. 先给SD卡创建正确的分区结构

Allwinner A20芯片需要特定的分区布局,你得给SD卡分两个区:

  • 第一个分区:FAT32格式主分区,起始扇区设为2048,大小至少128MB,用来存内核、设备树和启动配置文件
  • 第二个分区:EXT4格式主分区,用剩余全部空间,用来存根文件系统

用fdisk工具操作(替换/dev/sdX为你的SD卡设备路径,千万别搞错成本地硬盘):

sudo fdisk /dev/sdX

在fdisk交互界面执行:

  • 输入o:创建新的DOS分区表
  • 输入n:创建第一个分区,选主分区(p),分区号1,起始扇区2048,结束扇区填+128M
  • 输入t:修改分区类型,输入c设置为W95 FAT32 (LBA)
  • 输入n:创建第二个分区,选主分区(p),分区号2,起始扇区默认,结束扇区默认
  • 输入w:保存分区表并退出

然后格式化分区:

sudo mkfs.vfat /dev/sdX1
sudo mkfs.ext4 /dev/sdX2

2. 烧录Bootloader(核心步骤)

A20的bootloader必须写入SD卡的裸设备偏移位置,不能放到分区里。Yocto生成的对应文件是u-boot-sunxi-with-spl.bin,用dd命令写入:

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8

这里的seek=8是A20芯片要求的固定偏移,错了就没法启动。

3. 复制内核和设备树到FAT32分区

挂载第一个分区:

sudo mount /dev/sdX1 /mnt/boot

把Yocto生成的zImage和对应设备树文件(比如sun7i-a20-olimex-som-evb.dtb)复制进去:

sudo cp zImage /mnt/boot/
sudo cp sun7i-a20-olimex-som-evb.dtb /mnt/boot/

同时复制uEnv.txt(如果Yocto没生成,自己创建一个)到该分区,用来指定启动参数,内容示例:

bootargs=console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait rw
bootcmd=mmc dev 0; mmc read 0x43000000 0x800 0x400; mmc read 0x41800000 0x1800 0x80; bootz 0x43000000 - 0x41800000

4. 写入根文件系统到EXT4分区

挂载第二个分区:

sudo mount /dev/sdX2 /mnt/rootfs

如果Yocto生成的是rootfs.ext4镜像,直接用dd写入:

sudo dd if=rootfs.ext4 of=/dev/sdX2 bs=4M

如果是rootfs.tar.gz这类压缩包,解压到分区即可:

sudo tar xzf rootfs.tar.gz -C /mnt/rootfs/

5. 收尾验证

完成后卸载分区:

sudo umount /mnt/boot
sudo umount /mnt/rootfs

安全弹出SD卡,插到Olimex A20 SOM-EVB上,按硬件手册设置SD卡启动拨码,上电即可。

常见排查点

  • 确认SD卡设备路径正确,避免误操作本地硬盘
  • 检查bootloader的seek=8参数没写错
  • 设备树文件名必须和你的板卡型号完全匹配
  • uEnv.txt里的根分区路径是/dev/mmcblk0p2,对应SD卡的第二个分区

内容的提问来源于stack exchange,提问作者Amr Rasslan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 01:45:17