From: Ray Strode Date: Wed, 28 May 2008 14:50:38 +0000 (-0400) Subject: Read /proc/cmdline and enable debugging if plymouth:debug is there X-Git-Tag: 0.1.0~60 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e8d4a7d052feb95e1486daa9576ecdb46954cb52;p=thirdparty%2Fplymouth.git Read /proc/cmdline and enable debugging if plymouth:debug is there Currently we toggle verbose messges if the user presses ctrl-v. That's fine, but doesn't help to debug problems that happen before a splash screen is shown. This provides a mechanism to enable messages earlier --- diff --git a/src/main.c b/src/main.c index df057e2b..87799604 100644 --- a/src/main.c +++ b/src/main.c @@ -42,6 +42,10 @@ #define PLY_WORKING_DIRECTORY "/var/run/plymouth" #endif +#ifndef PLY_MAX_COMMAND_LINE_SIZE +#define PLY_MAX_COMMAND_LINE_SIZE 512 +#endif + typedef struct { ply_event_loop_t *loop; @@ -51,6 +55,8 @@ typedef struct ply_terminal_session_t *session; ply_buffer_t *boot_buffer; int original_root_dir_fd; + + char kernel_command_line[PLY_MAX_COMMAND_LINE_SIZE]; } state_t; static ply_boot_splash_t *start_boot_splash (state_t *state, @@ -379,6 +385,32 @@ mount_proc_filesystem (state_t *state) return true; } +static bool +get_kernel_command_line (state_t *state) +{ + int fd; + + ply_trace ("opening /proc/cmdline"); + fd = open ("proc/cmdline", O_RDONLY); + + if (fd < 0) + { + ply_trace ("couldn't open it: %m"); + return false; + } + + ply_trace ("reading kernel command line"); + if (read (fd, state->kernel_command_line, sizeof (state->kernel_command_line)) < 0) + { + ply_trace ("couldn't read it: %m"); + return false; + } + + ply_trace ("Kernel command line is: '%s'", state->kernel_command_line); + return true; +} + + static bool create_device_nodes (state_t *state) { @@ -444,6 +476,23 @@ copy_data_files (state_t *state) return true; } +static void +check_verbosity (state_t *state) +{ + ply_trace ("checking if tracing should be enabled"); + + if ((strstr (state->kernel_command_line, " plymouth:debug ") != NULL) + || (strstr (state->kernel_command_line, "plymouth:debug ") != NULL) + || (strstr (state->kernel_command_line, " plymouth:debug") != NULL)) + { + ply_trace ("tracing should be enabled!"); + if (!ply_is_tracing ()) + ply_toggle_tracing (); + } + else + ply_trace ("tracing shouldn't be enabled!"); +} + static bool set_console_io_to_vt1 (state_t *state) { @@ -477,6 +526,11 @@ initialize_environment (state_t *state) if (!mount_proc_filesystem (state)) return false; + if (!get_kernel_command_line (state)) + return false; + + check_verbosity (state); + if (!mount_devpts_filesystem (state)) return false;