All of lore.kernel.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.ibm.com \
    --cc=linuxppc-dev@ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.