summaryrefslogtreecommitdiffstats
path: root/discover
diff options
context:
space:
mode:
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>2016-06-08 13:51:37 +1000
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>2016-06-29 14:19:08 +1000
commit3f06f8808f79f13650394bab80bf96426323a5f8 (patch)
treebc7cd4e9c1062c537651f52d2d84b6a4f30fe82a /discover
parentce54f866b2b9e48bab73acd73b4c05a057f9ddca (diff)
downloadtalos-petitboot-3f06f8808f79f13650394bab80bf96426323a5f8.tar.gz
talos-petitboot-3f06f8808f79f13650394bab80bf96426323a5f8.zip
discover/boot: Set boot_tty variable before kexec
If boot_tty is set or a boot command is sent manually from a certain console, set the boot_tty environment variable to be used by a boot hook before kexec. Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
Diffstat (limited to 'discover')
-rw-r--r--discover/boot.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/discover/boot.c b/discover/boot.c
index 0d3491f..ba6ce25 100644
--- a/discover/boot.c
+++ b/discover/boot.c
@@ -24,6 +24,7 @@
#include "boot.h"
#include "paths.h"
#include "resource.h"
+#include "platform.h"
static const char *boot_hook_dir = PKG_SYSCONF_DIR "/boot.d";
enum {
@@ -39,6 +40,7 @@ struct boot_task {
const char *local_initrd;
const char *local_dtb;
const char *args;
+ const char *boot_tty;
boot_status_fn status_fn;
void *status_arg;
bool dry_run;
@@ -206,6 +208,7 @@ static void boot_hook_setenv(struct boot_task *task)
unsetenv("boot_initrd");
unsetenv("boot_dtb");
unsetenv("boot_args");
+ unsetenv("boot_tty");
setenv("boot_image", task->local_image, 1);
if (task->local_initrd)
@@ -214,6 +217,8 @@ static void boot_hook_setenv(struct boot_task *task)
setenv("boot_dtb", task->local_dtb, 1);
if (task->args)
setenv("boot_args", task->args, 1);
+ if (task->boot_tty)
+ setenv("boot_tty", task->boot_tty, 1);
}
static int hook_filter(const struct dirent *dirent)
@@ -430,6 +435,7 @@ struct boot_task *boot(void *ctx, struct discover_boot_option *opt,
boot_status_fn status_fn, void *status_arg)
{
struct pb_url *image = NULL, *initrd = NULL, *dtb = NULL;
+ const struct config *config;
struct boot_task *boot_task;
const char *boot_desc;
int rc;
@@ -481,6 +487,13 @@ struct boot_task *boot(void *ctx, struct discover_boot_option *opt,
boot_task->args = NULL;
}
+ if (cmd && cmd->tty)
+ boot_task->boot_tty = talloc_strdup(boot_task, cmd->tty);
+ else {
+ config = config_get();
+ boot_task->boot_tty = config ? config->boot_tty : NULL;
+ }
+
/* start async loads for boot resources */
rc = start_url_load(boot_task, "kernel image", image, &boot_task->image)
|| start_url_load(boot_task, "initrd", initrd, &boot_task->initrd)
OpenPOWER on IntegriCloud