diff options
author | Christian Gmeiner | 2020-05-29 17:53:45 +0200 |
---|---|---|
committer | Tom Rini | 2020-06-02 13:06:12 -0400 |
commit | 95712afc17bb4141e7f902983fb27e5bbc5aa62f (patch) | |
tree | d68ea75da7580636fdca6ca5b72d96c7ef8a16a2 | |
parent | 6d39fccc176051bd970f97df9bb7e578f9854677 (diff) |
image: android: fix abootimg support
abootimg creates images where all load addresses are 0.
Android Boot Image Info:
* file name = artifacts/fastboot.img
* image size = 31381504 bytes (29.93 MB)
page size = 2048 bytes
* Boot Name = ""
* kernel size = 9397406 bytes (8.96 MB)
ramdisk size = 21981144 bytes (20.96 MB)
* load addresses:
kernel: 0x00000000
ramdisk: 0x00000000
tags: 0x00000000
Without this fix we end in a data abort:
Booting kernel at 0x15000000...
* kernel: cmdline image address = 0x15000000
Kernel load addr 0x00000000 size 9178 KiB
Kernel command line: ip=dhcp console=ttymxc0,115200n8
kernel data at 0x15000800, len = 0x008f649e (9397406)
* ramdisk: cmdline image address = 0x15000000
RAM disk load addr 0x00000000 size 21473 KiB
ramdisk start = 0x158f7000, ramdisk end = 0x16def35c
kernel loaded at 0x00000000, end = 0x00000000
Loading Kernel Image
data abort
pc : [<8ff8c004>] lr : [<5d7ac70f>]
sp : 8f57ed64 ip : 48f17668 fp : 00000000
r10: 00000002 r9 : 8f58aed0 r8 : 03fa4c58
r7 : 5e842497 r6 : fbe73965 r5 : 7c459955 r4 : df020fde
r3 : 1b7aa45b r2 : 007f23fe r1 : 15104820 r0 : 00104000
Flags: nzCv IRQs off FIQs off Mode SVC_32 (T)
Code: f07c e8b1 51f8 3a20 (e8a0) 51f8
Resetting CPU ...
resetting ...
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
-rw-r--r-- | common/image-android.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/common/image-android.c b/common/image-android.c index 6af9baa121d..18f7c8db03b 100644 --- a/common/image-android.c +++ b/common/image-android.c @@ -33,6 +33,13 @@ static ulong android_image_get_kernel_addr(const struct andr_img_hdr *hdr) if (hdr->kernel_addr == ANDROID_IMAGE_DEFAULT_KERNEL_ADDR) return (ulong)hdr + hdr->page_size; + /* + * abootimg creates images where all load addresses are 0 + * and we need to fix them. + */ + if (hdr->kernel_addr == 0 && hdr->ramdisk_addr == 0) + return env_get_ulong("kernel_addr_r", 16, 0); + return hdr->kernel_addr; } |