IMX6的U-boot.imx分析及sd卡烧录详解(dd命令写入)

一、U-boot.imx的组成

IMX6solo资料地址

u-boot.imx = IVT + Boot Data + DCD + u-boot.bin

IVT数据格式:

IVT 包含了镜像程序的入口点、指向 DCD 的指针和一些用作其它用途的指针

名称 含义
header IVT头部,标识IVT、IVT长度、版本信息
entry 入口地址,第一条指令的入口地址,即U-boot的入口
reserved1 保留,未使用
DCD DCD数据的地址,紧跟在Boot Data后面
Boot Data 启动数据,包含了镜像要拷贝到哪个地址,拷贝的大小是多少等等
self IVT 复制到 DDR 中以后的首地址
csf CSF地址
reserved2 保留,未使用

Boot Data数据格式:

名称 含义
start 启动数据加载到内存的地址,即整个 load.imx 的起始地址,包括前面 1KByte 的地址偏移
length 启动数据加载到内存的长度,即镜像大小
plugin 插件

二、U-boot.imx的SD卡烧录

查看数据手册,找到IVT的偏移量和加载数据长度大小表:

SD加载程序大小是4K,IVT 偏移为 1Kbyte,IVT+Boot data+DCD 的总大小为 4KByte - 1KByte=3KByte。

u-boot.imx要有一个 1Kbyte 的偏移,而 SD 卡每个扇区为 512 字节,那么 load.imx 要跳过2个扇区,从第三个扇区烧写。

dd命令:

主用功能是用于拷贝文件,也就是用指定大小的块去拷贝一个文件,并在拷贝的同时进行指定的转换(默认从标准输入拷贝到标准输出,这意味dd可以在管道中使用)。这个拷贝过程简单理解就是读取,转换并输出数据。
用法:

1
dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=<字节数>][if=<文件>][obs=<字节数>][of=<文件>][seek=<区块数>][skip=<区块数>][--help][--version]

写入示例命令:

1
sudo dd iflag=dsync oflag=dsync if=u-boot.imx of=/dev/sdb seek=2
iflag 输入(读取数据)特征
oflag 输出(写入数据)特征
if 输入源,即要写入的文件
of 输出源 ,即要写入的设备名称
seek=2 跳过2个扇区,从第三个扇区开始复制

如图,写入成功: