目录
前言
uboot第一次运行时,uboot使用默认的环境变量,然后用户会根据需要对其进行修改,本次我们就写一个测试命令将环境变量恢复到默认值。
1 准备工作,新建文件,并添加编译
参考uboot代码解析5:命令集、自定义uboot命令,命令处理框架这节内容
将上一章写的hello.c文件为factory.c
然后将uboot的根目录的cmd文件夹中在Makefile文件中添加如下内容
obj-y += factory.o
2 编写factory.c源码
#include <common.h>
#include <command.h>
#ifdef debug
#undef debug
#endif
#define debug(format,...) printf("%s,%s,line=%d:"format"\n",__FILE__,__func__,__LINE__,##__VA_ARGS__)
static int do_factory(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
int i = 0;
debug("set enviroment to default values");
set_default_env(NULL);//设置内存中的环境变量为默认值
saveenv(); //实际使用中不建议在这里调用这个函数,这个函数对应saveenv命令。
return 0;
}
U_BOOT_CMD(
factory, 1, 0, do_factory,
"set env to default value/usage",
"\n"
" set env to default value\n"
"factory command ...\n"
" set env to default value for lkmao"
);
3 编译并下载测试并运行

使用help命令查看新添加的factory命令
=> help factory
factory - set env to default value/usage
Usage:
factory
set env to default value
factory command ...
set env to default value for lkmao
执行factory命令之前先修改bootdelay 的值为10
=> setenv bootdelay 10
=> printenv boot
boot_fdt bootargs bootcmd bootcmd_mfg bootdelay bootscript
=> printenv bootdelay
bootdelay=10
=> saveenv
Saving Environment to MMC...
Writing to MMC(1)... done
准备完毕,执行factory,如果执行成功bootdelay会变成初始化,我的初始值是0
=> factory
cmd/factory.c,do_factory,line=19:set enviroment to default values
Using default environment
Writing to MMC(1)... done
=> printenv bootdelay
bootdelay=0
命令执行成功了。上面的打印信息中包含
Writing to MMC(1)... done
说明环境变量被保存在了(MMC(1))中了,
4 恢复出厂设置执行函数中不建议调用saveenv
个人建议不要saveenv,让使用的人自己去saveenv,这样有很多好处,使用的人可能只是想看一下默认值,并不想丢弃现在的值,如果直接saveenv就等于丢掉了当前的配置,可能其中包含重要信息。
5 saveenv命令
static int do_env_save(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
{
printf("Saving Environment to %s...\n", env_name_spec);
return saveenv() ? 1 : 0;
}
U_BOOT_CMD(
saveenv, 1, 0, do_env_save,
"save environment variables to persistent storage",
""
);
这里说明saveenv命令对应的执行函数是do_env_save,而do_env_save调用了saveenv();
总结
纸上得来终觉浅,绝知此事要躬行。
本文介绍了如何在UBoot中创建一个名为`factory`的自定义命令,该命令用于将环境变量恢复到默认设置。首先,通过修改`Makefile`将新命令添加到编译流程中,然后编写`factory.c`源码实现恢复默认环境变量的功能。在执行`factory`命令后,环境变量`bootdelay`被重置。作者建议在函数中不应直接调用`saveenv()`,以免意外丢失用户配置,而是让用户自行决定是否保存更改。
1573

被折叠的 条评论
为什么被折叠?



