This command to load a zImage directly into u-Boot was submitted by Holger Schurig some time ago. diff -x ptx-patches -x CVS -urN u-boot/common/cmd_bootz.c u-boot-ptx/common/cmd_bootz.c --- u-boot/common/cmd_bootz.c 1970-01-01 01:00:00.000000000 +0100 +++ u-boot-ptx/common/cmd_bootz.c 2003-06-14 16:43:44.000000000 +0200 @@ -0,0 +1,101 @@ +/* + * (C) Copyright 2003 + * Holger Schurig, M&N Logistik-Loesungen Online GmbH, + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * Linux zImage boot support + */ +#include +#include +#include +#include +//#include + +#define DEBUG + +#ifdef CONFIG_SHOW_BOOT_PROGRESS +# include +# define SHOW_BOOT_PROGRESS(arg) show_boot_progress(arg) +#else +# define SHOW_BOOT_PROGRESS(arg) +#endif + + +#define CONFIG_KERNEL_RAM_BASE 0x40000 + +int do_bootz (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ + DECLARE_GLOBAL_DATA_PTR; + + ulong addr = 0x40000; + ulong initrd_start = 0; + ulong initrd_end = 0; + ulong data; + void (*theKernel)(int zero, int arch, struct tag *params); + bd_t *bd = gd->bd; +#ifdef CONFIG_CMDLINE_TAG + char *commandline = getenv("bootargs"); +#endif + addr = simple_strtoul(argv[1], NULL, 16); + + theKernel = (void (*)(int, int, struct tag*))addr; + + SHOW_BOOT_PROGRESS (14); + +#ifdef DEBUG + printf ("## Transferring control to Linux (at address %08lx) ...\n", + (ulong)theKernel); +#endif + +#if defined (CONFIG_SETUP_MEMORY_TAGS) || \ + defined (CONFIG_CMDLINE_TAG) || \ + defined (CONFIG_INITRD_TAG) || \ + defined (CONFIG_VFD) + setup_start_tag(bd); +#ifdef CONFIG_SETUP_MEMORY_TAGS + setup_memory_tags(bd); +#endif +#ifdef CONFIG_CMDLINE_TAG + setup_commandline_tag(bd, commandline); +#endif +#ifdef CONFIG_INITRD_TAG + setup_initrd_tag(bd, initrd_start, initrd_end); +#endif +#if 0 + setup_ramdisk_tag(bd); +#endif +#if defined (CONFIG_VFD) + setup_videolfb_tag(gd); +#endif + setup_end_tag(bd); +#endif + + /* we assume that the kernel is in place */ + printf("\nStarting kernel ...\n\n"); + + cleanup_before_linux(); + + theKernel(0, bd->bi_arch_number, params); + + printf("ERROR: we should never come to this place ...\n\n"); + return 0; +}