0 开发环境
开发板1:TL138
开发板2:Mini2440
引导系统:Linux
1 环境变量简介
可以通过U-Boot的setenv命令设置任意的环境变量,然后通过saveenv命令保存即可,例如:
setenv bootargs noinitrd root=/dev/mtdblock3 rw console=ttySAC0,115200 init=/linuxrc mem=64M
说明:上述命令只设置了一个环境变量bootargs(并非同时设置多个环境变量),noinitrd root=/dev/mtdblock3 rw console=ttySAC0,115200 init=/linuxrc mem=64M整体作为该环境变量的值(U-Boot只将其整体当作一个字符串,而不会根据空格将其划分为多个项,相反,空格也是环境变量值的一部分!),环境变量与其值之间用空格分隔(不能使用等号=)。
U-Boot的环境变量可以任意设置的,至于是否有意义,有何意义,U-Boot完全不管!U-Boot只将用户所设置的环境变量都当作字符串而已!
那岂不是容易乱套?答案是否定的。虽然用户可以设置任意的环境变量,但是内核只认得特定环境变量,因此用户还是需要按要求设置(虽然可以任意设置,但是没有意义)。
那么,内核都认得那些环境变量呢?下面就是根据TL138和Mini2440两块开发板的启动参数为例进行分析说明。
2 TL138启动参数分析
TL138搭载的是TI的Omapl138处理器,可以从Nand Flash启动或者SD卡启动。不管从何种方式启动,其根文件系统可以保存于Nand Flash或者SD卡中。为了是的开发板可以成功加载根文件系统,需要指定根文件系统所在的位置。
(1)挂载Nand Flash文件系统
setenv bootargs console=ttyS2,115200n8 ip=off ubi.mtd=4,2048 root=ubi0_0 rootfstype=ubifs mem=32M@0xc0000000 mem=64M@0xc4000000
(2)挂载SD卡文件系统
setenv bootargs console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext3 mem=32M@0xc0000000 mem=64M@0xc4000000
console——终端设置,console=ttyS2表示使用串口2输出启动信息。可以改为tty0,这时在LCD上显示启动信息[9]。
root——该参数告诉内核启动时使用哪个设备作为根文件系统[3]。mmcblk0p2是/dev/下的一个设备,如下截图所示。
rootfstype —— 根文件系统的类型:ubifs是针对nand flash的一种文件系统[1];ext3是制作SD启动卡时使用的文件类型[2]。
rw —— 以读写方式加载根文件系统(默认),只读可使用ro[3]。
mem——限制内核使用的内存数量[3]。mem=size@addr格式的参数,表示从addr地址(物理地址)开始的size大小的内存区域。如果没有”@addr”则默认起始地址为零[8]。
3 Mini2440启动参数分析
待续。。。
参考资料
[1]UBIFS_百度百科
[2]Ext3_百科百科
[3]Linux操作系统内核启动参数详细解析
[4]内核启动参数机制学习笔记
[5]内核启动参数详解
[6]内核启动参数
[7]Linux内核启动参数
[8]Linux内核启动参数“mem=xxx”的处理
[9]Lcd显示屏上显示板子启动的信息
[10]Uboot启动参数设置
[11]记录一下自己在mini2440上面 使用uboot的曲折的经历
[12]u-boot2012.04.01移植到mini2440
[13]uboot 设置启动参数
[14]u-boot启动内核的几种方式
[15]uboot通过添加指令自动启动内核