1.1:bootcmd 保存着 uboot 默认命令,uboot 倒计时结束以后就会执行 bootcmd 中的命令。这些命令一般都是用来启动 Linux 内核的,比如读取 EMMC 或者 NAND Flash 中的 Linux 内核镜像文件和设备树文件到 DRAM 中,然后启动 Linux 内核;板子第一次运行 uboot 的时候都会使用默认值来设置 bootcmd,环境变量。在 include/env_default.h看下默认值

env_t environment __PPCENV__ = {
	ENV_CRC,	/* CRC Sum */
	1,		/* Flags: valid */
        const uchar default_environment[] = {
	"bootargs="	CONFIG_BOOTARGS			"\0"
	"bootcmd="	CONFIG_BOOTCOMMAND		"\0"
     ............ }

1.2:CONFIG_BOOTCOMMAND的定义用如下脚本语言定义:找设备树文件;切换到emmc上;再扫描是否有mmc设备(没有的话从网络启动),运行loadbootscript环境变量若能加载到boot.src,则运行bootscript环境变量;否则运行loadimage环境变量(loadimage=fatload mmc 1:1 0x80800000 zImage),再运行mmcboot,否则运行netboot

#define CONFIG_BOOTCOMMAND \  
	   "run findfdt;" \  //找设备树文件
       "mmc dev ${mmcdev};" \  //切换到emmc上
	   "mmc dev ${mmcdev}; if mmc rescan; then " \  //再扫描是否有mmc设备
		   "if run loadbootscript; then " \  //运行loadbootscript环境变量若能加载到boot.src
			   "run bootscript; " \   //则运行bootscript环境变量
		      "else " \
			   "if run loadimage; then " \   //运行loadimage环境变量,
				   "run mmcboot; " \     //加载镜像成功后再运行mmcboot 
                "else run netboot; " \ //否则运行
netboot
             "fi; " \ 
           "fi; " \
      "else run netboot; fi" //没有的话从网络启动

1.3:mmcboot如下

"mmcboot=echo Booting from mmc ...; " \
		"run mmcargs; " \   //设置bootargs
		"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \    //boot_fdt = try
			"if run loadfdt; then " \                                  //加载设备树文件,loadfdt=fatload mmc 1:1 0x83000000 imx6ull-14x14-evk.dtb
				"bootz ${loadaddr} - ${fdt_addr}; " \        //加载成功的话,就通过bootz启动linux
			"else " \
				"if test ${boot_fdt} = try; then " \
					"bootz; " \
				"else " \
					"echo WARN: Cannot load the DT; " \
				"fi; " \
			"fi; " \
		"else " \
			"bootz; " \
		"fi;\0"

  以上脚本总结一下就是如下内容

mmc dev 1 //切换到 EMMC
fatload mmc 1:1 0x80800000 zImage //读取 zImage 到 0x80800000 处
fatload mmc 1:1 0x83000000 imx6ull-14x14-evk.dtb //读取设备树到 0x83000000 处
bootz 0x80800000 - 0x83000000 //启动 Linux

2.1:上面说到bootargs是由mmcargs设置的,console用来与linux交互,一般是串口;buadrate就是串口的波特率,root是根文件系统的位置,rootwait 表示等待 mmc 设备初始化完成以后再挂载,rw 表示根文件系统是可以读写的

mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot}
解释一下即为
mmcargs=setenv bootargs console= ttymxc0, 115200 root= /dev/mmcblk1p2 rootwait rw

 

posted on 2019-11-26 21:26  lzd626  阅读(873)  评论(0编辑  收藏  举报