diff options
-rw-r--r-- | common/image-android.c | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/common/image-android.c b/common/image-android.c index 264bf90007..3564a64221 100644 --- a/common/image-android.c +++ b/common/image-android.c @@ -120,6 +120,7 @@ int android_image_check_header(const struct andr_img_hdr *hdr) ulong android_image_get_end(const struct andr_img_hdr *hdr) { ulong end; + /* * The header takes a full page, the remaining components are aligned * on page boundary @@ -130,6 +131,12 @@ ulong android_image_get_end(const struct andr_img_hdr *hdr) end += ALIGN(hdr->ramdisk_size, hdr->page_size); end += ALIGN(hdr->second_size, hdr->page_size); + if (hdr->header_version >= 1) + end += ALIGN(hdr->recovery_dtbo_size, hdr->page_size); + + if (hdr->header_version >= 2) + end += ALIGN(hdr->dtb_size, hdr->page_size); + return end; } @@ -207,21 +214,36 @@ void android_print_contents(const struct andr_img_hdr *hdr) u32 os_ver = hdr->os_version >> 11; u32 os_lvl = hdr->os_version & ((1U << 11) - 1); - printf("%skernel size: %x\n", p, hdr->kernel_size); - printf("%skernel address: %x\n", p, hdr->kernel_addr); - printf("%sramdisk size: %x\n", p, hdr->ramdisk_size); - printf("%sramdisk address: %x\n", p, hdr->ramdisk_addr); - printf("%ssecond size: %x\n", p, hdr->second_size); - printf("%ssecond address: %x\n", p, hdr->second_addr); - printf("%stags address: %x\n", p, hdr->tags_addr); - printf("%spage size: %x\n", p, hdr->page_size); + printf("%skernel size: %x\n", p, hdr->kernel_size); + printf("%skernel address: %x\n", p, hdr->kernel_addr); + printf("%sramdisk size: %x\n", p, hdr->ramdisk_size); + printf("%sramdisk address: %x\n", p, hdr->ramdisk_addr); + printf("%ssecond size: %x\n", p, hdr->second_size); + printf("%ssecond address: %x\n", p, hdr->second_addr); + printf("%stags address: %x\n", p, hdr->tags_addr); + printf("%spage size: %x\n", p, hdr->page_size); /* ver = A << 14 | B << 7 | C (7 bits for each of A, B, C) * lvl = ((Y - 2000) & 127) << 4 | M (7 bits for Y, 4 bits for M) */ - printf("%sos_version: %x (ver: %u.%u.%u, level: %u.%u)\n", + printf("%sos_version: %x (ver: %u.%u.%u, level: %u.%u)\n", p, hdr->os_version, (os_ver >> 7) & 0x7F, (os_ver >> 14) & 0x7F, os_ver & 0x7F, (os_lvl >> 4) + 2000, os_lvl & 0x0F); - printf("%sname: %s\n", p, hdr->name); - printf("%scmdline: %s\n", p, hdr->cmdline); + printf("%sname: %s\n", p, hdr->name); + printf("%scmdline: %s\n", p, hdr->cmdline); + printf("%sheader_version: %d\n", p, hdr->header_version); + + if (hdr->header_version >= 1) { + printf("%srecovery dtbo size: %x\n", p, + hdr->recovery_dtbo_size); + printf("%srecovery dtbo offset: %llx\n", p, + hdr->recovery_dtbo_offset); + printf("%sheader size: %x\n", p, + hdr->header_size); + } + + if (hdr->header_version >= 2) { + printf("%sdtb size: %x\n", p, hdr->dtb_size); + printf("%sdtb addr: %llx\n", p, hdr->dtb_addr); + } } #endif |