parse the second area of android image
authorBin Chen <bin.chen@linaro.org>
Sat, 27 Jan 2018 05:59:08 +0000 (16:59 +1100)
committerTom Rini <trini@konsulko.com>
Thu, 8 Feb 2018 02:58:26 +0000 (21:58 -0500)
The second area of android image was intended to put a 2nd stage
bootloader but in practice were rarely used (in my knowledge).

An proposal was made to the AOSP to (re)use the second area as the dtb[1],
This patch itself doesn't depend on that proposal being accepted but it won't
be that helpful as well if that proposal won't be accepted. But don't do
any harm as well.

[1] https://android-review.googlesource.com/#/c/417447/
Signed-off-by: Bin Chen <bin.chen@linaro.org>
Reviewed-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
common/image-android.c
include/image.h

index e74d0aafca57e3d74ed2c7f898dfbc2f5ebfab08..5ad3a1fa38a7d32daec1bb967a403a6da96ac90f 100644 (file)
@@ -146,6 +146,25 @@ int android_image_get_ramdisk(const struct andr_img_hdr *hdr,
        return 0;
 }
 
+int android_image_get_second(const struct andr_img_hdr *hdr,
+                             ulong *second_data, ulong *second_len)
+{
+       if (!hdr->second_size) {
+               *second_data = *second_len = 0;
+               return -1;
+       }
+
+       *second_data = (unsigned long)hdr;
+       *second_data += hdr->page_size;
+       *second_data += ALIGN(hdr->kernel_size, hdr->page_size);
+       *second_data += ALIGN(hdr->ramdisk_size, hdr->page_size);
+
+       printf("second address is 0x%lx\n",*second_data);
+
+       *second_len = hdr->second_size;
+       return 0;
+}
+
 #if !defined(CONFIG_SPL_BUILD)
 /**
  * android_print_contents - prints out the contents of the Android format image
index b2b23a96f110bc2af9af2e20206ecf0cf68d2b17..c8ce4da90191e33e83a7c3098e0e617db34ad9d4 100644 (file)
@@ -1263,6 +1263,8 @@ int android_image_get_kernel(const struct andr_img_hdr *hdr, int verify,
                             ulong *os_data, ulong *os_len);
 int android_image_get_ramdisk(const struct andr_img_hdr *hdr,
                              ulong *rd_data, ulong *rd_len);
+int android_image_get_second(const struct andr_img_hdr *hdr,
+                             ulong *second_data, ulong *second_len);
 ulong android_image_get_end(const struct andr_img_hdr *hdr);
 ulong android_image_get_kload(const struct andr_img_hdr *hdr);
 void android_print_contents(const struct andr_img_hdr *hdr);