文章目录
- 一、FAT 格式文件系统操作命令
- 1.fatinfo 命令
- 2.fatls 命令
- 3.fstype 命令
- 4.fatload命令-将EMMC数据复制到DRAM中
- 4.fatwrite命令-将DRAM数据复制到EMMC中
- 二、Boot操作指令
- 1.bootz
- 2.boot命令
一、FAT 格式文件系统操作命令
💦 有时候需要在 uboot 中对 SD 卡或者 EMMC 中存储的文件进行操作,需要文件操作命令,部分命令有:fatinfo、fatls、fstype、fatload 和 fatwrite,但是这些文件操作命令只支持 FAT 格式的文件系统。
1.fatinfo 命令
💦 fatinfo 命令用于查询指定 MMC 设备分区的文件系统信息,格式如下:
fatinfo <interface> [<dev[:part]>]
💦 interface 表示接口,比如 mmc,dev 是查询的设备号,part 是要查询的分区。 💦 i举例:
我们要查询 EMMC 分区 1 的文件系统信息,命令如下:
fatinfo mmc 1:1
💦 EMMC的分区1的系统是FAT32格式的。
2.fatls 命令
💦 fatls 命令用于查询 FAT 格式设备的目录和文件信息,命令格式如下:
fatls <interface> [<dev[:part]>] [directory]
💦 interface 是要查询的接口,比如 mmc,dev 是要查询的设备号,part 是要查询的分区,directory是要查询的目录。
💦 举例:查询 EMMC 分区 1 中的所有的目录和文件,输入命令:
fatls mmc 1:1
💦emmc 的分区 1 中存放着 8 个文件
3.fstype 命令
💦fstype 用于查看 MMC 设备某个分区的文件系统格式,命令格式如下:
fstype <interface> <dev>:<part>
💦开发板 EMMC 核心板上的 EMMC 默认有 3 个分区,查看一下这三个分区的文件
系统格式,输入命令:
fstype mmc 1:0
fstype mmc 1:1
fstype mmc 1:2
💦分区 0 格式未知,因为分区 0 存放的 uboot,并且分区 0 没有格式化,所以文件系统格式未知。分区 1 的格式为 fat,分区 1 用于存放 linux 镜像和设备树。分区 2 的格式为 ext4,用于存放 Linux 的根文件系统(rootfs)。
4.fatload命令-将EMMC数据复制到DRAM中
💦fatload 命令用于将指定的文件读取到 DRAM 中,命令格式如下:
fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
💦interface 为接口,比如 mmc,dev 是设备号,part 是分区,addr 是保存在 DRAM 中的起始地址,filename 是要读取的文件名字。bytes 表示读取多少字节的数据,如果 bytes 为 0 或者省略的话表示读取整个文件。pos 是要读的文件相对于文件首地址的偏移,如果为 0 或者省略的话表示从文件首地址开始读取。
举例:我们将 EMMC 分区 1 中的 zImage 文件读取到 DRAM 中的0X80800000 地址处,命令如下:
fatload mmc 1:1 80800000 zImage
4.fatwrite命令-将DRAM数据复制到EMMC中
💦注意!uboot 默认没有使能 fatwrite 命令,需要修改板子配置头文件,比如 mx6ullevk.h、
mx6ull_alientek_emmc.h 等等,板子不同,其配置头文件也不同。找到自己开发板对应的配置头文件然后添加如下一行宏定义来使能 fatwrite 命令:
#define CONFIG_FAT_WRITE /* 使能 fatwrite 命令 */
💦fatwirte 命令用于将 DRAM 中的数据写入到 MMC 设备中,命令格式如下:
fatwrite <interface> <dev[:part]> <addr> <filename> <bytes>
💦interface 为接口,比如 mmc,dev 是设备号,part 是分区,addr 是要写入的数据在 DRAM中的起始地址,filename 是写入的数据文件名字,bytes 表示要写入多少字节的数据。我们可以通过 fatwrite 命令在 uboot 中更新 linux 镜像文件和设备树。
💦举例:我们以更新 linux 镜像文件 zImage为例,下载镜像到DRAM中
使用命令 tftp 将 zImage 下载到 DRAM 的 0X80800000 地址处,命令如下:
tftp 80800000 zImage
💦zImage 大小为 5636216(0X560078)个字节,接下来使用命令 fatwrite 将其写入到 EMMC 的分区 1 中,文件名字为 zImage,命令如下:
fatwrite mmc 1:1 80800000 zImage 560078
💦完成以后使用“fatls”命令查看一下 EMMC 分区 1 里面的文件,可以看到zImage文件已经存在了。
二、Boot操作指令
💦uboot 的功能是引导 Linux,所以 uboot 肯定有相关的 boot(引导)命令来启动 Linux。常用的跟 boot 有关的命令有:bootz、bootm 和 boot
1.bootz
💦要启动 Linux,需要先将 Linux 镜像文件拷贝到 DRAM 中,如果使用到设备树的话也需要将设备树拷贝到 DRAM 中。可以从 EMMC 或者 NAND 等存储设备中将 Linux 镜像和设备树文件拷贝到 DRAM,也可以通过 nfs 或者 tftp 在Ubuntu系统中将 Linux 镜像文件和设备树文件下载到 DRAM 中。不管用那种方法,只要能将 Linux 镜像和设备树文件存到 DRAM 中就行,然后使用 bootz 命令来启动,bootz 命令用于启动 zImage 镜像文件,bootz 命令格式如下:
bootz [addr [initrd[:size]] [fdt]]
💦命令 bootz 有三个参数,addr 是 Linux 镜像文件在 DRAM 中的位置,initrd 是 initrd 文件在DRAM 中的地址,如果不使用 initrd 的话使用‘-’代替即可,fdt 就是设备树文件在 DRAM 中的地址。
💦现在我们使用网络和 EMMC 两种方法来启动 Linux 系统,
💦方法1:通过网络启动Linux,使用tftp命令,记住传送的文件要赋予权限。
a)首先将开发板的 Linux 镜像和设备树发送到 Ubuntu 主机中的 tftpboot 文件夹下。
2)使用 tftp 命令将zImage 下载到DRAM的0X80800000地址处,然后将设备树imx6ull-14x14-emmc-7-1024x600-c.dtb 下载到 DRAM 中的 0X83000000 地址处,最后之后命令 bootz 启动,命令如下:
tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb
bootz 80800000 - 83000000
💦方法2:通过文件系统操作指令,在EMMC中将Linux系统镜像和设备树加载到DRAM中。
fatload mmc 1:1 80800000 zImage
fatload mmc 1:1 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb
bootz 80800000 - 83000000
2.boot命令
💦boot 命令也是用来启动 Linux 系统的,只是== boot 会读取环境变量 bootcmd 来启动 Linux 系统==,bootcmd 是一个很重要的环境变量!其名字分为“boot”和“cmd”,也就是“引导”和“命令”,说明这个环境变量保存着引导命令,其实就是启动的命令集合,具体的引导命令内容是可以修改的。
💦举例:比如我们要想使用 tftp 命令从网络启动 Linux 那么就可以设置 bootcmd 为“tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb; bootz 80800000 -
83000000”,然后使用 saveenv 将 bootcmd 保存起来。然后直接输入 boot 命令即可从网络启动Linux 系统,命令如下:
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb;
bootz 80800000 - 83000000'
saveenv
boot
💦设置从EMMC启动也是同样道理
setenv bootcmd 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-
emmc-7-1024x600-c.dtb; bootz 80800000 - 83000000'
savenev
boot