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方式.不过这些 ...
随机推荐
- 4.1 - FTP文件上传下载
题目:开发一个支持多用户同时在线的FTP程序要求:1.用户加密认证2.允许同时多用户登录3.每个用户有自己的家目录,且只能访问自己的家目录4.对用户进行磁盘配额,每个用户的可用空间不同5.允许用户在f ...
- nsq里面WaitGroups两种实用的用法
看过好几遍了,觉得挺实用的,记录备忘一下. 1.开启很多个 goroutine 之后,等待执行完毕 type WaitGroupWrapper struct { sync.WaitGroup } fu ...
- mysql数据池设置
参考链接https://www.cnblogs.com/KKSoft/p/8040374.html python的数据库连接池包:DBUtils DBUtils提供两种外部接口: Persistent ...
- 003-SpringBoot导入xml配置
SpringBoot理念就是零配置编程,但是如果绝对需要使用XML的配置,我们建议您仍旧从一个@Configuration类开始,你可以使用@ImportResouce注解加载XML配置文件,我拿一个 ...
- sipp模拟freepbx分机测试(SIP协议调试)
1.sipp的安装 1) 在centos 7.2下安装 yum install make gcc gcc-c++ ncurses ncurses.x86_64 ncurses-devel ncurse ...
- 详解MySQL第二篇—DML语句
DML 语句: DML 操作是指对数据库中表记录的操作,主要包括表记录的插入(insert).更新(update).删除(delete)和查(select),是开发人员日常使用最频繁的操作.下面将依次 ...
- PAT 1037 Magic Coupon[dp]
1037 Magic Coupon(25 分) The magic shop in Mars is offering some magic coupons. Each coupon has an in ...
- Selenium+Python学习之一
刚入门selenium+Python,实验成功之后,记录一下过程. 首先是在知乎上面看到一个关于selenium+python的示例,于是自己便尝试搭建环境上手实验. 按照作者的代码敲一遍之后执行,竟 ...
- Delphi APP 開發入門(六)Object Pascal 語法初探
Delphi APP 開發入門(六)Object Pascal 語法初探 分享: Share on facebookShare on twitterShare on google_plusone_sh ...
- Spark --【宽依赖和窄依赖】
前言 Spark中RDD的高效与DAG图有着莫大的关系,在DAG调度中需要对计算过程划分stage,暴力的理解就是stage的划分是按照有没有涉及到shuffle来划分的,没涉及的shuffle的都划 ...