uboot 环境变量加载过程分析
在uboot的初始化过程中,环境变量的初始化加载过程如下:
board_r.c/initr_env() ---> env/common.c/env_relocate() ---> env/env.c/env_load()
在env_load()函数中,会根据启动介质(mmc spi)去选择env存储位置,然后调用相应介质的load函数将环境变量读取到系统中。
具体调用过程如下:
int env_load(void)
{
/*省略不重要代码*/
for (prio = 0; (drv = env_driver_lookup(ENVOP_LOAD, prio)); prio++) {
ret = drv->load(); //如果从存储介质中读取了env,直接返回
if (!ret) {
printf("OK\n");
return 0;
}
}
/*省略不重要代码*/
return -ENODEV;
}
1、获取drv的过程如下:
调用env_driver_lookup(),该函数根据参数prio,获取env位置loc,再根据loc去获取drv
static struct env_driver *env_driver_lookup(enum env_operation op, int prio)
{
enum env_location loc = env_get_location(op, prio);
struct env_driver *drv;
if (loc == ENV