目前烧写完CC(chaos calmer 15.05)版本,查看其uboot变量如下:

ath> printenv
bootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 init=/sbin/init mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),14528k(rootfs),1408k(uImage),64k(mib0),64k(ART)
bootcmd=bootm 0x9fE80000
bootdelay=2
baudrate=115200
ethaddr=0x00:0xaa:0xbb:0xcc:0xdd:0xee
dir=
lu=tftp 0x80060000 ${dir}u-boot.bin&&erase 0x9f000000 +$filesize&&cp.b $fileaddr 0x9f000000 $filesize
lf=tftp 0x80060000 ${dir}openwrt-ar71xx-generic-ap143-16M-rootfs-squashfs.bin&&erase 0x9f050000 +0xE30000&&cp.b $fileaddr 0x9f050000 $filesize
lk=tftp 0x80060000 ${dir}openwrt-ar71xx-generic-ap143-16M-kernel.bin&&erase 0x9fE80000 +$filesize&&cp.b $fileaddr 0x9fE80000 $filesize
ethact=eth0
ipaddr=192.168.2.101
serverip=192.168.2.234
stdin=serial
stdout=serial
stderr=serial

Environment size: 742/65532 bytes

具体变量定义可以查看openwrt官网的声明。

地址如下:  https://wiki.openwrt.org/doc/techref/bootloader/uboot.config

下面简单介绍一下:

bootargs:The contents of this variable are passed to the Linux kernel as boot arguments (aka "command line").

传送给linux内核的参数,用于启动(boot),也称作命令行。

bootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 init=/sbin/init mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),14528k(rootfs),1408k(uImage),64k(mib0),64k(ART)

(1)console=ttyS0 串口

(2)115200  波特率为115200

(3)root=31:02     ?暂时不知什么意思

(4)rootfstype=jffs2  文件系统为jffs2

(5)init=/sbin/init   初始化脚本调用/sbin/init

(6)mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),14528k(rootfs),1408k(uImage),64k(mib0),64k(ART)

mtd分区为:   u-boot  256k

u-boot-env     64k

rootfs   14528k

uImage  1408k(linux 内核)

mib0   64k(factory)

ART    64k(无线校正区)

启动完成后,查看分区情况可以看到:

root@OpenWrt:/# cat /proc/mtd
      dev:    size         erasesize  name
      mtd0: 00040000 00010000 "u-boot"
      mtd1: 00010000 00010000 "u-boot-env"
      mtd2: 00e30000 00010000 "rootfs"
      mtd3: 00be0000 00010000 "rootfs_data"
      mtd4: 00160000 00010000 "kernel"
      mtd5: 00010000 00010000 "factory"
      mtd6: 00010000 00010000 "art"
      mtd7: 00f80000 00010000 "firmware"

bootcmd:This variable defines a command string that is automatically executed when the initial countdown is not interrupted. This command is only   executed when the variable bootdelay is also defined!

当初始化(initial)计时结束后开始执行此命令,此命令不可被中断,并且只能跟bootdelay一起使用。

bootcmd=bootm 0x9fE80000      跳转到地址0x9fE80000去启动

bootm命令可以引导启动存储在内存中的程序映像。这些内存包括RAM和可以永久保存的Flash。
第1个参数addr是程序映像的地址,这个程序映像必须转换成U-Boot的格式。
第2个参数对于引导Linux内核有用,通常作为U-Boot格式的RAMDISK映像存储地址;也可以是传递给Linux内核的参数(缺省情况下传递bootargs环境变量给内核)。
附加说明: 要求二进制代码为制定格式的。通常为mkimage处理过的二进制文件。起动UBOOT TOOLS制作的压缩LINUX内核, bootm 3200000

bootdelay:After reset, U-Boot will wait this number of seconds before it executes the contents of the bootcmd variable. During this time a countdown is printed, which can be interrupted by pressing any key. Set this variable to 0 boot without delay. Be careful: depending on the contents of your bootcmd variable, this can prevent you from entering interactive commands again forever! 
Set this variable to -1 to disable autoboot.

reset后,经过bootdelay的时间后,执行bootcmd命令。在此期间,打印countdown计时,此时可以按任意键打断。如果这个值设置为0,则立即执行bootcmd,无需等待bootdelay的时间。如果设置为-1,则进制自动启动(autoboot)

bootdelay=2  倒计时2 . 1 后执行bootcmd命令

baudrate:a decimal number that selects the console baudrate (in bps)

串口的波特率(单位:bps)

baudrate=115200

ethaddr:Ethernet MAC address for first/only ethernet interface (eth0 in Linux). 
This variable can be set only once (usually during manufacturing of the board). U-Boot refuses to delete or overwrite this variable once it has been set.

第一个以太口的MAC地址,这个变量只可被设置一次(一般在制造单板时设置)。一旦设置,U-Boot拒绝删除或覆盖这个变量。

ethaddr=0x00:0xaa:0xbb:0xcc:0xdd:0xee    地址设置为: 00:aa:bb:cc:dd:ee

设置lu lf 和 lk 为别名,代替后面的命令集

lu=tftp 0x80060000 ${dir}u-boot.bin&&erase 0x9f000000 +$filesize&&cp.b $fileaddr 0x9f000000 $filesize

(1) 将u-boot.bin文件上传到0x80060000地址;

(2)然后从地址0x9f000000开始,擦除filesize大小;

(3)从fileaddr地址中复制数据,大小为filesize,到地址0x9f000000.

也就是说设备的地址从0x9f000000开始,到 0x9f000000+filesize里面存放的是u-boot。

lf=tftp 0x80060000 ${dir}openwrt-ar71xx-generic-ap143-16M-rootfs-squashfs.bin&&erase 0x9f050000 +0xE30000&&cp.b $fileaddr 0x9f050000 $filesize

(1)上传openwrt-ar71xx-generic-ap143-16M-rootfs-squashfs.bin到地址0x80060000;

(2)然后从地址0x9f050000开始,擦除0xE30000大小;

(3)从fileaddr地址中复制数据,大小为filesize,到地址0x9f050000

也就是说设备的地址从0x9f050000开始,到 0x9f050000+filesize里面存放的是rootfs。

lk=tftp 0x80060000 ${dir}openwrt-ar71xx-generic-ap143-16M-kernel.bin&&erase 0x9fE80000 +$filesize&&cp.b $fileaddr 0x9fE80000 $filesize

(1)上传openwrt-ar71xx-generic-ap143-16M-kernel.bin到地址0x80060000;

(2)然后从地址0x9fE80000开始,擦除filesize大小;

(3)从fileaddr地址中复制数据,大小为filesize,到地址0x9E80000

也就是说设备的地址从0x9fE80000开始,到 0x9fE80000+filesize里面存放的是kernel。

ethact: uboot 要求使用环境变量 "ethact" 来指明寻找网络设备的起点。

ethact=eth0

ipaddr=192.168.2.101      设置设备地址,用于tftp使用
serverip=192.168.2.234    设置服务器地址,供tftp使用

输入,输出,错误打印均在串口

stdin=serial
stdout=serial
stderr=serial

附录:

cp [.b, .w, .l] source target count

- copy memory

cp命令可以在内存中复制数据块,包括对Flash的读写操作。

第1个参数source是要复制的数据块起始地址。

第2个参数target是数据块要复制到的地址。这个地址如果在Flash中,那么会直接调用写Flash的函数操作。所以U-Boot写Flash就使用这个命令,当然需要先把对应Flash区域擦净。

第3个参数count是要复制的数目,根据cp.b cp.w cp.l分别以字节、字、长字为单位。

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

  1. openwrt设置uboot环境变量在flash上的存储地址

    1.分析如下 ubootenv_add_app_config ubootenv_add_uci_config "/dev/mtd1" "0x40000" &qu ...

  2. uboot环境变量分析

    uboot的环境变量在程序的运行和调试过程中都发挥着比较重要的作用. 一.环境变量 可以理解为全局变量,但是他的生命周期比全局变量要长,当程序已经结束运行时,全局变量就会消亡,但是环境变量在下次上电运 ...

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

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

  4. uboot环境变量

    一. uboot运行时环境变量分布 1.1. 环境变量有2份,一份在Flash中,另一份在DDR中.uboot开机时一次性从Flash中读取全部环境变量到DDR中作为环境变量的初始化值,然后使用过程中 ...

  5. uboot环境配置

    uboot环境配置 通过配置uboot让它在启动过程中从tftp获取内核和设备树,并从在加载内核之后把通过启动参数将"从nfs挂载根文件系统"传入内核.这个配置主要是通过uboot ...

  6. uboot环境变量实现分析

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

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

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

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

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

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

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

随机推荐

  1. 开源的许可证GPL、LGPL、BSD、Apache 2.0的通俗解释

    软件开发者要开源软件,不单单是开放源代码就可以了,选择一种许可证很重要,一个许可证之于软件就相当于价值观之于普通人,代表了这个软件的基本品性.一个错误的许可证选择可能会直接导致整个项目的失败. 各种开 ...

  2. ASP.NET网站怎么发布 Web项目程序怎么发布部署(暂时收藏)

    Web程序如何发布部署呢.网站项目做好了,需要发布出来,提交给客户,装上服务器.那怎么在ASP.NET开发环境中将网站程序发布出来呢 ^_^   工具/原料 Visual Studio 2010  ( ...

  3. js的严格模式

    严格模式: 严格模式这下的主要区别如下: 严格模式下的好处:

  4. hdu 3480 Division(斜率优化DP)

    题目链接:hdu 3480 Division 题意: 给你一个有n个数的集合S,现在让你选出m个子集合,使这m个子集合并起来为S,并且每个集合的(max-min)2 之和要最小. 题解: 运用贪心的思 ...

  5. Qt出现常量有换行符的错误的解决方法

    可以使用 QString::fromLocal8Bit 来将本地字符编码转换为 Unicode 形式的 QString.

  6. Cocoapod安装使用和常见问题(转载)

      1.cocoapod的按照,cocoapod是运行在ruby环境下的,在ruby环境的 ,像cocoapod这样的开源项目时放在放在rubygems服务器上面的,但国内访问https://ruby ...

  7. CentOs + Nginx + php-fpm + MySql 依赖库安装

    依赖库和开发工具 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype free ...

  8. python 内嵌函数, 闭包, 函数装饰器

    一.  函数内嵌 闭包 在python中,函数可以作为返回值, 可以给变量赋值. 在python中, 内置函数必须被显示的调用, 否则不会执行. #!/usr/bin/env python #-*- ...

  9. JDOM与DOM主要有两方面不同

    我这丝毫没有吐槽的意思哟,只是想说作为一个合格的程序员大家最起码需要做到思维严谨这点,在有能力的情况下对用户体验能提点建议最好.自己写的代码一定要经过严格测试再交付,不要指望测试人员帮你测试再去修改, ...

  10. 优秀代码要求(转自http://www.cnblogs.com/brishenzhou/p/6284188.html)

    一段优秀的代码,它一般需要满足以下几个条件: #统一规范# 所有的代码,第一前提必须是统一规范,而常见的统一规范主要包括有以下内容: 1)统一编辑器规范 在团队开发中,我们并不对各个开发人员使用的编辑 ...