[U-Boot-Users] [PATCH] make the machid configurable via the environment (Was: [PATCH] Changed load address and entry point for uImage to ZRELADDR + 6MB)

Uwe Kleine-König Uwe.Kleine-Koenig at digi.com
Wed Jan 30 09:08:49 CET 2008


Hello Nicolas,

Nicolas Pitre wrote:
> > But does U-Boot properly provide machine information to the kernel these
> > days?  I have been and still being burned by U-Boot hardcoding the
> > _wrong_ machine ID, and therefore custom built kernels from k.o simply
> > won't boot on those boards without hacking the kernel source.
> With "our" U-Boot you can override the compiled-in machid with an
> environment variable.  I didn't implement this patch but I think it's
> not that difficult.  I will check tomorrow if I can easily get a patch
> out of our scm.
It took a bit longer, but here it comes.  This is on top of todays
u-boot.

I didn't tested this patch in that version, but this is how it is done
in our version of U-Boot (that is considerable older).

Switching the machid is also very convenient because we have modules
that can be plugged on different base boards and so can use different
machids.

Best regards
Uwe

--->8---
From: Uwe Kleine-König <Uwe.Kleine-Koenig at digi.com>

make the machid configurable via the environment

If the variable "machid" exists, let do_bootm_linux use that instead of
bd->bi_arch_number.

Signed-off-by: Uwe Kleine-König <Uwe.Kleine-Koenig at digi.com>
---
 lib_arm/armlinux.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/lib_arm/armlinux.c b/lib_arm/armlinux.c
index 6d32a41..62185f0 100644
--- a/lib_arm/armlinux.c
+++ b/lib_arm/armlinux.c
@@ -78,6 +78,8 @@ void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
 	void (*theKernel)(int zero, int arch, uint params);
 	image_header_t *hdr = &header;
 	bd_t *bd = gd->bd;
+	int machid = bd->bi_arch_number;
+	char *s;
 
 #ifdef CONFIG_CMDLINE_TAG
 	char *commandline = getenv ("bootargs");
@@ -85,6 +87,12 @@ void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
 
 	theKernel = (void (*)(int, int, uint))ntohl(hdr->ih_ep);
 
+	s = getenv ("machid");
+	if (s) {
+		machid = simple_strtoul (s, NULL, 16);
+		printf ("Using machid 0x%x from environment\n", machid);
+	}
+
 	/*
 	 * Check if there is an initrd image
 	 */
@@ -260,7 +268,7 @@ void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
 
 	cleanup_before_linux ();
 
-	theKernel (0, bd->bi_arch_number, bd->bi_boot_params);
+	theKernel (0, machid, bd->bi_boot_params);
 }
 
 
-- 
1.5.3.8


-- 
Uwe Kleine-König, Software Engineer
Digi International GmbH Branch Breisach, Küferstrasse 8, 79206 Breisach, Germany
Tax: 315/5781/0242 / VAT: DE153662976 / Reg. Amtsgericht Dortmund HRB 13962




More information about the U-Boot mailing list