From 3249006a2facd31a072fd2808991697b4727643e Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Wed, 18 Jun 2014 15:12:05 +0200 Subject: Add support for non volatile variables This adds (back) support for non volatile variables. Non volatile variables are variables which are stored in the environment over reboot. They are used in the same way as the global variables, but with a 'nv' command and device. The variables are stored under /env/nv/, one variable per file. Adding a nv variable automatically adds a global variable with the same name. Changing a nv variable also changes the same global variable, but not the other way round. This allows for example to configure the username as: nv user=sha; saveenv Signed-off-by: Sascha Hauer --- commands/Kconfig | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'commands/Kconfig') diff --git a/commands/Kconfig b/commands/Kconfig index bef58473a5..cf32548725 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -674,6 +674,20 @@ endmenu menu "Environment" +config CMD_NV + select GLOBALVAR + tristate + prompt "nv" + help + create, set or remove non volatile variables. + + Usage: nv [-r] VAR[=VALUE] + + Add a new config non volatile named VAR, optionally set to VALUE. + + Options: + -r remove a non volatile variable + config CMD_EXPORT depends on ENVIRONMENT_VARIABLES tristate -- cgit v1.2.3 From b25d333493f4d58b8b99ef20e9ca4cdf32e869c4 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Thu, 23 Oct 2014 22:52:14 +0200 Subject: Add defaultenv command This adds a command to explicitly restore the environment (or parts thereof) from the default environment. Signed-off-by: Sascha Hauer --- commands/Kconfig | 7 ++++ commands/Makefile | 1 + commands/defaultenv.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 commands/defaultenv.c (limited to 'commands/Kconfig') diff --git a/commands/Kconfig b/commands/Kconfig index cf32548725..f4c783575a 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -699,6 +699,13 @@ config CMD_EXPORT Export an environment variable to subsequently executed scripts. +config CMD_DEFAULTENV + tristate + select ENV_HANDLING + prompt "defaultenv" + help + restore environment from default environment + config CMD_GLOBAL select GLOBALVAR tristate diff --git a/commands/Makefile b/commands/Makefile index b4fc3d363e..99a65d4609 100644 --- a/commands/Makefile +++ b/commands/Makefile @@ -108,3 +108,4 @@ obj-$(CONFIG_CMD_USBGADGET) += usbgadget.o obj-$(CONFIG_CMD_FIRMWARELOAD) += firmwareload.o obj-$(CONFIG_CMD_CMP) += cmp.o obj-$(CONFIG_CMD_NV) += nv.o +obj-$(CONFIG_CMD_DEFAULTENV) += defaultenv.o diff --git a/commands/defaultenv.c b/commands/defaultenv.c new file mode 100644 index 0000000000..bae2d78f47 --- /dev/null +++ b/commands/defaultenv.c @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2014 Sascha Hauer , Pengutronix + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static int do_defaultenv(int argc, char *argv[]) +{ + char *dirname; + int opt, ret; + char *restorepath = "/"; + char *from, *to; + int restore = 0, scrub = 0; + + while ((opt = getopt(argc, argv, "p:rs")) > 0) { + switch (opt) { + case 'r': + restore = 1; + break; + case 'p': + restorepath = optarg; + break; + case 's': + scrub = 1; + break; + default: + return COMMAND_ERROR_USAGE; + } + } + + if (!restore || argc != optind) + return COMMAND_ERROR_USAGE; + + dirname = "/env"; + + make_directory(dirname); + + ret = defaultenv_load("/.defaultenv", 0); + if (ret) + return ret; + + from = asprintf("/.defaultenv/%s", restorepath); + to = asprintf("%s/%s", dirname, restorepath); + + printf("Restoring %s from default environment\n", restorepath); + + if (scrub) + unlink_recursive(to, NULL); + + ret = copy_recursive(from, to); + free(from); + free(to); + + nvvar_load(); + + unlink_recursive("/.defaultenv", NULL); + + return ret; +} + +BAREBOX_CMD_HELP_START(defaultenv) +BAREBOX_CMD_HELP_TEXT("Options:") +BAREBOX_CMD_HELP_OPT("-r", "restore default environment") +BAREBOX_CMD_HELP_OPT("-s", "scrub, remove files not in default environment") +BAREBOX_CMD_HELP_OPT("-p ", "limit to ") +BAREBOX_CMD_HELP_END + +BAREBOX_CMD_START(defaultenv) + .cmd = do_defaultenv, + BAREBOX_CMD_DESC("Restore environment from default environment") + BAREBOX_CMD_OPTS("[-rs] [-p ]") + BAREBOX_CMD_GROUP(CMD_GRP_ENV) + BAREBOX_CMD_HELP(cmd_defaultenv_help) +BAREBOX_CMD_END -- cgit v1.2.3