红联Linux门户
Linux帮助

grub2 linux等命令中不能使用环境变量

发布时间:2017-02-08 09:46:18来源:linux网站作者:tiantao2012
在menu.c中的grub_menu_execute_entry 中会调用grub_env_context_close 来关掉context。这样诸如linux/devicetree等这些命令中就不能在适应grub_env_get 这样的函数.
 
可以看到grub_env_context_close 会把grub_current_context 这个list上的var全部释放掉.
 
grub_env_context_close (void)
{
struct grub_env_context *context;
int i;
struct menu_pointer *menu;
if (! grub_current_context->prev)
return grub_error (GRUB_ERR_BAD_ARGUMENT,
"cannot close the initial context");
/* Free the variables associated with this context.  */
for (i = 0; i < HASHSZ; i++)
{
struct grub_env_var *p, *q;
for (p = grub_current_context->vars[i]; p; p = q)
{
q = p->next;
grub_free (p->name);
grub_free (p->value);
grub_free (p);
}
}
}
 
而我们在调用grub_env_set 的时候起始是把var注册到grub_current_context 这个list上的。
 
grub_env_set (const char *name, const char *val)
{
struct grub_env_var *var;
/* If the variable does already exist, just update the variable.  */
var = grub_env_find (name);
/* The variable does not exist, so create a new one.  */
var = grub_zalloc (sizeof (*var));
if (! var)
return grub_errno;
var->name = grub_strdup (name);
if (! var->name)
goto fail;
var->value = grub_strdup (val);
if (! var->value)
goto fail;
grub_env_insert (grub_current_context, var);
return GRUB_ERR_NONE;
fail:
grub_free (var->name);
grub_free (var->value);
grub_free (var);
return grub_errno;
}
 
如果后面想用前面的已经设定好的env,咋办呢?我能想到的解决方案是全局变量。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/28236.html