uboot环境变量
一. uboot运行时环境变量分布
1.1. 环境变量有2份,一份在Flash中,另一份在DDR中。uboot开机时一次性从Flash中读取全部环境变量到DDR中作为环境变量的初始化值,然后使用过程中都是用DDR中这一份,用户可以用saveenv指令将DDR中的环境变量重新写入Flash中去更新Flash中环境变量。下次开机时又会从Flash中再读一次。
二. ubooth环境变量分析
x210 # print baudrate=115200 ethaddr=00:40:5c:26:0a:5b gatewayip=192.168.1.1 ipaddr=192.168.1.20 netmask=255.255.255.0 serverip=192.168.1.141 bootdelay=3 bootcmd=movi read kernel 30008000; bootm 30008000 bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3 Environment size: 276/16380 bytes
2.1. 常见变量说明
a. bootdelay:启动运行倒数时间
b. baudrate:通讯波特率
c. ipaddr是开发板的本地IP地址
d. serverip是开发板通过tftp指令去tftp服务器下载东西时,tftp服务器的IP地址。
e. gatewayip是开发板的本地网关地址
f. netmask是子网掩码
g. ethaddr是开发板的本地网卡的MAC地址。
2.2. bootcmd变量
a. uboot启动后会开机自动倒数bootdelay秒,如果没有人按下回车打断启动,则uboot会自动执行启动命令来启动内核。
b. uboot开机自动启动时实际就是在内部执行了bootcmd这个环境变量的值所对应的命令集。
c. bootcmd=movi read kernel 30008000; bootm 30008000 意思是:将iNand的kernel分区读取到DDR内存的0x30008000地址处,然后使用bootm启动命令从内存0x30008000处去启动内核。
2.3. bootargs变量
2.3.1. linux内核启动时可以接收uboot给他传递的启动参数,这些启动参数是uboot和内核约定好的形式、内容,linux内核在这些启动参数的指导下完成启动过程。这样的设计是为了灵活,为了内核在不重新编译的情况下可以用不同的方式启动。
2.3.2. 在uboot的环境变量中设置bootargs,然后bootm命令启动内核时会自动将bootargs传给内核。
2.3.3. 示例:bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3
a. console=ttySAC2,115200 控制台使用串口2,波特率115200.
b. root=/dev/mmcblk0p2 rw 根文件系统在SD卡端口0设备(iNand)第2分区,根文件系统是可读可写的
c. init=/linuxrc linux的进程1(init进程)的路径
d. rootfstype=ext3 根文件系统的类型是ext3
三. uboot阶段对Flash的分区
3.1. 分区一般规则
a. 各分区彼此相连,前面一个分区的结尾就是后一个分区的开头。
b. 整个flash充分利用,从开头到结尾。
c. uboot必须在Flash开头,其他分区相对位置是可变的。
d. 各分区的大小由系统移植工程师自己来定,一般定为合适大小(不能太小,太小了容易溢出;不能太大,太大了浪费空间)
e. 分区在系统移植前确定好,在uboot中和kernel中使用同一个分区表。将来在系统部署时和系统代码中的分区方法也必须一样。
3.2. 查看uboot分区
x210 # fastboot [Partition table on MoviNAND] ptn 0 name='bootloader' start=0x0 len=N/A (use hard-coded info. (cmd: movi)) ptn 1 name='kernel' start=N/A len=N/A (use hard-coded info. (cmd: movi)) ptn 2 name='ramdisk' start=N/A len=0x300000(~3072KB) (use hard-coded info. (cmd: movi)) ptn 3 name='config' start=0xAECC00 len=0x1028DC00(~264759KB) ptn 4 name='system' start=0x10D7A800 len=0x1028DC00(~264759KB) ptn 5 name='cache' start=0x21008400 len=0x65F7000(~104412KB) ptn 6 name='userdata' start=0x275FF400 len=0xC0C6FC00(~3158463KB)
3.2.1. bootloader:存放uboot一类的启动文件,最终目标是启动操作系统内核。
3.2.2. kernel:存放内核,操作系统的核心。
3.2.3. ramdisk:内存盘,把系统内存划出一部分当作硬盘使用,速度快。
3.2.4. config:存放配置文件。
3.2.5. system:存放系统镜像文件。
3.2.6. cache:存放缓存数据。
3.2.7. userdata:存放用户数据。
PS:刷系统常用bootloader,kernel,system三个分区。
参考《朱老师.1.2ARM裸机课件》