Linux下如何访问和修改u-boot环境变量?
2015-05-08 17:19
337 查看
uboot下可以通过命令访问和修改环境变量,但是如果需要在Linux系统下访问这些数据该怎么办呢?其实uboot早就帮我们想好了。
1、编译fw_printenv工具
在你使用的uboot代码中用以下编译指令:
make env
这样就可以编译tools/env下的代码,编译出的fw_printenv工具有读写uboot环境变量区的能力。这个工具是针对目标机的,也就是说如果你的uboot代码之前是针对ARM编译的话,fw_printenv也是交叉编译给ARM芯片的。
2、安装fw_printenv工具
到/tools/env目录中,将编译好的fw_printenv拷贝到目标机的文件系统中,并通过"ln -s fw_printenv fw_setenv",创建一个fw_setenv到fw_printenv的软链。
这个工具还需要一个配置文件,以获取uboot的ENV区域的位置信息。默认状态下,请将fw_env.config文件拷贝到目标机的文件系统的/etc目录下。然后结合uboot配置中定义的ENV区和Linux下mtd分区的情况修改配置文件。具体的修改方法见fw_env.config文件中的说明及/tools/env/README文件。
3、fw_printenv工具的使用
其实fw_printenv使用起来和uboot下的printenv和setenv指令是一模一样的。
打印uboot环境变量:
fw_printenv [[ -n name ] | [ name ... ]]
# ./fw_printenv -n baudrate
115200
# ./fw_printenv baudrate
baudrate=115200
如果不指定name,fw_printenv会打印出ENV区中的所有环境变量
设置uboot环境变量:
fw_setenv name [ value ... ]
如果不指定value,表示要删除这个name的环境变量。
# ./fw_setenv temp tekkaman
# ./fw_printenv -n temp
tekkaman
# ./fw_setenv temp
# ./fw_printenv -n temp
## Error: "temp" not defined
问题:
[cpp] view
plaincopyprint?
if (oldval) {
/*
* Ethernet Address and serial# can be set only once
*/
if ((<strong>strcmp (name, "ethaddr") == 1)</strong> ||
(strcmp (name, "serial#") == 0)) {
fprintf (stderr, "Can't overwrite \"%s\"\n", name);
2 解决fw_setenv 时提示Warning: Bad CRC, using default environment
设置Fw_env.h 为实际使用值,并配置好fw_env.config
#define DEVICE1_NAME "/dev/mtd1"
#define DEVICE2_NAME "/dev/mtd2"
#define DEVICE1_OFFSET 0x0000
#define ENV1_SIZE 0x10000
#define DEVICE1_ESIZE 0x4000
1、编译fw_printenv工具
在你使用的uboot代码中用以下编译指令:
make env
这样就可以编译tools/env下的代码,编译出的fw_printenv工具有读写uboot环境变量区的能力。这个工具是针对目标机的,也就是说如果你的uboot代码之前是针对ARM编译的话,fw_printenv也是交叉编译给ARM芯片的。
2、安装fw_printenv工具
到/tools/env目录中,将编译好的fw_printenv拷贝到目标机的文件系统中,并通过"ln -s fw_printenv fw_setenv",创建一个fw_setenv到fw_printenv的软链。
这个工具还需要一个配置文件,以获取uboot的ENV区域的位置信息。默认状态下,请将fw_env.config文件拷贝到目标机的文件系统的/etc目录下。然后结合uboot配置中定义的ENV区和Linux下mtd分区的情况修改配置文件。具体的修改方法见fw_env.config文件中的说明及/tools/env/README文件。
3、fw_printenv工具的使用
其实fw_printenv使用起来和uboot下的printenv和setenv指令是一模一样的。
打印uboot环境变量:
fw_printenv [[ -n name ] | [ name ... ]]
# ./fw_printenv -n baudrate
115200
# ./fw_printenv baudrate
baudrate=115200
如果不指定name,fw_printenv会打印出ENV区中的所有环境变量
设置uboot环境变量:
fw_setenv name [ value ... ]
如果不指定value,表示要删除这个name的环境变量。
# ./fw_setenv temp tekkaman
# ./fw_printenv -n temp
tekkaman
# ./fw_setenv temp
# ./fw_printenv -n temp
## Error: "temp" not defined
问题:
1 解决uboot命令行中 不能设置ethaddr的问题(Can't overwrite "ethaddr"),修改Fw_env.c 中的fw_setenv函数代码改为如下。
[cpp] viewplaincopyprint?
if (oldval) {
/*
* Ethernet Address and serial# can be set only once
*/
if ((<strong>strcmp (name, "ethaddr") == 1)</strong> ||
(strcmp (name, "serial#") == 0)) {
fprintf (stderr, "Can't overwrite \"%s\"\n", name);
2 解决fw_setenv 时提示Warning: Bad CRC, using default environment
设置Fw_env.h 为实际使用值,并配置好fw_env.config
#define DEVICE1_NAME "/dev/mtd1"
#define DEVICE2_NAME "/dev/mtd2"
#define DEVICE1_OFFSET 0x0000
#define ENV1_SIZE 0x10000
#define DEVICE1_ESIZE 0x4000
相关文章推荐
- 如何在linux中改u-boot的环境变量--fw_setenv
- 如何修改Linux的环境变量
- Linux如何修改env看到的环境变量? .bashrc和.bash_profile区别
- Linux下访问u-boot环境变量简介
- Linux有问必答:如何在Linux中修改环境变量PATH
- Linux环境下如何修改环境变量
- Linux如何修改环境变量PATH,以及系统登录时读取文件的顺序
- Linux下修改/设置环境变量JAVA_HOME
- 如何修改PKG_CONFIG_PATH环境变量
- Linux下修改node的环境变量
- Linux中修改了环境变量,导致大多数命令无法使用的解决方法
- linux查看和修改PATH环境变量的方法
- 访问linux环境下的spring boot项目需要用户名和密码的解决办法
- linux系统查看和修改PATH环境变量的方法
- Linux查看和修改PATH环境变量的方法
- Linux下修改/设置环境变量JAVA_HOME
- linux查看和修改PATH环境变量的方法
- linux添加环境变量对/etc/profile文件进行修改过后导致命令用不了
- 理解Linux环境变量及配置文件执行顺序 博客分类: Linux 每个用户都有自己专属的运行环境,这个环境是由一组变量所定义,这些变量称之为环境变量。用户可以修改环境变量以满足自己的要求。
- linux查看和修改PATH环境变量的方法