一、简介
bootcmd 和bootargs 是uboot中的两个环境变量。
bootcmd保存这一些启动命令,例如从网络中下载内核、设备树到内存中,再启动Linux。在uboot启动倒计时结束后会默认执行bootcmd变量。
bootargs保存着uboot 传递给内核的参数。
二、bootcmd和bootargs的默认值
当我们设置过它们的值后,值会保存在emmc中;但是如果没有设置,那么它就会有一个默认值。
mx6ull_alientek_emmc.h 文件的宏 CONFIG_EXTRA_ENV_SETTINGS 保存这它们的默认值。
在 include/env_default.h文件中有 env_t类型的结构体,保存着uboot环境变量的默认值。
env_t environment PPCENV
比如bootcmd 的 默 认 值 就 是 CONFIG_BOOTCOMMAND , bootargs 的 默 认 值 就 是CONFIG_BOOTARGS 。
可以通过在mx6ull_alientek_emmc.h 设置CONFIG_BOOTCOMMAND 宏的值来设置bootcmd的默认值。
(值得注意的是,虽然是在.h 文件中,语法却像shell。)
NXP 官方为了兼容多个板子,给CONFIG_BOOTCOMMAND设置的默认值极其复杂,如果值针对一个平台那么就简单多了。
例如这是从emmc启动,
#define CONFIG_BOOTCOMMAND \
"mmc dev 1;" \ #emmc的设备号是1
"fatload mmc 1:1 0x80800000 zImage;" \
"fatload mmc 1:1 0x83000000 imx6ull-alientek-emmc.dtb;" \
"bootz 0x80800000 - 0x83000000;"
bootargs
bootargs 是由 mmcargs 环境变量设置的。
mmcargs的值如下:
mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot}
其中 console=ttymxc0, baudrate=115200, mmcroot=/dev/mmcblk1p2 rootwait rw。
mmcroot是根文件系统
bootags设置了如上很多参数的值,这些都是内核常用的。
mmcroot=" CONFIG_MMCROOT " rootwait rw #这是配置mmcroot值的地方,根文件系统存放区由CONFIG_MMCROOT 配置
注:在启动内核测试中,遇到根文件系统不存在错误,可以配置root,再启动。(imx6ull 除了bootargs变量还有一个mmcroot要修改才能完成启动)
1、 console
console是用来设置Linux终端的,也就是我们人通过什么设备来跟内核交互。比如串口或lcd等等。我们常用的是串口,所以console=ttymxc0 ,因为 linux启动以后 I.MX6ULL 的串口 1 在 linux 下的设备文件就是/dev/ttymxc0,baudrate是波特率。
2、 root
root用来设置根文件系统存放的位置。root=/dev/mmcblk1p2 用于指明根文件系统存放在mmcblk1 设备的分区 2 中。
EMMC 版本的核心板启动 linux 以后会存在/dev/mmcblk0、/dev/mmcblk1、 /dev/mmcblk0p1、 /dev/mmcblk0p2、 /dev/mmcblk1p1 和/dev/mmcblk1p2 这样的文件。
/dev/mmcblk0 表示mmc设备0,/dev/mmcblk1表示mmc设备1。/dev/mmcblk0p1表示设备1的1分区。
(通常一个Linux系统的mmc设备,0分区存放uboot,1分区存放内核及设备数,2分区存放根文件系统)
root 后面有“rootwait rw”, rootwait 表示等待 mmc 设备初始化完成以后再挂载,否则的话mmc 设备还没初始化完成就挂载根文件系统会出错的。
rw 表示根文件系统是可以读写的,不加rw 的话可能无法在根文件系统中进行写操作,只能进行读操作。
3、 rootfstype
此选项一般配置 root 一起使用, rootfstype 用于指定根文件系统类型,如果根文件系统为ext 格式的话此选项无所谓。如果根文件系统是 yaffs、 jffs 或 ubifs 的话就需要设置此选项,指定根文件系统的类型。
bootargs 常设置的选项就这三个
uboot命令行修改环境变量的方法:
- 简单设置一个变量的值: setenv 变量名 值
- 一个变量包含多条命令:setenv bootcmd ‘bootcmd=tftpboot 80800000 zImage;tftpboot 83000000 imx6ull-zjh-emmc.dtb;run mmcargs;bootz 80800000 - 83000000;’ (单引号括起来,命令之间加分号)
- 值中带空格: setenv bootargs ‘console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw’
和shell有点相像。