u-boot-2014.10移植(7)修改环境变量的存储位置

原来环境变量存储在nor flash里, 前面mtdparts分区第二个分区就是params

现在修改环境变量到nand里,

搜索default environment

在Env_common.c函数里面:

default_environment结构体
default_environment结构体定义在env_common.c里面

其中有:

#ifdef    CONFIG_BOOTARGS
    "bootargs="    CONFIG_BOOTARGS            "\0"
#endif

这里CONFIG_BOOTARGS没有定义,bootargs是传给内核的环境变量,在smdk2440.h里面定义CONFIG_BOOTARGS

#define CONFIG_BOOTARGS "console=ttySAC0 root=/dev/mtdblock3"

此外设置bootcmd参数:

#define CONFIG_BOOTCOMMAND "nand read 30000000 0x30008000 0x400000;bootm 30000000"

假设从0x30008000读2M到30000000
  
设置ip

#define CONFIG_NETMASK        255.255.255.0
#define CONFIG_IPADDR        192.168.1.1110
#define CONFIG_SERVERIP        192.168.1.113
#define CONFIG_ETHADDR        00:0c:29:45:c4:c3    

修改默认分区:

0x00000000-0x00040000 : "bootloader"     //256k
0x00040000-0x00060000 : "params"    //128K
0x00060000-0x00460000 : "kernel"    //4M
0x00460000-0x10000000 : "root"

原来的环境变量的配置:

#define CONFIG_ENV_ADDR            (CONFIG_SYS_FLASH_BASE + 0x070000)
#define CONFIG_ENV_IS_IN_FLASH
#define CONFIG_ENV_SIZE            0x10000
/* allow to overwrite serial and ethaddr */
#define CONFIG_ENV_OVERWRITE    

当输入save时:

SMDK2440 # save
                Saving Environment to Flash...
                Un-Protected 1 sectors
                Erasing Flash...
                . done
                Erased 1 sectors
                Writing to Flash... 9....8....7....6....5....4....3....2....1....done
                Protected 1 sectors

上面说过不要用save命令保存环境变量设置,目的是防止flash被破坏:

查看save命令帮助信息,知道saveenv,搜索saveenv 
或者在SI里面搜索可得,在common目录下看Makefile,知道依赖上面宏

Env_nand.c (common):int saveenv(void)

makefile里面有:

COBJS-$(CONFIG_ENV_IS_IN_NAND) += env_nand.o  
可知需要CONFIG_ENV_IS_IN_NAND 
  
不光如此,还需要知道起始地址和大小 
打开env_nand.c,里面有CONFIG_ENV_SIZE和CONFIG_ENV_OFFSET 
  
上面的还不够,还需要擦除长度
nand_erase_options.length = CONFIG_ENV_RANGE;
  
即需要定义CONFIG_ENV_RANGE,设为CONFIG_ENV_SIZE 
    
 综上所知设置为:

#if 0
#define CONFIG_ENV_ADDR            (CONFIG_SYS_FLASH_BASE + 0x070000)
#define CONFIG_ENV_IS_IN_FLASH
#define CONFIG_ENV_SIZE            0x10000
/* allow to overwrite serial and ethaddr */
#define CONFIG_ENV_OVERWRITE
#endif
#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_OFFSET 0x00040000
#define CONFIG_ENV_SIZE 0x20000
#define CONFIG_ENV_RANGE CONFIG_ENV_SIZE    

改成nand后,输入save:

SMDK2440 # save
                Saving Environment to NAND...
                Erasing NAND...
                Erasing at 0x40000 -- 100% complete.
                Writing to NAND... OK

原文地址:https://www.cnblogs.com/hulig7/p/9902155.html

时间: 2024-10-20 18:29:22

u-boot-2014.10移植(7)修改环境变量的存储位置的相关文章

Linux修改环境变量的方法

在Linux操作系统中,有时候跟着教程安装了一些软件,安装成功后,很高兴的准备运行该软件相应命令,但是偶尔会遇到”Command not found…“的提示.原因是因为你安装的软件需要设置环境变量才能运行. 在Linux操作系统下修改环境变量有以下三种方法(以设置jekyll的环境变量为例) 1.直接赋值 在命令行中输入 PATH=$PATH:/usr/lib64/ruby/gems/2.1.0/gems/jekyll-2.5.3/bin 使用这种方法,只对当前会话有效,也就是说每当登出或注销

linux mint(Ubuntu、Debian) 18修改环境变量

修改环境变量 [plain] view plain copy print? sudo gedit /etc/profile sudo gedit /etc/profile 在profile文件的末尾添加以下代码 [plain] view plain copy print? export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/

变量的声明及其作用域、脚本、修改环境变量$PATH【:VALUE】

变量的声明及其作用域 本地变量 VARNAME=VALUE:作用域为整个bash进程[打开新的shell进程,没有该变量] [root@jiakang a]# A=123 [root@jiakang a]# bash [root@jiakang a]# echo $A [root@jiakang a]# 局部变量 local VARNAME=VALUE:作用域为当前代码段 环境变量 作用域为当前shell及其子进程[打开一个shell就是一个进程] export VARNAME=VALUE或者

Ubuntu修改环境变量PATH方法

在LINUX安装一些软件通常要添加环境变量.环境变量通俗的讲就是把程序的路径"备案"到系统中,这样执行这些程序时就不需要输入完整路径,直接在bash输入程序名就可以执行.比如常用的ls命令就是添加好了环境变量才可以直接执行ls 环境变量的名字是PATH,$符号用于读取变量的值,终端输入echo $PATH返回如下,各路径用:隔开 echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/ga

Linux系统下修改环境变量PATH路径的三种方法

比如要把/etc/apache/bin目录添加到PATH中,方法有三: 1.#PATH=$PATH:/etc/apache/bin 使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效 2.#vi /etc/profile 在适当位置添加 PATH=$PATH:/etc/apache/bin (注意:= 即等号两边不能有任何空格) 这种方法最好,除非你手动强制修改PATH的值,否则将不会被改变 3.#vi ~/.bash_profile 修改PATH行,把/et

HWND_BROADCAST的一个用法——修改环境变量,立即通知系统

在编程时遇到一个问题: 就是程序通过修改注册表,修改了系统的环境变量,但是不会立即生效,除非在[我的电脑]上点击右键,然后打开环境变量的窗口,点击[OK]后,才能生效.后来用Spy++工具捕获消息,发现在点击[OK]按钮时,发送了WM_SETTINGCHANGE消息. 在网上查找原因时发现,修改了注册表之后,系统需要重启,或者向上述操作,系统才能知道注册表被修改了,之后才能生效.如果想修改完环境变量后,立即生效,需要向系统发送消息: wstring szParam = _T( "Environm

windows 安装多个版本的jdk后修改 环境变量不起作用

本机已经安装了jdk1.6,而比较早期的项目需要依赖jdk1.5,于是同时在本机安装了jdk1.5和jdk1.6. 安装jdk1.5前,执行java -version得到java version "1.6.0_38"Java(TM) SE Runtime Environment (build 1.6.0_38-b05)Java HotSpot(TM) 64-Bit Server VM (build 20.13-b02, mixed mode) 安装完jdk1.5,并修改环境变量JAVA

win系统环境变量中增加或修改环境变量后快速生效

win系统环境变量中增加或修改环境变量后,需重启系统才能使之生效. 下面介绍一种方法: 以修改环境变量"PATH"为例,修改完成后,进入DOS命令提示符,输入:set PATH=C: ,关闭DOS窗口.再次打开DOS窗口,输入:echo %PATH% ,值已经生效. 不用担心DOS窗口中的修改会影响环境变量的值,DOS窗口中的环境变量只是Windows环境变量的一个副本而已.但是对副本的修改却会引发Windows环境变量的刷新,这正是我们想要的!

查看和修改环境变量PATH

echo $PATH  显示当前shell的环境变量,root用户,transfor等普通用户环境变量根据个人配置而不同.因 .bashrc 配置文件 没有设置环境变量的时候,运行命令:/usr/local/tomcat/bin/tomcat start 用export在/etc/profile中添加文件路径(对系统所有用户有效): #vim /etc/profile export PATH=/usr/local/tomcat/bin:$PATH 修改用户主目录中的隐藏文件.bashrc文件(只