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
next 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