diff options
-rw-r--r-- | arch/arm/lib/barebox.lds.S | 4 | ||||
-rw-r--r-- | arch/arm/mach-imx/boot.c | 3 | ||||
-rw-r--r-- | arch/blackfin/boards/ipe337/barebox.lds.S | 4 | ||||
-rw-r--r-- | arch/mips/lib/barebox.lds.S | 4 | ||||
-rw-r--r-- | arch/nios2/cpu/barebox.lds.S | 4 | ||||
-rw-r--r-- | arch/ppc/boards/pcm030/barebox.lds.S | 4 | ||||
-rw-r--r-- | arch/sandbox/board/barebox.lds.S | 5 | ||||
-rw-r--r-- | arch/x86/lib/barebox.lds.S | 9 | ||||
-rw-r--r-- | commands/Kconfig | 14 | ||||
-rw-r--r-- | commands/Makefile | 1 | ||||
-rw-r--r-- | commands/bootm.c | 3 | ||||
-rw-r--r-- | commands/magicvar.c | 20 | ||||
-rw-r--r-- | common/hush.c | 8 | ||||
-rw-r--r-- | include/asm-generic/barebox.lds.h | 2 | ||||
-rw-r--r-- | include/magicvar.h | 32 | ||||
-rw-r--r-- | net/dhcp.c | 6 |
16 files changed, 122 insertions, 1 deletions
diff --git a/arch/arm/lib/barebox.lds.S b/arch/arm/lib/barebox.lds.S index 81a91236c0..f05f34523c 100644 --- a/arch/arm/lib/barebox.lds.S +++ b/arch/arm/lib/barebox.lds.S @@ -80,6 +80,10 @@ SECTIONS .barebox_cmd : { BAREBOX_CMDS } __barebox_cmd_end = .; + __barebox_magicvar_start = .; + .barebox_magicvar : { BAREBOX_MAGICVARS } + __barebox_magicvar_end = .; + __barebox_initcalls_start = .; .barebox_initcalls : { INITCALLS } __barebox_initcalls_end = .; diff --git a/arch/arm/mach-imx/boot.c b/arch/arm/mach-imx/boot.c index f13d956bf1..8b82655d4f 100644 --- a/arch/arm/mach-imx/boot.c +++ b/arch/arm/mach-imx/boot.c @@ -18,6 +18,7 @@ #include <common.h> #include <environment.h> #include <init.h> +#include <magicvar.h> #include <io.h> #include <mach/imx-regs.h> @@ -88,4 +89,6 @@ static int imx_25_35_boot_save_loc(void) coredevice_initcall(imx_25_35_boot_save_loc); +BAREBOX_MAGICVAR(barebox_loc, "The source barebox has been booted from"); + #endif diff --git a/arch/blackfin/boards/ipe337/barebox.lds.S b/arch/blackfin/boards/ipe337/barebox.lds.S index 571eeb113b..25ca988815 100644 --- a/arch/blackfin/boards/ipe337/barebox.lds.S +++ b/arch/blackfin/boards/ipe337/barebox.lds.S @@ -71,6 +71,10 @@ SECTIONS .barebox_cmd : { BAREBOX_CMDS } ___barebox_cmd_end = .; + __barebox_magicvar_start = .; + .barebox_magicvar : { BAREBOX_MAGICVARS } + __barebox_magicvar_end = .; + ___barebox_initcalls_start = .; .barebox_initcalls : { INITCALLS } ___barebox_initcalls_end = .; diff --git a/arch/mips/lib/barebox.lds.S b/arch/mips/lib/barebox.lds.S index ba4c0afc11..7746ea0c71 100644 --- a/arch/mips/lib/barebox.lds.S +++ b/arch/mips/lib/barebox.lds.S @@ -56,6 +56,10 @@ SECTIONS .barebox_cmd : { BAREBOX_CMDS } __barebox_cmd_end = .; + __barebox_magicvar_start = .; + .barebox_magicvar : { BAREBOX_MAGICVARS } + __barebox_magicvar_end = .; + __barebox_initcalls_start = .; .barebox_initcalls : { INITCALLS } __barebox_initcalls_end = .; diff --git a/arch/nios2/cpu/barebox.lds.S b/arch/nios2/cpu/barebox.lds.S index 2b626fb51e..934eaf7cac 100644 --- a/arch/nios2/cpu/barebox.lds.S +++ b/arch/nios2/cpu/barebox.lds.S @@ -56,6 +56,10 @@ SECTIONS .barebox_cmd : { BAREBOX_CMDS } __barebox_cmd_end = .; + __barebox_magicvar_start = .; + .barebox_magicvar : { BAREBOX_MAGICVARS } + __barebox_magicvar_end = .; + __barebox_initcalls_start = .; .barebox_initcalls : { INITCALLS } __barebox_initcalls_end = .; diff --git a/arch/ppc/boards/pcm030/barebox.lds.S b/arch/ppc/boards/pcm030/barebox.lds.S index 4aacfc5f12..7dda039dbb 100644 --- a/arch/ppc/boards/pcm030/barebox.lds.S +++ b/arch/ppc/boards/pcm030/barebox.lds.S @@ -102,6 +102,10 @@ SECTIONS .barebox_cmd : { BAREBOX_CMDS } __barebox_cmd_end = .; + __barebox_magicvar_start = .; + .barebox_magicvar : { BAREBOX_MAGICVARS } + __barebox_magicvar_end = .; + __barebox_initcalls_start = .; .barebox_initcalls : { INITCALLS } __barebox_initcalls_end = .; diff --git a/arch/sandbox/board/barebox.lds.S b/arch/sandbox/board/barebox.lds.S index 76975eea63..db5b7deb23 100644 --- a/arch/sandbox/board/barebox.lds.S +++ b/arch/sandbox/board/barebox.lds.S @@ -8,6 +8,11 @@ SECTIONS __barebox_initcalls_end = .; . = ALIGN(64); + __barebox_magicvar_start = .; + .barebox_magicvar : { BAREBOX_MAGICVARS } + __barebox_magicvar_end = .; + + . = ALIGN(64); __barebox_cmd_start = .; __barebox_cmd : { BAREBOX_CMDS } __barebox_cmd_end = .; diff --git a/arch/x86/lib/barebox.lds.S b/arch/x86/lib/barebox.lds.S index fffc3a55c6..716cea6a68 100644 --- a/arch/x86/lib/barebox.lds.S +++ b/arch/x86/lib/barebox.lds.S @@ -170,7 +170,14 @@ SECTIONS . = ALIGN(4); } > barebox - .barebox_initcalls : AT ( LOADADDR(.barebox_cmd) + SIZEOF (.barebox_cmd) ) { + .barebox_magicvars : AT ( LOADADDR(.barebox_cmd) + SIZEOF (.barebox_cmd) ) { + __barebox_magicvar_start = .; + .barebox_magicvar : { BAREBOX_MAGICVARS } + __barebox_magicvar_end = .; + . = ALIGN(4); + } > barebox + + .barebox_initcalls : AT ( LOADADDR(.barebox_magicvars) + SIZEOF (.barebox_magicvars) ) { __barebox_initcalls_start = .; INITCALLS __barebox_initcalls_end = .; diff --git a/commands/Kconfig b/commands/Kconfig index 18ab840916..78b9d2a0e6 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -383,6 +383,20 @@ config CMD_HELP default y prompt "help" +config CMD_MAGICVAR + tristate + prompt "magicvar" + help + barebox has some shell variables with special meanings. This + command shows the available magic variables. + +config CMD_MAGICVAR_HELP + bool + prompt "display description" + depends on CMD_MAGICVAR + help + Also display a description to the magic variables + config CMD_DEVINFO tristate default y diff --git a/commands/Makefile b/commands/Makefile index 5c519169c3..9b3a349bd2 100644 --- a/commands/Makefile +++ b/commands/Makefile @@ -58,3 +58,4 @@ obj-$(CONFIG_CMD_LED_TRIGGER) += trigger.o obj-$(CONFIG_CMD_USB) += usb.o obj-$(CONFIG_CMD_TIME) += time.o obj-$(CONFIG_CMD_OFTREE) += oftree.o +obj-$(CONFIG_CMD_MAGICVAR) += magicvar.o diff --git a/commands/bootm.c b/commands/bootm.c index 731b74dcee..a4d1c367f0 100644 --- a/commands/bootm.c +++ b/commands/bootm.c @@ -42,6 +42,7 @@ #include <boot.h> #include <rtc.h> #include <init.h> +#include <magicvar.h> #include <asm-generic/memory_layout.h> /* @@ -365,6 +366,8 @@ BAREBOX_CMD_START(bootm) BAREBOX_CMD_HELP(cmd_bootm_help) BAREBOX_CMD_END +BAREBOX_MAGICVAR(bootargs, "Linux Kernel parameters"); + /** * @page bootm_command diff --git a/commands/magicvar.c b/commands/magicvar.c new file mode 100644 index 0000000000..31606d2afa --- /dev/null +++ b/commands/magicvar.c @@ -0,0 +1,20 @@ +#include <common.h> +#include <command.h> +#include <magicvar.h> + +static int do_magicvar(struct command *cmdtp, int argc, char *argv[]) +{ + struct magicvar *m; + + for (m = &__barebox_magicvar_start; + m != &__barebox_magicvar_end; + m++) + printf("%-32s %s\n", m->name, m->description); + + return 0; +} + +BAREBOX_CMD_START(magicvar) + .cmd = do_magicvar, + .usage = "List information about magic variables", +BAREBOX_CMD_END diff --git a/common/hush.c b/common/hush.c index 573bd3ef1d..b59e59dd17 100644 --- a/common/hush.c +++ b/common/hush.c @@ -122,6 +122,7 @@ #include <glob.h> #include <getopt.h> #include <libbb.h> +#include <magicvar.h> #include <linux/list.h> /*cmd_boot.c*/ @@ -540,6 +541,8 @@ static int builtin_getopt(struct p_context *ctx, struct child_prog *child) return 0; } + +BAREBOX_MAGICVAR(OPTARG, "optarg for hush builtin getopt"); #endif /* run_pipe_real() starts all the jobs, but doesn't wait for anything @@ -1721,6 +1724,11 @@ BAREBOX_CMD_START(getopt) BAREBOX_CMD_END #endif +BAREBOX_MAGICVAR(PATH, "colon seperated list of pathes to search for executables"); +#ifdef CONFIG_HUSH_FANCY_PROMPT +BAREBOX_MAGICVAR(PS1, "hush prompt"); +#endif + /** * @file * @brief A prototype Bourne shell grammar parser diff --git a/include/asm-generic/barebox.lds.h b/include/asm-generic/barebox.lds.h index 8aee5d2ce4..5467d3a8a0 100644 --- a/include/asm-generic/barebox.lds.h +++ b/include/asm-generic/barebox.lds.h @@ -24,3 +24,5 @@ #define BAREBOX_CMDS KEEP(*(SORT_BY_NAME(.barebox_cmd*))) #define BAREBOX_SYMS KEEP(*(__usymtab)) + +#define BAREBOX_MAGICVARS KEEP(*(SORT_BY_NAME(.barebox_magicvar*))) diff --git a/include/magicvar.h b/include/magicvar.h new file mode 100644 index 0000000000..d27a2e32a3 --- /dev/null +++ b/include/magicvar.h @@ -0,0 +1,32 @@ +#ifndef __MAGIC_VARS_H +#define __MAGIC_VARS_H + +#include <linux/stringify.h> + +struct magicvar { + const char *name; + const char *description; +}; + +extern struct magicvar __barebox_magicvar_start; +extern struct magicvar __barebox_magicvar_end; + +#ifdef CONFIG_CMD_MAGICVAR_HELP +#define MAGICVAR_DESCRIPTION(d) (d) +#else +#define MAGICVAR_DESCRIPTION(d) NULL +#endif + +#ifdef CONFIG_CMD_MAGICVAR +#define BAREBOX_MAGICVAR(_name, _description) \ +extern const struct magicvar __barebox_magicvar_##_name; \ +const struct magicvar __barebox_magicvar_##_name \ + __attribute__ ((unused,section (".barebox_magicvar_" __stringify(_name)))) = { \ + .name = #_name, \ + .description = MAGICVAR_DESCRIPTION(_description), \ +}; +#else +#define BAREBOX_MAGICVAR(_name, _description) +#endif + +#endif /* __MAGIC_VARS_H */ diff --git a/net/dhcp.c b/net/dhcp.c index d1781bc6b0..2ce9090639 100644 --- a/net/dhcp.c +++ b/net/dhcp.c @@ -15,6 +15,7 @@ #include <net.h> #include <libbb.h> #include <errno.h> +#include <magicvar.h> #include <linux/err.h> #define OPT_SIZE 312 /* Minimum DHCP Options size per RFC2131 - results in 576 byte pkt */ @@ -482,3 +483,8 @@ BAREBOX_CMD_START(dhcp) .usage = "invoke dhcp client to obtain ip/boot params", BAREBOX_CMD_END +BAREBOX_MAGICVAR(bootfile, "bootfile returned from DHCP request"); +BAREBOX_MAGICVAR(nameserver, "Nameserver returned from DHCP request"); +BAREBOX_MAGICVAR(hostname, "hostname returned from DHCP request"); +BAREBOX_MAGICVAR(domainname, "domainname returned from DHCP request"); +BAREBOX_MAGICVAR(rootpath, "rootpath returned from DHCP request"); |