[PATCH 2/6] discover: Add petitboot,tty and track available consoles
Samuel Mendoza-Jonas
sam at mendozajonas.com
Wed Jun 8 16:28:08 AEST 2016
Add the NVRAM parameter petitboot,tty which sets the default console to
use when booting a kernel.
In load_config() construct a list of available consoles depending on the
current platform. A future patch depending on firmware changes will
allow this list to be constructed dynamically.
Signed-off-by: Samuel Mendoza-Jonas <sam at mendozajonas.com>
---
discover/platform-powerpc.c | 43 +++++++++++++++++++++++++++++++++++++++++++
discover/platform.c | 10 ++++++++++
2 files changed, 53 insertions(+)
diff --git a/discover/platform-powerpc.c b/discover/platform-powerpc.c
index 1961304..3956a7e 100644
--- a/discover/platform-powerpc.c
+++ b/discover/platform-powerpc.c
@@ -59,6 +59,7 @@ static const char *known_params[] = {
"petitboot,debug?",
"petitboot,write?",
"petitboot,snapshots?",
+ "petitboot,tty",
NULL,
};
@@ -565,6 +566,10 @@ static void populate_config(struct platform_powerpc *platform,
val = get_param(platform, "petitboot,snapshots?");
if (val)
config->disable_snapshots = !strcmp(val, "false");
+
+ val = get_param(platform, "petitboot,tty");
+ if (val)
+ config->boot_tty = talloc_strdup(config, val);
}
static char *iface_config_str(void *ctx, struct interface_config *config)
@@ -732,6 +737,9 @@ static int update_config(struct platform_powerpc *platform,
val = config->allow_writes ? "true" : "false";
update_string_config(platform, "petitboot,write?", val);
+ val = config->boot_tty ?: "";
+ update_string_config(platform, "petitboot,tty", val);
+
update_network_config(platform, config);
update_bootdev_config(platform, config);
@@ -1217,6 +1225,39 @@ static void get_ipmi_network_override(struct platform_powerpc *platform,
}
}
+static void get_active_consoles(struct config *config)
+{
+ struct stat sbuf;
+ char *fsp_prop = NULL;
+
+ config->n_tty = 2;
+ config->tty_list = talloc_array(config, char *, config->n_tty);
+ if (!config->tty_list)
+ goto err;
+
+ config->tty_list[0] = talloc_asprintf(config->tty_list,
+ "IPMI: /dev/hvc0");
+ config->tty_list[1] = talloc_asprintf(config->tty_list,
+ "VGA: /dev/tty1");
+
+ fsp_prop = talloc_asprintf(config, "%sfsps", devtree_dir);
+ if (stat(fsp_prop, &sbuf) == 0) {
+ /* FSP based machines also have a separate serial console */
+ config->tty_list = talloc_realloc(config, config->tty_list,
+ char *, config->n_tty + 1);
+ if (!config->tty_list)
+ goto err;
+ config->tty_list[config->n_tty++] = talloc_asprintf(
+ config->tty_list,
+ "Serial: /dev/hvc1");
+ }
+
+ return;
+err:
+ config->n_tty = 0;
+ pb_log("Failed to allocate memory for tty_list\n");
+}
+
static int load_config(struct platform *p, struct config *config)
{
struct platform_powerpc *platform = to_platform_powerpc(p);
@@ -1241,6 +1282,8 @@ static int load_config(struct platform *p, struct config *config)
if (platform->ipmi)
get_ipmi_network_override(platform, config);
+ get_active_consoles(config);
+
return 0;
}
diff --git a/discover/platform.c b/discover/platform.c
index fc0930d..254da97 100644
--- a/discover/platform.c
+++ b/discover/platform.c
@@ -79,6 +79,12 @@ static void dump_config(struct config *config)
pb_log(" IPMI boot device 0x%02x%s\n", config->ipmi_bootdev,
config->ipmi_bootdev_persistent ? " (persistent)" : "");
+ pb_log(" Modifications allowed to disks: %s\n",
+ config->allow_writes ? "yes" : "no");
+
+ pb_log(" Default UI to boot on: %s\n",
+ config->boot_tty ?: "none set");
+
pb_log(" language: %s\n", config->lang ?: "");
}
@@ -117,6 +123,10 @@ void config_set_defaults(struct config *config)
config->allow_writes = true;
config->disable_snapshots = false;
+ config->n_tty = 0;
+ config->tty_list = NULL;
+ config->boot_tty = NULL;
+
config->n_autoboot_opts = 2;
config->autoboot_opts = talloc_array(config, struct autoboot_option,
config->n_autoboot_opts);
--
2.8.3
More information about the Petitboot
mailing list