summaryrefslogtreecommitdiffstats
path: root/discover
diff options
context:
space:
mode:
Diffstat (limited to 'discover')
-rw-r--r--discover/pb-discover.c3
-rw-r--r--discover/platform-powerpc.c6
-rw-r--r--discover/platform.c27
3 files changed, 36 insertions, 0 deletions
diff --git a/discover/pb-discover.c b/discover/pb-discover.c
index 81c582d..fd37068 100644
--- a/discover/pb-discover.c
+++ b/discover/pb-discover.c
@@ -185,6 +185,9 @@ int main(int argc, char *argv[])
if (config_get()->lang)
setlocale(LC_ALL, config_get()->lang);
+ if (config_get()->debug)
+ pb_log_set_debug(true);
+
system_info_init(server);
handler = device_handler_init(server, waitset, opts.dry_run == opt_yes);
diff --git a/discover/platform-powerpc.c b/discover/platform-powerpc.c
index 2ce69e7..98dc045 100644
--- a/discover/platform-powerpc.c
+++ b/discover/platform-powerpc.c
@@ -36,6 +36,7 @@ static const char *known_params[] = {
"petitboot,network",
"petitboot,timeout",
"petitboot,bootdev",
+ "petitboot,debug?",
NULL,
};
@@ -424,6 +425,11 @@ static void populate_config(struct platform_powerpc *platform,
populate_network_config(platform, config);
populate_bootdev_config(platform, config);
+
+ if (!config->debug) {
+ val = get_param(platform, "petitboot,debug?");
+ config->debug = val && !strcmp(val, "true");
+ }
}
static char *iface_config_str(void *ctx, struct interface_config *config)
diff --git a/discover/platform.c b/discover/platform.c
index 65e9ed4..418b9ea 100644
--- a/discover/platform.c
+++ b/discover/platform.c
@@ -1,7 +1,11 @@
+#define _GNU_SOURCE
+
+#include <fcntl.h>
#include <string.h>
#include <log/log.h>
+#include <file/file.h>
#include <types/types.h>
#include <talloc/talloc.h>
@@ -11,6 +15,8 @@ void *platform_ctx;
static struct platform *platform;
static struct config *config;
+static const char *kernel_cmdline_debug = "petitboot.debug";
+
static const char *device_type_name(enum device_type type)
{
switch (type) {
@@ -85,6 +91,25 @@ static void dump_config(struct config *config)
pb_log(" language: %s\n", config->lang ?: "");
}
+static bool config_debug_on_cmdline(void)
+{
+ char buf[600];
+ int rc, fd;
+
+ fd = open("/proc/cmdline", O_RDONLY);
+ if (fd < 0)
+ return false;
+
+ rc = read(fd, buf, sizeof(buf));
+ close(fd);
+
+ if (rc <= 0)
+ return false;
+
+ return memmem(buf, rc, kernel_cmdline_debug,
+ strlen(kernel_cmdline_debug)) != NULL;
+}
+
void config_set_defaults(struct config *config)
{
config->autoboot_enabled = true;
@@ -105,6 +130,8 @@ void config_set_defaults(struct config *config)
config->boot_priorities[0].priority = 2;
config->boot_priorities[1].type = DEVICE_TYPE_DISK;
config->boot_priorities[1].priority = 1;
+
+ config->debug = config_debug_on_cmdline();
}
int platform_init(void *ctx)
OpenPOWER on IntegriCloud