文章目录
- 前言
- 一、环境变量bootcmd 和bootargs
- 1.bootcmd
- 2.bootargs
- 二 启机存储位置
- 1.宏定义
- 2.查找位置
前言
@和原子哥一起学习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={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)
- 宏 CONFIG_ENV_OFFSET 为环境变量偏移地址,这里的偏移地址是相对于存储器的首地址。如果环境变量保存在 EMMC 中的话,环境变量偏移地址为 12*64KB。
- 宏 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