[lkml]   [2016]   [Aug]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [PATCH 2/6] x86/boot: Move compressed kernel to end of decompression buffer
On Mon, Aug 15, 2016 at 9:01 PM, Matt Mullins <> wrote:
> This appears to have a negative effect on booting the Intel Edison platform, as
> it uses u-boot as its bootloader. u-boot does not copy the init_size parameter
> when booting a bzImage: it copies a fixed-size setup_header [1], and its
> definition of setup_header doesn't include the parameters beyond setup_data [2].
> With a zero value for init_size, this calculates a %rsp value of 0x101ff9600.
> This causes the boot process to hard-stop at the immediately-following pushq, as
> this platform has no usable physical addresses above 4G.
> What are the options for getting this type of platform to function again? For
> now, kexec from a working Linux system does seem to be a work-around, but there
> appears to be other x86 hardware using u-boot: the folks seem to be
> maintaining the u-boot x86 tree.
> [1];a=blob;f=arch/x86/lib/zimage.c;h=1b33c771391f49ffe82864ff1582bdfd07e5e97d;hb=HEAD#l156
> [2];a=blob;f=arch/x86/include/asm/bootparam.h;h=140095117e5a2daef0a097c55f0ed10e08acc781;hb=HEAD#l24

Then should fix the u-boot about header_size assumption.
correct way should be like kexec one:

/* only copy setup_header */
setup_header_size = kernel[0x201] + 0x202 - 0x1f1;
if (setup_header_size > 0x7f)
setup_header_size = 0x7f;
memcpy((unsigned char *)real_mode + 0x1f1, kernel + 0x1f1,

need get setup_header_size at first before copying.

setup_base->hdr = params->hdr;

unsigned long setup_header_size;

setup_header_size = image[0x201] + 0x202 - 0x1f1;
if (setup_header_size > 0x7f)
setup_header_size = 0x7f;

memcpy((unsigned char *)&setup_base->hdr, &params->hdr,



 \ /
  Last update: 2016-09-17 09:57    [W:0.201 / U:6.336 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site