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

可看到新增加了sdb设备,此处请务必检查好sd卡所对应的磁盘设备,以免破坏其他磁盘的数据!
三、使用dd命令将uboot烧写到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
- iflag:输入(读取数据)特征
- oflag:输出(写入数据)特征
- if:输入源,即要写入的文件
- of:输出源,即要写入的设备名称
-
seek=2:跳过2个扇区,从第三个扇区开始复制。详细解释查看下面
六、附录:U-boot.imx的SD卡烧录
烧录成功提示如下信息:

四、设置为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不能同时用)

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

当进入到 uboot 的命令行模式以后,左侧会出现一个 “=>” 标志。
uboot 启动的时候会输出一些信息:
- 第1行:uboot 版本号和编译时间,可以看出当前的 uboot 版本号是 2020.10,编译时间是 2022 年 9 月 4 日晚上 19 点 02 分。
- 第3、4行:CPU 信息,可以看出当前使用的 CPU 是飞思卡尔的 I.MX6ULL(I.MX 以前属于飞思卡尔,然而飞思卡尔被 NXP 收购了),频率为 792MHz,但是此时运行在 396MHz。这颗芯片是工业级的,结温为-40°C~105°C。
- 第5行:复位原因,当前的复位原因是 POR。I.MX6ULL 芯片上有个 POR_B 引脚,将这个引脚拉低即可复位 I.MX6ULL。
- 第6行:板子名字,当前的板子名字为 “MX6ULL 14x14 EVK”。
- 第8行:提示当前板子的 DRAM(内存)为 512MB。
- 第9行:提示当前板子有两个 MMC/SD 卡控制器:FSL_SDHC(0) 和 FSL_SDHC(1)。
- 第10行:提示当前板子通过 MMC 方式启动。
- 第11~13行:标准输入、标准输出和标准错误所使用的终端,这里都使用串口(serial)作为终端。
- 第14行:网口信息。
5.1 查看帮助
输入 help

5.2 查看U-Boot版本
输入 version

六、附录:U-boot.imx的SD卡烧录
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 日
网友评论