forked from DGNum/liminix
patch qemu to load uncompressed ARM kernels at correct offset
This commit is contained in:
parent
80793aa694
commit
c5c5f1687a
2 changed files with 38 additions and 0 deletions
|
@ -183,5 +183,12 @@ extraPkgs // {
|
||||||
"\nsed -i.bak 's/linux.*-mips/linux-mops/' Configure\n");
|
"\nsed -i.bak 's/linux.*-mips/linux-mops/' Configure\n");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
qemu = prev.qemu.overrideAttrs (o: {
|
||||||
|
patches = o.patches ++ [
|
||||||
|
./pkgs/qemu/arm-image-friendly-load-addr.patch
|
||||||
|
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
pppBuild = prev.ppp;
|
pppBuild = prev.ppp;
|
||||||
}
|
}
|
||||||
|
|
31
pkgs/qemu/arm-image-friendly-load-addr.patch
Normal file
31
pkgs/qemu/arm-image-friendly-load-addr.patch
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
Loading kernel at offset 0x10000 works only for zImage, but not for Image,
|
||||||
|
because the kernel expect the start of decompressed kernel (.head.text) to be
|
||||||
|
at an address that's a distance that's 16MB aligned from PAGE_OFFSET +
|
||||||
|
TEXT_OFFSET (see vmlinux.lds.S). This check is enfornced in __fixup_pv_table in
|
||||||
|
arch/arm/kernel/head.S TEXT_OFFSET is 0x00008000, so a 16MB alignment needs to
|
||||||
|
have a "0x8000" in the lower 16 bits so that they cancel out. Currently the
|
||||||
|
offset Qemu loads it at is 0x10000.
|
||||||
|
|
||||||
|
With zImage, this need is met because zImage loads the uncompressed Image
|
||||||
|
correctly, however when loading an Image and executing directly Qemu is
|
||||||
|
required it to load it at the correct location. Doing so, doesn't break Qemu's
|
||||||
|
zImage loading. With this patch, both zImage and Image work correctly.
|
||||||
|
|
||||||
|
Original patch from https://patchwork.kernel.org/project/linux-arm-kernel/patch/1395718484-20424-1-git-send-email-joelf@ti.com/ was
|
||||||
|
Signed-off-by: Joel Fernandes <joelf@ti.com>
|
||||||
|
|
||||||
|
(Edited by Daniel Barlow to apply cleanly to more recent QEMU)
|
||||||
|
|
||||||
|
diff --git a/hw/arm/boot.c b/hw/arm/boot.c
|
||||||
|
index ada2717f76..18bcdd45d2 100644
|
||||||
|
--- a/hw/arm/boot.c
|
||||||
|
+++ b/hw/arm/boot.c
|
||||||
|
@@ -32,7 +32,7 @@
|
||||||
|
*/
|
||||||
|
#define KERNEL_ARGS_ADDR 0x100
|
||||||
|
#define KERNEL_NOLOAD_ADDR 0x02000000
|
||||||
|
-#define KERNEL_LOAD_ADDR 0x00010000
|
||||||
|
+#define KERNEL_LOAD_ADDR 0x00008000
|
||||||
|
#define KERNEL64_LOAD_ADDR 0x00080000
|
||||||
|
|
||||||
|
#define ARM64_TEXT_OFFSET_OFFSET 8
|
Loading…
Reference in a new issue