u-boot-2014.10移植(7)修改環境變數的儲存位置
阿新 • • 發佈:2018-11-03
原來環境變數儲存在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 #defineCONFIG_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