Patchwork hw/arm_boot.c: move initrd load address up to accommodate large kernels

login
register
mail settings
Submitter Peter Maydell
Date April 19, 2011, 3:32 p.m.
Message ID <1303227154-31067-1-git-send-email-peter.maydell@linaro.org>
Download mbox | patch
Permalink /patch/91996/
State New
Headers show

Comments

Peter Maydell - April 19, 2011, 3:32 p.m.
Newer kernels are large enough that they can overlap the address
where qemu places the initrd. Move the initrd up so that there is
enough space for the kernel again.

Unfortunately it's not possible to automatically determine the
size of the kernel if it is compressed, so this is the best we
can do.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
I think a variant of this patch was posted some time last year but didn't
attract any comment. Anyway, bumping up the arbitrary initrd load address
is a bit ugly but does at least let large kernels boot, and corresponds
to what you'd do on real hardware (ie change the load address in your
u-boot script)...

If anybody has a better solution then I'm happy to implement it; otherwise
I think this patch should be committed.

 hw/arm_boot.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Aurelien Jarno - April 20, 2011, 11:02 a.m.
On Tue, Apr 19, 2011 at 04:32:34PM +0100, Peter Maydell wrote:
> Newer kernels are large enough that they can overlap the address
> where qemu places the initrd. Move the initrd up so that there is
> enough space for the kernel again.
> 
> Unfortunately it's not possible to automatically determine the
> size of the kernel if it is compressed, so this is the best we
> can do.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> I think a variant of this patch was posted some time last year but didn't
> attract any comment. Anyway, bumping up the arbitrary initrd load address
> is a bit ugly but does at least let large kernels boot, and corresponds
> to what you'd do on real hardware (ie change the load address in your
> u-boot script)...
> 
> If anybody has a better solution then I'm happy to implement it; otherwise
> I think this patch should be committed.
> 
>  hw/arm_boot.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)

Thanks, applied.

> diff --git a/hw/arm_boot.c b/hw/arm_boot.c
> index 41e99d1..bfac982 100644
> --- a/hw/arm_boot.c
> +++ b/hw/arm_boot.c
> @@ -15,7 +15,7 @@
>  
>  #define KERNEL_ARGS_ADDR 0x100
>  #define KERNEL_LOAD_ADDR 0x00010000
> -#define INITRD_LOAD_ADDR 0x00800000
> +#define INITRD_LOAD_ADDR 0x00d00000
>  
>  /* The worlds second smallest bootloader.  Set r0-r2, then jump to kernel.  */
>  static uint32_t bootloader[] = {
> -- 
> 1.7.1
> 
> 
>

Patch

diff --git a/hw/arm_boot.c b/hw/arm_boot.c
index 41e99d1..bfac982 100644
--- a/hw/arm_boot.c
+++ b/hw/arm_boot.c
@@ -15,7 +15,7 @@ 
 
 #define KERNEL_ARGS_ADDR 0x100
 #define KERNEL_LOAD_ADDR 0x00010000
-#define INITRD_LOAD_ADDR 0x00800000
+#define INITRD_LOAD_ADDR 0x00d00000
 
 /* The worlds second smallest bootloader.  Set r0-r2, then jump to kernel.  */
 static uint32_t bootloader[] = {