Linux下如何访问和修改u-boot环境变量?

  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

问题:

1  解决uboot命令行中 不能设置ethaddr的问题(Can't overwrite "ethaddr"),修改Fw_env.c 中的fw_setenv函数代码改为如下。

  1. if (oldval) {  
  2.     /* 
  3.      * Ethernet Address and serial# can be set only once 
  4.      */  
  5.     if ((<strong>strcmp (name, "ethaddr") == 1)</strong> ||  
  6.         (strcmp (name, "serial#") == 0)) {  
  7.         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


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
U-BOOT的移植 U-BOOT 的移植 说先在把U-BOOT- 1.1.6复制到SMB共享文件里面,然后到虚拟机里面解压他,执行命令:tar xjvf U-BOOT-1.1.6 课程咨询:联系人:何老师 15333833127 QQ:1187729241 编译U-BOOT需要采用arm-linux-gcc-3.3.2的交叉编译器 将编译器的压缩文件复制到smb的共享文件夹里面,然后采用tar xjvf 进行解压,解压后的文件需要移动到usr/local/arm里面,然后要修改编译器的环境变量: 执行vi /etc/profile,然后在里面的修改成 export PATH =/usr/local/arm/3.3.2/bin:$PATH 修改好了以后,需要执行 source /etc/profile,可以查看编译器的版本 a 执行arm-linux-gcc –v 接下来可以进入U-BOOT-1.1.6里面进行编译,但是还需要修改一个地方, 执行:vi cpu/arm920t/config.mk然后再该目录下,把-msoft-float用#号注释掉(意思是不用软浮点进行编译) U-BOOT没有像VIVI那样的图形配置界面,我们只能修改其中的文件进行配置, 解压U-BOOT-1.1.6,进入U-BOOT目录,修改Makefile: 每个文件都有这样的语句,意思是代表每个开发板,具体就是 开发板的名称_config 各项的意思如下: arm: CPU的架构(ARCH) arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。 TX2440: 开发板的型号(BOARD),对应于board/TX2440目录。 NULL: 开发者/或经销商(vender)。 s3c24x0: 片上系统(SOC)。 在smdk2410_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0 加上 TQ2440_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t TQ2440 NULL s3c24x0 修改好了以后需要保存,但是这时候,是没法保存的,因为没权限,这时候,需要在虚拟机里面修改权限: 在u-boot-1.1.6目录里面 执行chmod 666 Makefile 把文件的权限修改成可以读写 指定交叉编译器的工具 在Makefile第128行里面的CROSS_COMPILE=arm-linux- 意思就是指定arm-linux-为交叉编译器 在虚拟机里面U-Boot-1.1.6的board里面新建一个自己开发板的目录TQ2440: 在U-Boot-1.1.6中进入Board目录中,把里面的一个文件,smdk2410改名成TQ2440. 进入到TQ2440中,把里面的文件 ,smdk2410.c改名成TQ2440.c 返回到Board目录。只保留TQ2440文件,其余的可以删除掉,删除方法可以这样: 把TQ2440移动上一层目录:mv TQ2440 ../ 然后执行 rm – rf*,把所以得文件删除掉(注意这个命令的格式,多几个空格) 最后把上一层目录上的TQ2440移回来:mv ../ TQ2440 ./ 在这个board目录中修改Makefile文件。我们可以再smb共享的文件进入到board文件中 打开Makefile。在第28行的smdk2410.o改为TX2410.o。 在修改中,会遇到没有权限修改文件,我们回到虚拟机中,修改权限: 打开TQ2440,执行:chomd 666 Makefile. 在返回去保存! 在include/configs目录下创建板子的配置头文件,把smdk2410.h改名为TQ2440.h: 首先进入到include/configs目录中,执行mv smdk2410.h TQ2440.h 然后把该目录下除了TQ2440.h,其余的都删除了。 看看配置是否成功: 回到U-Boot-1.1.6目录 执行 make TQ2440_config 当出现Configuring for TX2440 board.....表示配置以已经成功 出现make: execvp: …………/mkconfig: 权限不够 查看mkconfig的权限,发现没有可执行权限,用chmod 764 mkconfig加上权限 然后再make,成功后可出现 Configuring for TX2440 board.....

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值