一. uboot运行时环境变量分布

  1.1. 环境变量有2份,一份在Flash中,另一份在DDR中。uboot开机时一次性从Flash中读取全部环境变量到DDR中作为环境变量的初始化值,然后使用过程中都是用DDR中这一份,用户可以用saveenv指令将DDR中的环境变量重新写入Flash中去更新Flash中环境变量。下次开机时又会从Flash中再读一次。

二. ubooth环境变量分析

x210 # print
baudrate=
ethaddr=::5c::0a:5b
gatewayip=192.168.1.1
ipaddr=192.168.1.20
netmask=255.255.255.0
serverip=192.168.1.141
bootdelay=
bootcmd=movi read kernel ; bootm
bootargs=console=ttySAC2, root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3 Environment size: / 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 name='bootloader' start=0x0 len=N/A (use hard-coded info. (cmd: movi))
ptn name='kernel' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn name='ramdisk' start=N/A len=0x300000(~3072KB) (use hard-coded info. (cmd: movi))
ptn name='config' start=0xAECC00 len=0x1028DC00(~264759KB)
ptn name='system' start=0x10D7A800 len=0x1028DC00(~264759KB)
ptn name='cache' start=0x21008400 len=0x65F7000(~104412KB)
ptn 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裸机课件》

uboot环境变量的更多相关文章

  1. uboot环境变量实现分析

    u-boot的环境变量用来存储一些经常使用的参数变量,uboot希望将环境变量存储在静态存储器中(如nand nor eeprom mmc). 其中有一些也是大家经常使用,有一些是使用人员自己定义的, ...

  2. 在Linux里读取UBOOT环境变量

    转载:http://falloutmx.blog.163.com/blog/static/39236020201211145010154/ 可以通过mtd方式读取,也可以用ioremap方式.不过这些 ...

  3. u-boot 环境变量参数设置

    今天本来是烧写内核,结果一不小心把uboot也整不能用了,无奈之下只好重新烧个uboot,等都弄好以后,发现系统还是启动不了,原来是启动参数设置不对,于是找到了这篇文章,//是我添加的内容. 原文地址 ...

  4. OK335xS U-boot 环境变量解析

    /************************************************************************************************** ...

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

    MPC8313ERDB在Linux从NAND FLASH读取UBoot环境变量的代码分析 Yao.GUET@2014-05-19 一.故事起因 由于文件系统的增大,已经大大的超出了8MB的NOR FL ...

  6. I.MX6 Linux U-boot 环境变量解析

    /********************************************************************************** * I.MX6 Linux U- ...

  7. Linux系统——访问U-BOOT环境变量

    Linux系统下访问U-BOOT环境变量 移植过U-BOOT的人,都知道:在U-BOOT中存有ENV.但U-BOOT在引导内核启动之后,U-BOOT的生命周期就结束了.那么启动LINUX内核之后,U- ...

  8. uboot 环境变量

    从bootm 命令讲起 1 找到linux的内核入口 Bootm命令通过读取uImage的头部0×40字节的信息,将uImage定位到正确的地址,同时找到linux的内核入口地址. 这个地方就涉及到u ...

  9. uboot环境变量与内核MTD分区关系

    uboot 与系统内核中MTD分区的关系: 分区只是内核的概念,就是说A-B地址放内核,C-D地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等. 1:在内核MTD中可以定义分区A~B, ...

  10. uboot环境变量(设置bootargs向linux内核传递正确的参数)

    这是我uboot的环境变量设置,在该设置下可以运行initram内核(从内存下载到nandflash再运行),但是运行nfs根文件系统的时候一直出错,各种错误.查看了很多资料后猜想应该是uboot传递 ...

随机推荐

  1. 数据结构-STL序列式容器总结

    根据序列在容器中的排列特性,将常见数据结构分为:序列式容器和关联式容器. 常见序列式容器有 1.array(build-in)c++內建 2.vector 3.heap(以算法方式呈现) 4.prio ...

  2. layui静态表格固定td宽度,table固定td宽度

    正在做一个项目,要求数据表的列是不固定的,有可能是有10列,有可能是20列,第一列宽度要固定,然后我怎么设置都没有用, 这个问题困扰了我三天,后来终于百度到了, 这个博客: https://www.c ...

  3. Zabbix4.x安装部署

    zabbix监控的重要性就不用再赘述了.直接上干货. 1.环境背景: Linux:CentOS 7.x, Database:MySQL zabbix server 和 zabbix mysql 安装在 ...

  4. js 反斜杠 处理

    var t = jsonstr.replace(/\\/g,"\\\\\\\\"); --\\ 表示 代码 输出 \' 单引号 \" 双引号 \& 和号 \\ 反 ...

  5. vs中free内存失败

    关于vs中free内存失败: 主要有以下两个原因: 1. 函数参数调用写错.特别是传指针进去的时候,若形参与实参不对应,会出错. 2. 内存分配不够,这个原因主要是因为程序中访问到了内存外的地址,即使 ...

  6. 五大 JAVA Web 框架的优缺点对比,Spring MVC 领先

    毫无疑问,Java 是当今世界上最重要的编程语言之一.js 框架给程序员提供了 一个可以构建程序的坚实基础.它包括定义的类和功能,用于硬件设备管理,与系统软件交互并处理输入,让开发人员变得更轻松.Ja ...

  7. HTTP访问控制(CORS)踩坑小记

    前几天在帮后端排查一个cors的问题的时候发现的一些小坑特此记录 ** cors的本质是出于安全原因,浏览器限制从脚本内发起的跨源HTTP请求. 例如,XMLHttpRequest和FetchAPI遵 ...

  8. git连接远程仓库时,出现“ Repository not found"的解决办法

    2018-08-25 今天连接远程仓库时,出现: 原来是远程仓库地址名字错了. 解决方法: 1.找到.git目录 2.进入.git找到config文件 3.修改config里面的远程地址url

  9. HDU6025 Coprime Sequence(gcd)

    HDU6025 Coprime Sequence 处理出数列的 \(gcd\) 前缀和后缀,删除一个数后的 \(gcd\) 为其前缀和后缀的 \(gcd\) . 遍历数列取 \(max\) 即为答案. ...

  10. ssd写入量剩余读写次数怎么查

    固态硬盘ssd写入量剩余读写次数怎么查 为什么要查固态硬盘的写入量呢,主要是因为闪存是有写入次数限制的,所以查次数就是看看寿命还有多少,说白了这是对耐久度的一点担忧.其实目前原厂出品的固态硬盘,即便是 ...