一、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个扇区,从第三个扇区开始复制 |
如图,写入成功: