Patchwork [2/5] initramfs-module-debug: add

login
register
mail settings
Submitter Otavio Salvador
Date Dec. 6, 2011, 4:07 p.m.
Message ID <e66da1c8168aeaa4be6b5c9240bf9d8b685ff184.1323187516.git.otavio@ossystems.com.br>
Download mbox | patch
Permalink /patch/16309/
State New
Headers show

Comments

Otavio Salvador - Dec. 6, 2011, 4:07 p.m.
Adds support to dynamic debugging of initramfs using bootparam in
following format:

 - shell                 : starts a shell before and after each module
 - shell=before:<module> : starts a shell before <module> is loaded and run
 - shell=after:<module>  : starts a shell after <module> is loaded and run

 - shell-debug                 : run set -x as soon as possible
 - shell-debug=before:<module> : run set -x before <module> is loaded and run
 - shell-debug=after:<module>  : run set -x after <module> is loaded and run

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---
 .../initrdscripts/initramfs-module-debug/debug     |   82 ++++++++++++++++++++
 .../initrdscripts/initramfs-module-debug_1.0.bb    |   15 ++++
 2 files changed, 97 insertions(+), 0 deletions(-)
 create mode 100644 meta/recipes-core/initrdscripts/initramfs-module-debug/debug
 create mode 100644 meta/recipes-core/initrdscripts/initramfs-module-debug_1.0.bb

Patch

diff --git a/meta/recipes-core/initrdscripts/initramfs-module-debug/debug b/meta/recipes-core/initrdscripts/initramfs-module-debug/debug
new file mode 100644
index 0000000..00bfd7d
--- /dev/null
+++ b/meta/recipes-core/initrdscripts/initramfs-module-debug/debug
@@ -0,0 +1,82 @@ 
+#!/bin/sh
+# Copyright (C) 2011 O.S. Systems Software LTDA.
+# Licensed on MIT
+
+# Adds support to dynamic debugging of initramfs using bootparam in
+# following format:
+#   shell                 : starts a shell before and after each module
+#   shell=before:<module> : starts a shell before <module> is loaded and run
+#   shell=after:<module>  : starts a shell after <module> is loaded and run
+#
+#   shell-debug                 : run set -x as soon as possible
+#   shell-debug=before:<module> : run set -x before <module> is loaded and run
+#   shell-debug=after:<module>  : run set -x after <module> is loaded and run
+
+DEBUG_SHELL="false"
+
+debug_hook_handler() {
+	status=$1
+	module=$2
+
+	if [ -n "$bootparam_shell" ] && [ "$bootparam_shell" != "true" ]; then
+		shell_wanted_status=`expr $bootparam_shell : '\(.*\):.*'`
+		shell_wanted_module=`expr $bootparam_shell : '.*:\(.*\)'`
+
+		if [ "$shell_wanted_status" = "before" ]; then
+			shell_wanted_status=pre
+		else
+			shell_wanted_status=post
+		fi
+	fi
+
+	if [ "$bootparam_shell" = "true" ] ||
+		( [ "$status" = "$shell_wanted_status" ] &&
+			[ "$module" = "$shell_wanted_module" ] ); then
+		if [ "$status" = "pre" ]; then
+			status_msg="before"
+		else
+			status_msg="after"
+		fi
+
+		msg "Starting shell $status_msg $module..."
+		sh
+	fi
+
+	if [ -n "$bootparam_shell_debug" ] && [ "$bootparam_shell_debug" != "true" ]; then
+		shell_debug_wanted_status=`expr $bootparam_shell_debug : '\(.*\):.*'`
+		shell_debug_wanted_module=`expr $bootparam_shell_debug : '.*:\(.*\)'`
+
+		if [ "$shell_debug_wanted_status" = "before" ]; then
+			shell_debug_wanted_status=pre
+		else
+			shell_debug_wanted_status=post
+		fi
+	fi
+
+	if [ "$bootparam_shell_debug" = "true" ] ||
+		( [ "$status" = "$shell_debug_wanted_status" ] &&
+			[ "$module" = "$shell_debug_wanted_module" ] ); then
+		if [ "$DEBUG_SHELL" = "true" ]; then
+			return 0
+		fi
+
+		if [ "$status" = "pre" ]; then
+			status_msg="before"
+		else
+			status_msg="after"
+		fi
+
+		msg "Starting shell debugging $status_msg $module..."
+		DEBUG_SHELL="true"
+		set -x
+	fi
+}
+
+debug_enabled() {
+	return 0
+}
+
+debug_run() {
+	add_module_pre_hook "debug_hook_handler"
+	add_module_post_hook "debug_hook_handler"
+}
diff --git a/meta/recipes-core/initrdscripts/initramfs-module-debug_1.0.bb b/meta/recipes-core/initrdscripts/initramfs-module-debug_1.0.bb
new file mode 100644
index 0000000..d0380f4
--- /dev/null
+++ b/meta/recipes-core/initrdscripts/initramfs-module-debug_1.0.bb
@@ -0,0 +1,15 @@ 
+DESCRIPTION = "initramfs debug helper"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+RDEPENDS = "initramfs-base"
+
+inherit allarch
+
+SRC_URI = "file://debug"
+
+do_install() {
+    install -d ${D}/init.d
+    install -m 0755 ${WORKDIR}/debug ${D}/init.d/00-debug
+}
+
+FILES_${PN} = "/init.d/*"