在 Ubuntu 下可以更精细地操作 SD/TF 卡:可以把 sdcoard.img 整个烧写到卡上,也可以单独烧写 U-Boot 到卡上,甚至挂接卡上的文件系统后单独更新里面的文件。
常用于做 U-Boot 测试。
主用功能是用于拷贝文件,也就是用指定大小的块去拷贝一个文件,并在拷贝的同时进行指定的转换(默认从标准输入拷贝到标准输出,这意味dd可以在管道中使用)。这个拷贝过程简单理解就是读取,转换并输出数据。
用法:
dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=<字节数>][if=<文件>][obs=<字节数>][of=<文件>][seek=<区块数>][skip=<区块数>][--help][--version]
首先 SD 卡插入读卡器,再把读卡器插入电脑。
VMWare 有时候会自动弹出对话框,选择 连接到虚拟机 即可。

如果没有对话框,可以通过菜单 可移动设备 找到 SD 卡,点击 连接。

使用 lsblk 命令查看当前磁盘设备。

可看到新增加了sdb设备,此处请务必检查好sd卡所对应的磁盘设备,以免破坏其他磁盘的数据!
注意,这里的uboot要编译emmc版本的,并且确定你挂载上去烧写好的SD卡在/dev/sd中的哪个
执行以下烧录命令,将u-boot-dtb.imx烧写到/dev/sdb中:
sudo dd iflag=dsync oflag=dsync if=u-boot-dtb.imx of=/dev/sdb seek=2
六、附录:U-boot.imx的SD卡烧录烧录成功提示如下信息:

开发板插入烧录好U-Boot的SD卡。
根据以下BOOT拨码开关启动配置表,调整拨码开关为SD卡启动方式,即2-5-8位拨到on,其他位拨到0。
| 编号 | 名称 | NAND FLASH | eMMC | SD | USB |
|---|---|---|---|---|---|
| 1 | MODE0 | 0 | 0 | 0 | 1 |
| 2 | MODE1 | 1 | 1 | 1 | 0 |
| 3 | CFG1-4 | 1 | 0 | 0 | X |
| 4 | CFG1-5 | 0 | 1 | 0 | X |
| 5 | CFG1-6 | 0 | 1 | 1 | X |
| 6 | CFG1-7 | 1 | 0 | 0 | X |
| 7 | CFG2-3 | 0 | 1 | 0 | X |
| 8 | CFG2-5 | 0 | 0 | 1 | X |

然后注意使用SD卡时开发板右下角的J2竖排针不要盖有跳帽需断开(此为WIFI模块供电,核心板只引出一路SDIO,SD卡和WIFI不能同时用)

重新上电,在出现 Hit any key to stop autoboot: 倒计时的时候按下键盘上的回车键,就会进入 uboot 的命令行模式。

当进入到 uboot 的命令行模式以后,左侧会出现一个 “=>” 标志。
uboot 启动的时候会输出一些信息:
输入 help

输入 version

u-boot.imx = IVT + Boot Data + DCD + u-boot.bin
IVT数据格式:IVT 包含了镜像程序的入口点、指向 DCD 的指针和一些用作其它用途的指针。

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

SD加载程序大小是4K,IVT 偏移为 1Kbyte,IVT+Boot data+DCD 的总大小为 4KByte - 1KByte=3KByte。
u-boot.imx要有一个 1Kbyte 的偏移,而 SD 卡每个扇区为 512 字节,那么 load.imx 要跳过2个扇区,从第三个扇区烧写。
• 由 Leung 写于 2022 年 9 月 4 日