本文来学习 uboot的环境变量 bootcmd。
- #if defined(CONFIG_SYS_BOOT_NAND)
- #define CONFIG_EXTRA_ENV_SETTINGS \
- CONFIG_MFG_ENV_SETTINGS \
- "panel=TFT43AB\0" \
- "fdt_addr=0x83000000\0" \
- ....................
-
- #else
- #define CONFIG_EXTRA_ENV_SETTINGS \
- CONFIG_MFG_ENV_SETTINGS \
- "script=boot.scr\0" \
- "image=zImage\0" \
- ....................
- #endif
bootcmd 在前面已经说了很多次了,bootcmd 保存着 uboot 默认命令,uboot 倒计时结束以后就会执行 bootcmd 中的命令。这些命令一般都是用来启动 Linux 内核的,比如读取 EMMC 或者 NAND Flash 中的 Linux 内核镜像文件和设备树文件到 DRAM 中,然后启动 Linux 内核。可 以在 uboot 启动以后进入命令行设置 bootcmd 环境变量的值。
- #ifdef DEFAULT_ENV_INSTANCE_EMBEDDED
- env_t environment __PPCENV__ = {
- ENV_CRC, /* CRC Sum */
- #ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
- 1, /* Flags: valid */
- #endif
- {
- #elif defined(DEFAULT_ENV_INSTANCE_STATIC)
- static char default_environment[] = {
- #else
- const uchar default_environment[] = {
- #endif
- #ifdef CONFIG_ENV_CALLBACK_LIST_DEFAULT
- ENV_CALLBACK_VAR "=" CONFIG_ENV_CALLBACK_LIST_DEFAULT "\0"
- #endif
- #ifdef CONFIG_ENV_FLAGS_LIST_DEFAULT
- .....................
- #ifdef DEFAULT_ENV_INSTANCE_EMBEDDED
- }
- #endif
- };
mx6ull_alientek_emmc.h文件中,指定了很多环境变量的默认值,比如 bootcmd 的默认值就是
- #if defined(CONFIG_SYS_BOOT_NAND)
- #define CONFIG_EXTRA_ENV_SETTINGS \
- CONFIG_MFG_ENV_SETTINGS \
- "panel=TFT43AB\0" \
- "fdt_addr=0x83000000\0" \
- "fdt_high=0xffffffff\0" \
- "console=ttymxc0\0" \
- "bootargs=console=ttymxc0,115200 ubi.mtd=4 " \
- "root=ubi0:rootfs rootfstype=ubifs " \
- CONFIG_BOOTARGS_CMA_SIZE \
- "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs)\0"\
- "bootcmd=nand read ${loadaddr} 0x4000000 0x800000;"\
- "nand read ${fdt_addr} 0x5000000 0x100000;"\
- "bootz ${loadaddr} - ${fdt_addr}\0"
- "bootcmd=nand read ${loadaddr} 0x4000000 0x800000;"\
- "nand read ${fdt_addr} 0x5000000 0x100000;"\
- "bootz ${loadaddr} - ${fdt_addr}\0"
bootcmd 展开后是:
- bootcmd=nand read 0x80800000 0x4000000 0x800000
- nand read 0x83000000 0x5000000 0x100000
- bootz 0x80800000 - 0x83000000
如果开发板是从 NAND_Flash启动的话: