uboot 之环境变量

u-boot-2016.11 hi3559a

1、初始全局变量gd的env信息
在board_f.c中:
init_sequence_f() -> env_init():
gd->env_addr = (ulong)&default_environment[0];
gd->env_valid = 1;


2、获取env的媒介
env一般和uboot存放再同一个媒介(即启动媒介)
在board_r.c中
init_sequence_r() -> board_init():

gd->bd->bi_boot_params = CFG_BOOT_PARAMS: 存放boot传递给内核的参数地址(物理内存起始地址+0x100)
boot_flag_init(): 获取启动媒介,存放在boot_media变量里

3、初始化媒介(这里使用spi nand flash)
init_sequence_r() -> initr_nand() -> nand_init() -> nand_init_chip():
board_nand_init(): 初始化host控制器,及driver所有操作接口
nand_scan():扫描nand device(hifmc_spi_nand_flash_table添加自己的spi nand 型号)
nand_register():注册nand device

4、获取媒介中的env变所有量
init_sequence_r() -> initr_env() -> env_relocate() -> env_relocate_spec():
根据boot_media变量的媒介信息,函数指针指向env存放的媒介
env_cmn_func = &nand_env_cmn_func;
env_cmn_func->env_relocate_spec();

static struct env_common_func_t nand_env_cmn_func = {
    .saveenv = nand_saveenv,   保存环境变量
    .env_relocate_spec = nand_env_relocate_spec, 从媒介中读出保存好的env所有环境变量
    .env_name_spec = "NAND",
};
 

你可能感兴趣的:(u-boot)