一. 简介
uboot 中有两个非常重要的环境变量 bootcmd 和 bootargs。本文来学习 uboot的环境变量 bootargs。
bootargs 环境变量也叫命令行参数。bootargs 保存着 uboot 传递给 Linux 内核的参数。
二. uboot移植之环境变量bootargs
环境变量 bootargs 的设置是在mx6ull_alientek_nand.h文件中。
mx6ull_alientek_nand.h文件所在目录:Uboot源码的根目录下 include/configs
如果是 NAND-Flash版的开发板,则 bootargs参数值如下设置:
#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"
下面对上面的 bootargs环境变量值进行分析。
环境变量 bootargs值如下:
"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"\
CONFIG_BOOTARGS_CMA_SIZE 宏为空,如下:
#define CONFIG_BOOTARGS_CMA_SIZE ""
环境变量 bootargs最终展开为:
"bootargs=console=ttymxc0,115200 ubi.mtd=4 " \
"root=ubi0:rootfs rootfstype=ubifs " \
"mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs)\0"\
bootargs 环境变量 就是设置了很多的参数的值,这些参数 Linux 内核会使用到。
bootargs 环境变量主要设置两个参数:console,root与 rootfstype 。
(1) console
console 用来设置 linux 终端 ( 或者叫控制台 ) ,也就是通过什么设备来和 Linux 进行交互,是
串口还是 LCD 屏幕?如果是串口的话应该是串口几等等。一般设置串口作为 Linux 终端,这样
我们就可以在电脑上通过 SecureCRT 来和 linux 交互了。这里设置 console 为 ttymxc0 ,因为 linux
启动以后 I.MX6ULL 的串口 1 在 linux 下的设备文件就是 /dev/ttymxc0 ,在 Linux 下,一切皆文
件。
设 置 ttymxc0 (也就是串口 1 )作为 Linux 的终端,并且串口波特率设置为 115200 。
(2) root
Linux系统启动以后,会有一个根文件系统的概念。这个根文件系统也就是 root。
root 用来设置根文件系统的位置。
这里根文件系统的位置是 "ubi0:rootfs "。
(3) rootfstype
此选项一般配置 root 一起使用, rootfstype 用于指定根文件系统类型。
如果根文件系统为 ext 格式的话,此选项无所谓。
如果根文件系统是 yaffs 、 jffs 或 ubifs 的话就需要设置此选项,指 定根文件系统的类型。