FAT格式文件系统操作命令
有时候需要在uboot中对SD卡或EMMC中存储的文件进行操作,这时候就要用到文件操作命令。跟文件操作相关的命令有:fatinfo、fatls、fstype、fatload 和 fatwrite,但是这些文件操作命令只支持 FAT 格式的文件系统!!
对于I.MX6U来说,SD/EMMC分为三个分区。
- 存放uboot
- 存放Linux zImage,dtb设备树文件。(FAT格式)
- 系统的根文件系统(EXT4格式)
fatinfo:查询指定MMC设备分区的文件系统信息
fatls命令用于查询FAT格式设备的目录和文件信息。
fstype查看MMC设备某个分区的文件系统格式
fatload:用于将指定的文件读取到DRAM中。
interface 为接口,比如 mmc,dev 是设备号,part 是分区,addr 是保存在 DRAM 中的起始地址,filename 是要读取的文件名字。bytes 表示读取多少字节的数据,如果 bytes 为 0 或者省略的话表示读取整个文件。pos 是要读的文件相对于文件首地址的偏移,如果为 0 或者省略的话表示从文件首地址开始读取。
我们将EMMC分区1中的zImage文件读取到DRAM中的0x80800000地址处。
fatload mmc 1:1 80800000 zImage
BOOT操作命令
uboot的本质工作是引导Linux,所以uboot肯定有相关的boot命令来启动Linux。
bootz命令
要启动Linux,需要先将Linux镜像文件拷贝到DRAM中,如果使用设备树的话也需要将设备树拷贝到DRAM中。
可以从EMMC或者NAND等存储设备中将Linux镜像和设备树文件拷贝到DRAM,也可以通过nfs或者tftp将Linux镜像文件和设备树下载到DRAM中。
不管用哪种方法,只要能将Linux镜像和设备树文件存到DRAM中就可以,然后使用booz命令来启动,bootz命令启动zImage镜像文件。
bootz [addr [initrd[:size]] [fdt]]
命令 bootz 有三个参数,addr 是 Linux 镜像文件在 DRAM 中的位置,initrd 是 initrd 文件在DRAM 中的地址,如果不使用 initrd 的话使用‘-’代替即可,fdt 就是设备树文件在 DRAM 中的地址。
boot命令
boot命令也是用来启动Linux系统的,只是boot会读取环境变量bootcmd来启动Linux系统。
bootcmd是一个很重要的环境变量!其名字分为“boot”和“cmd”,也就是“引导”和“命令”,说明这个环境变量保存着引导命令,就是启动的命令集合。
说明这个环境变量保存着引导命令,其实就是启动的命令集合,具体的引导命令内容是可以修改的。比如我们要想使用 tftp 命令从网络启动 Linux 那么就可以设置 bootcmd 为“tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-7-1024x600-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
前面说过uboot倒计时结束后就会启动Linux系统,其实就是执行的bootcmd中的启动命令。
其它常用命令
reset:复位
go命令用于跳到指定的地址处执行应用,命令格式如下:
go addr [arg ...]
addr是应用在DRAM中的首地址,我们可以编译一下裸机例程的实验 13_printf,然后将编译出来的printf.bin拷贝到Ubuntu中的tftp文件夹里,不需要在前面添加IVT信息,因为uboot已经初始化DDR了。