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方式.不过这些 ...
随机推荐
- 巨蟒python全栈开发-第11阶段 devops-git&&openpyxl2
大纲 1.git分支 2.git tag 3.git 忽略文件 4.正则表达式 5.openpyxl写数据 6.openpyxl读数据 1.git分支 2.git tag 3.git 忽略文件 4.正 ...
- C# ArcEngine 实现点击要素高亮并弹出其属性
本文是模仿ArcMap里面的Identify(识别)功能,通过点击要素,使其高亮显示并弹出其属性表!本文只做了点击查询! 本文所用的环境为VS2010,AecEngine基于C#语言,界面是用Dev做 ...
- Solidworks to Urdf to Sdf
. The urdf using tree form that does not support parallel robots (close loop robots). . The sdf usin ...
- new Date()的浏览器兼容性问题
在页面中,我们使用了一个时间上的组件来开发时间选择框,在Chrome下是可以正常运行的,但是发现在IE下是无法正常工作的. 问题出在哪里呢? js从时间获取的时间字符串如果是"-" ...
- tomcat启动报错:Injection of autowired dependencies failed
Error creating bean with name 'backPrintPaperController': Injection of autowired dependencies failed ...
- 剑指Offer——左旋转字符串
题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”ab ...
- 获取当前文件夹以及子文件夹下所有文件C++
void getFiles( string path,vector<string>& files) { //文件句柄 ; //文件信息 struct _finddata_t fil ...
- 移动支付--银联,支付宝,微信(android)
在这个移动互联网快速发展的时代,手机已经成为人们生活或者出行之中必不可少的设备了,如今非常多城市的商户都能够採用支付宝,微信支付了.人们出门仅仅须要随身携带带手机.不用带大量现金就能够放心购物了.如今 ...
- (2.4)Mysql之SQL基础——下载与使用测试库
(2.4)SQL基础——下载与使用测试库 1.查看与下载测试数据库 2.查看安装向导视图 3.安装 [1]安装:解压后用 mysql 命令安装(记得加上set autocommit=1) [2]核验: ...
- IIS7 Microsoft.Web.Administration 创建Application问题
在使用DirectoryEntry操作IIS时,可以设置很多属性.但使用Microsoft.Web.Administration中的一些类时,不知道在哪设置.例如:AccessScript,Acces ...