public inbox for linuxppc-dev@ozlabs.org 
 help / color / mirror / Atom feed
From: mostrows@watson•ibm.com
To: linuxppc-dev@ozlabs•org
Subject: [PATCH] Provide mechanism for editing builtin command-line in zImage binary.
Date: Mon, 29 May 2006 22:01:03 -0400	[thread overview]
Message-ID: <11489544631499-git-send-email-mostrows@watson.ibm.com> (raw)
In-Reply-To: 

zImage will store the builtin command-line in a dedicated section, allowing
it to be easily identified and edited with user-space tools.

zImage will set /chosen/bootargs to the stored builtin command-line setting,
if /chosen/bootargs is empty (emulating the behavior in prom_init.c).

Use of this mechanism avoids the need to modify firmware or rely on a
bootloader to customize kernel arguments (and overall system
behavior).  The command line can be edited as needed when a zImage is
copied to a TFTP staging area for download by firmware.

--
Signed-off-by: Michal Ostrowski <mostrows@watson•ibm.com>

---

 arch/powerpc/boot/Makefile |    3 ++-
 arch/powerpc/boot/main.c   |   28 ++++++++++++++++++++++++++++
 arch/powerpc/boot/prom.h   |    6 ++++++
 3 files changed, 36 insertions(+), 1 deletions(-)

38d6b8581e01886e352b699c978a3a5ac6672622
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index 840ae59..d7ba474 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -41,7 +41,8 @@ src-boot += $(zlib)
 src-boot := $(addprefix $(obj)/, $(src-boot))
 obj-boot := $(addsuffix .o, $(basename $(src-boot)))
 
-BOOTCFLAGS	+= -I$(obj) -I$(srctree)/$(obj)
+BOOTCFLAGS	+= -I$(obj) -I$(srctree)/$(obj) -I$(O)/include -I$(O)/include2\
+			-D__KERNEL__
 
 quiet_cmd_copy_zlib = COPY    $@
       cmd_copy_zlib = sed "s@__attribute_used__@@;s@<linux/\([^>]\+\).*@\"\1\"@" $< > $@
diff --git a/arch/powerpc/boot/main.c b/arch/powerpc/boot/main.c
index 816446f..eef25de 100644
--- a/arch/powerpc/boot/main.c
+++ b/arch/powerpc/boot/main.c
@@ -10,6 +10,9 @@
  */
 #include <stdarg.h>
 #include <stddef.h>
+#include <linux/autoconf.h>
+#include <asm/setup.h>
+
 #include "elf.h"
 #include "page.h"
 #include "string.h"
@@ -33,6 +36,16 @@ extern char _vmlinux_end[];
 extern char _initrd_start[];
 extern char _initrd_end[];
 
+#ifdef CONFIG_CMDLINE
+/* Putting this in a seperate section allows for simple tools to 
+ * edit this setting after a build (i.e. as the kernel image is being deployed
+ * for booting. 
+ */
+static char builtin_cmdline[COMMAND_LINE_SIZE]
+		__attribute__((section("__builtin_cmdline"))) = CONFIG_CMDLINE;
+#endif
+
+
 struct addr_range {
 	unsigned long addr;
 	unsigned long size;
@@ -204,6 +217,19 @@ static int is_elf32(void *hdr)
 	return 1;
 }
 
+void export_cmdline(void* chosen_handle)
+{
+#ifdef CONFIG_CMDLINE
+        int len;
+        char cmdline[COMMAND_LINE_SIZE];
+        len = getprop(chosen_handle, "bootargs", cmdline, sizeof(cmdline));
+        if ((len <= 0 || cmdline[0] == 0) && builtin_cmdline[0]) {
+                setprop(chosen_handle, "bootargs", builtin_cmdline,
+                        strlen(builtin_cmdline)+1);
+        }
+#endif /* CONFIG_CMDLINE */
+}
+
 void start(unsigned long a1, unsigned long a2, void *promptr, void *sp)
 {
 	int len;
@@ -289,6 +315,8 @@ void start(unsigned long a1, unsigned lo
 		memmove((void *)vmlinux.addr,(void *)vmlinuz.addr,vmlinuz.size);
 	}
 
+	export_cmdline(chosen_handle);
+
 	/* Skip over the ELF header */
 #ifdef DEBUG
 	printf("... skipping 0x%lx bytes of ELF header\n\r",
diff --git a/arch/powerpc/boot/prom.h b/arch/powerpc/boot/prom.h
index 3e2ddd4..f613092 100644
--- a/arch/powerpc/boot/prom.h
+++ b/arch/powerpc/boot/prom.h
@@ -31,4 +31,10 @@ static inline int getprop(void *phandle,
 	return call_prom("getprop", 4, 1, phandle, name, buf, buflen);
 }
 
+static inline int setprop(void *phandle, const char *name,
+                          void *buf, int buflen)
+{
+        return call_prom("setprop", 4, 1, phandle, name, buf, buflen);
+}
+
 #endif				/* _PPC_BOOT_PROM_H_ */
-- 
1.1.4.g0b63-dirty

             reply	other threads:[~2006-05-30  2:01 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-05-30  2:01 mostrows [this message]
2006-05-30  2:27 ` [PATCH] Provide mechanism for editing builtin command-line in zImage binary Michal Ostrowski
2006-05-30 20:41 ` Mark A. Greer
2006-05-30 21:12   ` Michal Ostrowski
2006-05-31 20:04     ` Mark A. Greer
2006-05-31 20:26       ` Michal Ostrowski
2006-05-31 20:35         ` Matthew McClintock
2006-05-31 21:04           ` Michal Ostrowski
2006-06-09  9:47 ` Paul Mackerras
2006-06-09 13:06   ` [PATCH] Editable kernel " mostrows

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=11489544631499-git-send-email-mostrows@watson.ibm.com \
    --to=mostrows@watson$(echo .)ibm.com \
    --cc=linuxppc-dev@ozlabs$(echo .)org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox