本文是为了介绍使用“dd”命令烧录 SDcard 的方法,主机环境是 Ubuntu16.04 ,硬件环境是 i.MX6ULEVK 。
一、基础知识
Linux 中“dd”命令可以从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。命令使用时可以带上参数指定格式。常用参数使用方法如下:
① “if = 文件名”:输入文件名,即指定源文件,在烧录 SDcard 中即为烧录的文件。
② “of = 文件名”:输出文件名,即指定目的文件,在烧录 SDcard 中即为烧录目的文件名,常为设备名,使用命令“ls /dev”查看设备名。
③ “seek = blocks”:从输出文件偏移量(开头跳过“blocks”个块,就是从seek开始)复制。
④ “bs = bytes”:同时设置读入/输出的块大小为“bytes”个字节。
⑤ “--help”:显示帮助信息,可查看“dd”命令完整用法。
⑥ “--version”:显示版本信息。
二、烧录 u-boot
对于 i.MX6 ,bootloader 使用的是 u-boot ,利用 Yocto 项目或者单独编译均可获得的 .imx 文件,常用命令格式如下:
$ sudo dd if=u-boot.imx of=/dev/sdb bs=1k seek=1 && sync |
① 目的文件是如 “/dev/sdb” 形式的设备名,可以在读卡器插入前后分别用命令“ls /dev”对比查看设备名,sdb 不是一定的,如下图:
② 当 bs=1k 时,对于 i.MX6 & i.MX7 ,seek=1;对于 i.MX8MQ & i.MX8MM 等型号的硬件环境,seek=32 。具体情况参考 NXP 官网文档《i.MX_Linux_User’s_Guide》。
③ “&&”表示若前面的命令执行成功,则紧接着执行后面的命令。
④ “sync”给系统缓冲时间,保证 u-boot 烧录完整。
烧录完成界面如下:
三、烧录 .sdcard 文件 在 Yocto 项目中,镜像编译完成后会生成文件具有名称如“xxx.rootfs.sdcard”,该文件是 Yocto 项目特别针对 SDcard 启动的,该文件是包含了多种设备树文件、 kernel 、 uTee-6ulevk 文件及根文件系统,不需要再单独为 SDcard 分区和拷贝,因为用“dd”烧录这一文件就已经完成了所有动作。
而且烧录完成后,在 u-boot 启动阶段可以通过设置环境变量的方式选择不同的设备树文件。这个方法更适用于 Yocto 项目生成的镜像的烧录。
烧录使用的命令类似于下面所示结构:
$ sudo dd if=core-image-base-imx6ulevk-DATE.rootfs.sdcard of=/dev/sdb bs=1M && sync |