uboot环境变量

Posted linux-37ge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
View Code

  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) 
View Code

    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裸机课件》











以上是关于uboot环境变量的主要内容,如果未能解决你的问题,请参考以下文章

MPC8313ERDB在Linux从NAND FLASH读取UBoot环境变量的代码分析

uboot环境变量

uboot 放在哪里?

ubuntu学习前传—uboot常见环境变量

uboot中环境变量的加载写入过程详解

一文看懂如何配置OK335x平台 uboot环境变量工具