diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-01-20 13:59:47 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-01-20 16:30:20 +0100 |
commit | 7b4d66ab28fdd3c7bfd4e427a1f7ccddbffd355c (patch) | |
tree | 10f4995ddfb779d5c80392986359a0ee6f4fdba7 /common | |
parent | 3de3b677ee3adc4e10235b623a8e0aa45be48893 (diff) | |
download | barebox-7b4d66ab28fdd3c7bfd4e427a1f7ccddbffd355c.tar.gz barebox-7b4d66ab28fdd3c7bfd4e427a1f7ccddbffd355c.tar.xz |
startup: call a barebox_main function pointer at the end of the startup
Currently Kconfig dependencies are used to allow non-interactive builds.
This leads to problems in Kconfig getting the dependencies right.
This patch adds a barebox_main function pointer which is called at the
end of the startup process. This defaults to run_shell when a shell is
enabled.
With this the HAVE_NOSHELL Kconfig variable can be removed. Non interactive
builds can now be enabled for every board allowing to compile a binary
without further Kconfig dependencies. This also allows for more flexibility,
for example boards may decide to try non-interactive startup first and
call run_shell if that fails.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common')
-rw-r--r-- | common/Kconfig | 8 | ||||
-rw-r--r-- | common/startup.c | 13 |
2 files changed, 14 insertions, 7 deletions
diff --git a/common/Kconfig b/common/Kconfig index b60b78bb89..9d26abba99 100644 --- a/common/Kconfig +++ b/common/Kconfig @@ -37,9 +37,6 @@ config BLOCK config BLOCK_WRITE bool -config HAVE_NOSHELL - bool - config FILETYPE bool @@ -352,12 +349,11 @@ choice simple shell. No if/then, no return values from commands, no loops config SHELL_NONE - depends on HAVE_NOSHELL bool "no shell (noninteractive build)" help No shell at all. This means no shell is started and your board has - to provide a run_shell() function which is started at the end of - the barebox startup process. + to overwrite the barebox_main function pointer which is then called + at the end of the barebox startup process. endchoice config GLOB diff --git a/common/startup.c b/common/startup.c index 14409a217d..6309f53e9e 100644 --- a/common/startup.c +++ b/common/startup.c @@ -88,6 +88,8 @@ static int mount_root(void) fs_initcall(mount_root); #endif +int (*barebox_main)(void); + void start_barebox (void) { initcall_t *initcall; @@ -96,6 +98,9 @@ void start_barebox (void) struct stat s; #endif + if (!IS_ENABLED(CONFIG_SHELL_NONE)) + barebox_main = run_shell; + for (initcall = __barebox_initcalls_start; initcall < __barebox_initcalls_end; initcall++) { debug("initcall-> %pS\n", *initcall); @@ -126,9 +131,15 @@ void start_barebox (void) printf("not found\n"); } #endif + + if (!barebox_main) { + printf("No main function! aborting.\n"); + hang(); + } + /* main_loop() can return to retry autoboot, if so just run it again. */ for (;;) - run_shell(); + barebox_main(); /* NOTREACHED - no way out of command loop except booting */ } |