bootcmd与bootargs环境变量

一、简介

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命令行修改环境变量的方法:

  1. 简单设置一个变量的值: setenv 变量名 值
  2. 一个变量包含多条命令:setenv bootcmd ‘bootcmd=tftpboot 80800000 zImage;tftpboot 83000000 imx6ull-zjh-emmc.dtb;run mmcargs;bootz 80800000 - 83000000;’ (单引号括起来,命令之间加分号)
  3. 值中带空格: setenv bootargs ‘console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw’

和shell有点相像。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值