单片机
返回首页

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

2023-06-09 来源:elecfans

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


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


搜索default environment


在Env_common.c函数里面:


default_environment结构体

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


其中有:


#ifdef    CONFIG_BOOTARGS

    'bootargs='    CONFIG_BOOTARGS            ''

#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


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • 带有短路保护系统的5V直流稳压电源电路图

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章