If the kernel we found isn't an uImage, try to use it as a zImage. Signed-off-by: Werner Almesberger --- Index: qi/src/phase2.c =================================================================== --- qi.orig/src/phase2.c 2009-01-09 01:11:24.000000000 -0200 +++ qi/src/phase2.c 2009-01-09 01:24:30.000000000 -0200 @@ -313,6 +313,39 @@ return (the_kernel_fn) (((char *)hdr) + sizeof(image_header_t)); } +static the_kernel_fn load_zimage(void *kernel_dram) +{ + u32 magic = *(u32 *) (kernel_dram + 0x24); + u32 size = *(u32 *) (kernel_dram + 0x2c); + int got; + + if (magic != 0x016f2818) { + puts("bad magic "); + print32(magic); + puts("\n"); + return NULL; + } + + puts(" Size: "); + printdec(size >> 10); + puts(" KiB\n"); + + got = read_file(this_kernel->filepath, kernel_dram, size); + if (got < 0) { + indicate(UI_IND_KERNEL_PULL_FAIL); + return NULL; + } + + if (got != size) { + puts("short kernel\n"); + return NULL; + } + + indicate(UI_IND_KERNEL_PULL_OK); + + return (the_kernel_fn) kernel_dram; +} + static void try_this_kernel(void) { the_kernel_fn the_kernel; @@ -364,6 +397,8 @@ the_kernel = load_uimage(kernel_dram); if (!the_kernel) + the_kernel = load_zimage(kernel_dram); + if (!the_kernel) return; /* initramfs if needed */ --