* [U-Boot] [PATCH] image: android: Support boot image v1 and v2
@ 2019-08-15 17:25 Sam Protsenko
2019-10-17 11:24 ` Tom Rini
0 siblings, 1 reply; 2+ messages in thread
From: Sam Protsenko @ 2019-08-15 17:25 UTC (permalink / raw)
To: u-boot
In new versions of Android Boot Image next fields are added to the
header (and corresponding payloads are added to the image itself):
- v1: Recovery DTBO
- v2: DTB
Account for these new fields in next functions:
1. android_image_get_end(): as v1 and v2 have new payloads in the
image, the calculation of image end address should be extended
correspondingly; this is used e.g. by "bootm" command when booting
the kernel from Android Boot Image
2. android_print_contents(): new fields values in v1 and v2 should be
printed; the result of this function can be seen e.g. in "iminfo"
command
This commit doesn't add the means for working with new payloads in v1
and v2 images (it will be done in further commits), it only updates
existing functions w.r.t. changes in boot image v1/v2.
Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
---
common/image-android.c | 44 +++++++++++++++++++++++++++++++-----------
1 file 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
--
2.23.0.rc1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [U-Boot] [PATCH] image: android: Support boot image v1 and v2
2019-08-15 17:25 [U-Boot] [PATCH] image: android: Support boot image v1 and v2 Sam Protsenko
@ 2019-10-17 11:24 ` Tom Rini
0 siblings, 0 replies; 2+ messages in thread
From: Tom Rini @ 2019-10-17 11:24 UTC (permalink / raw)
To: u-boot
On Thu, Aug 15, 2019 at 08:25:07PM +0300, Sam Protsenko wrote:
> In new versions of Android Boot Image next fields are added to the
> header (and corresponding payloads are added to the image itself):
> - v1: Recovery DTBO
> - v2: DTB
>
> Account for these new fields in next functions:
> 1. android_image_get_end(): as v1 and v2 have new payloads in the
> image, the calculation of image end address should be extended
> correspondingly; this is used e.g. by "bootm" command when booting
> the kernel from Android Boot Image
> 2. android_print_contents(): new fields values in v1 and v2 should be
> printed; the result of this function can be seen e.g. in "iminfo"
> command
>
> This commit doesn't add the means for working with new payloads in v1
> and v2 images (it will be done in further commits), it only updates
> existing functions w.r.t. changes in boot image v1/v2.
>
> Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
Applied to u-boot/master, thanks!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20191017/c680e041/attachment.sig>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-10-17 11:24 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-08-15 17:25 [U-Boot] [PATCH] image: android: Support boot image v1 and v2 Sam Protsenko
2019-10-17 11:24 ` Tom Rini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox