openwrt设置uboot环境变量在flash上的存储地址
1.分析如下
ubootenv_add_app_config
ubootenv_add_uci_config "/dev/mtd1" "0x40000" "0x2000" "0x20000"
这两个函数定义在文件package/boot/uboot-envtools/files/uboot-envtools.sh中,先来解析以上语句:
/dev/mtd1 : 指定boot_env所在flash上的分区
0x40000 : 指定boot_env所在分区上的偏移量(这个参数有点费解,这个参数是否是多余的?)
0x2000 :指定uboot的环境变量存储空间大小,注意这个大小,必须与在package/boot/uboot-${boardname}/Makefile中定义的ENV_SIZE大小一致,否则会报CRC校验出错,比如mtd2分区的大小为1MiB,uboot指定的大小为0x40000,那么应该使用0x40000
0x20000 :指定flash的sector大小
ubootenv_add_app_config这个函数就是将"/dev/mtd1" "0x40000" "0x2000" "0x20000" 这些内容追加到/etc/fw_env.config
2.举例论证
笔者使用的flash分区如下:
root@OpenWrt:/# cat /proc/mtd
dev: size erasesize name
mtd0: 00200000 00040000 "u-boot"
mtd1: 00100000 00040000 "u-boot-env"
mtd2: 00100000 00040000 "dts"
mtd3: 00800000 00040000 "kernel"
mtd4: 00800000 00040000 "rootfs"
flash的扇区大小为0x40000=256KiB
uboot的环境变量保存在flash的mtd1分区上
那么/etc/fw_env.config的值如下:
/dev/mtd1 0x0000 0x40000 0x40000
0x0000:这个值为0比较费解
第一个0x40000来自uboot的宏定义ENV_SIZE
第二个0x40000来自uboot的宏定义CONFIG_ENV_SECT_SIZE
3.fw_printenv和fw_setenv报错分析(假设只有其中一项参数不正确)
3.1 当指定的环境变量大小不正确时提示:
root@OpenWrt:/etc# fw_printenv
Warning: Bad CRC, using default environment
3.2 当指定的第一个参数分区偏移量不正确且该值不等于该分区在flash的偏移量大小:
root@OpenWrt:/etc# fw_printenv
Warning: Bad CRC, using default environment
3.3 当指定的分区偏移量没有与flash的sector大小成倍数时:
root@OpenWrt:/etc# fw_printenv
Environment does not start on (erase) block boundary
3.4 当指定的第一个参数分区偏移量等于该分区在flash上的偏移量时:
可以读取出环境变量,但是没法修改环境变量,错误提示如下:
root@OpenWrt:/etc# fw_setenv bootdelay 4
MTD erase error on /dev/mtd2: Invalid argument
Error: can't write fw_env to flash
openwrt设置uboot环境变量在flash上的存储地址的更多相关文章
- uboot环境变量区为何不能放在data段
一.疑问 环境变量也是全局变量,为何不能像其他的全局变量放在data段呢?为什么要放在堆中或者使用ENV_IS_EMBEDDED定义的CFG_ENV_SIZE的空间大小,又为什么需要这么大的空间呢? ...
- Linux系统——访问U-BOOT环境变量
Linux系统下访问U-BOOT环境变量 移植过U-BOOT的人,都知道:在U-BOOT中存有ENV.但U-BOOT在引导内核启动之后,U-BOOT的生命周期就结束了.那么启动LINUX内核之后,U- ...
- uboot环境变量初始化
一.环境变量概述 1.环境变量的概念 可以理解为用户对软件的全局配置信息,这部分信息应该可以从永久性存储器上读取,能被查询,能被修改. 启动过程中,应该首先把环境变量读取到合适的内存区域,然后利用环境 ...
- u-boot 环境变量参数设置
今天本来是烧写内核,结果一不小心把uboot也整不能用了,无奈之下只好重新烧个uboot,等都弄好以后,发现系统还是启动不了,原来是启动参数设置不对,于是找到了这篇文章,//是我添加的内容. 原文地址 ...
- MPC8313ERDB在Linux从NAND FLASH读取UBoot环境变量的代码分析
MPC8313ERDB在Linux从NAND FLASH读取UBoot环境变量的代码分析 Yao.GUET@2014-05-19 一.故事起因 由于文件系统的增大,已经大大的超出了8MB的NOR FL ...
- windows上自动设置java环境变量的脚本
近期打算学习安卓开发,于是乎要准备java开发环境,安装好jdk后,就要设置java环境变量,java环境变量要设置JAVA_HOME,Path,CLASSPATH三个值,每次配置查百度复制粘贴都很麻 ...
- 【转】windows上自动设置java环境变量的脚本
转载:http://www.cnblogs.com/flowwind/p/4066146.html 近期打算学习安卓开发,于是乎要准备java开发环境,安装好jdk后,就要 设置java环境变量,ja ...
- uboot环境变量实现分析
u-boot的环境变量用来存储一些经常使用的参数变量,uboot希望将环境变量存储在静态存储器中(如nand nor eeprom mmc). 其中有一些也是大家经常使用,有一些是使用人员自己定义的, ...
- 在Linux里读取UBOOT环境变量
转载:http://falloutmx.blog.163.com/blog/static/39236020201211145010154/ 可以通过mtd方式读取,也可以用ioremap方式.不过这些 ...
随机推荐
- js获取浏览器信息及版本(兼容IE)
获取浏览器信息方法有很多种,但是要是兼容ie旧版本就有点麻烦了,因为很多方法在旧版本ie是不支持的,所以ie我做了单独处理,但是目前还有小问题,就是想显示QQ浏览器,搜狗浏览器..这样的,这样还实现不 ...
- 持续集成之戏说Check-in Dance(转)
add by zhj: 先说一下持续集成的定义,这是ThoughtWorks首席科学家Martin Fowler在<持续集成>第二版中给出的,“持续集成是一种软件开发实践.在持续集成中,团 ...
- 005-maven坐标和依赖
1.何为Maven坐标 groupId.artifactId.version.packaging.classifier 中央仓库:http://repol.maven.org/maven22.坐标详解 ...
- 联想yoga table2 1371f 进入bios 的巧妙方法
win8.1 的平板,无键盘,触屏失灵,接了个鼠标 我在这里向大家介绍最后一个方法<ignore_js_op>▲在metro界面下找到设置选项 <ignore_js_op> ...
- oracle建表设置主键自增
首先创建一张表 create table member( memberId number primary key, memberMail )not null, memberName ) not nul ...
- java 多线程 day10 获取线程的返回值 CallableAndFuture
import java.util.Random;import java.util.concurrent.*; /** * Created by chengtao on 17/12/4. * * 获取线 ...
- php内存溢出,出现Allowed memory size of 8388608 bytes exhausted错误的解决办法
是因为php页面消耗的最大内存默认是为128M (在PHP的ini件里可以看到) ,如果文件太大或图片太大在读取的时候会发生上述错误. 解决办法: 1.修改 php.ini 将memory_limit ...
- SDUT中大数实现的题目,持续更新(JAVA实现)
SDUT2525:A-B (模板题) import java.util.Scanner; import java.math.*; public class Main { public static v ...
- matplotlib 的 subplot, axes and axis
fig = plt.figure('多图', (10, 10), dpi=80) #第一个指定窗口名称,第二个指定图片大小,创建一个figure对象 plt.subplot(222) #2*2的第二个 ...
- 通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小
题目描述: 有两个序列a,b,大小都为n,序列元素的值任意整数,无序:要求:通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小.例如:var a=[100,99,98, ...