uboot-uboot 环境变量分析


前言

@和原子哥一起学习Linux

开发环境:I.MX6Ull开发板
参考内容:正点原子的驱动开发教程,并完成uboot移植部分,使用自己移植的代码。

一、环境变量bootcmd 和bootargs

加载:如果 EMMC 或者 NAND 中没有保存 bootcmd 的值,那么 uboot 就会使用默认的值,板子第一次运行 uboot 的时候都会使用默认值来设置 bootcmd 环境变量,位置为include/env_default.h,保存环境变量在default_environment中

#ifdef	CONFIG_BOOTARGS
	"bootargs="	CONFIG_BOOTARGS			"\0"
#endif
#ifdef	CONFIG_BOOTCOMMAND
	"bootcmd="	CONFIG_BOOTCOMMAND		"\0"
#endif

1.bootcmd

作用:bootcmd 保存着 uboot 默认命令, uboot 倒计时结束以
后就会执行 bootcmd 中的命令。

路径:一般为board目录下板子的适配文件中
uboot\include\configs\mx6ull_my_emmc.h

#define CONFIG_BOOTCOMMAND \
	"mmc dev 1;" \
	"fatload mmc 1:1 0x80800000 zImage;" \
	"fatload mmc 1:1 0x83000000 imx6ull-alientek-emmc.dtb;" \
	"bootz 0x80800000 - 0x83000000;"

1)mmc dev ${mmcdev}用于切换 mmc 设备, mmcdev 为 1,因此这行代码就是: mmc
dev 1,也就是切换到 EMMC 上。
2)从 mmc1 的分区 1 中读取文件 zImage 到 DRAM 的 0X80800000 处。通过ls mmc 1:1查看
3)从 mmc1 的分区 1 中读取imx6ull-alientek-emmc.dtb文件并放到 0x83000000

2.bootargs

CONFIG_BOOTARGS没有定义,但是是通过别的环境变量定义的

mmcargs=setenv bootargs console= c o n s o l e , {console}, console,{baudrate}
------》mmcargs=setenv bootargs console= ttymxc0, 115200 root= /dev/mmcblk1p2 rootwait rw

1)console 用来设置 linux 终端(或者叫控制台) ,ttymxc0(也就是串口 1),串口波特率为 115200,因为是发送给linux的,所以名称是由linux初始化串口驱动的时候决定的。
2) root 用来设置根文件系统的位置, root=/dev/mmcblk1p2 用于指明根文件系统存放在mmcblk1 设备的分区 2 中。 其中/dev/mmcblkxpy(x=0-n,y=1-n)表示 mmc 设备x 的分区 y。root 后面有“rootwait rw”, rootwait 表示等待 mmc 设备初始化完成以后再挂载,否则的话mmc 设备还没初始化完成就挂载根文件系统会出错的。 rw 表示根文件系统是可以读写的,不加rw 的话可能无法在根文件系统中进行写操作,只能进行读操作。
3)Rootfstype 一般配置 root 一起使用, rootfstype 用于指定根文件系统类型,如果根文件系统为ext 格式的话此选项无所谓。如果根文件系统是 yaffs、 jffs 或 ubifs 的话就需要设置此选项,指定根文件系统的类型 。

二 启机存储位置

1.宏定义

uboot环境变量会根据存储介质不同,保存的方式、位置可能不一样。使用emmc的板子会将uboot环境变量保存到emmc特定地址。通过宏CONFIG_ENV_IS_IN_MMC查看.

路径:一般为board目录下板子的适配文件中

uboot\include\configs\mx6ull_my_emmc.h

进一步定义了

#define CONFIG_ENV_OFFSET (12 * SZ_64K)

  1. 宏 CONFIG_ENV_OFFSET 为环境变量偏移地址,这里的偏移地址是相对于存储器的首地址。如果环境变量保存在 EMMC 中的话,环境变量偏移地址为 12*64KB。
  2. 宏 CONFIG_SYS_MMC_ENV_PART 为模式分区,默认为第 0 个分区

2.查找位置

通过do_env_save函数查看存储位置,命令saveenv源头。

=> saveenv 
Saving Environment to MMC...
Writing to MMC(1)... done

所以存在mmc中,路径为uboot\common\env_mmc.c

最终得到:
环境变量大小为

CONFIG_ENV_SIZE 8k

位置为mmc的偏移

CONFIG_ENV_OFFSET 12*64KB

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值