summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Muckle <smuckle@google.com>2020-02-18 14:14:28 -0800
committerSteve Muckle <smuckle@google.com>2020-02-19 10:27:35 -0800
commit3d4b008e62aca6ac055c53356079b7af966079e7 (patch)
tree6f4ab2eae7754c40d6031e9a4e715ef1b2c288b4
parentf91a1565353daaef4aaaed7e081b156c27130aea (diff)
unpack_bootimg: accomodate multi-page vendor boot headers
Currently unpack_bootimg assumes a single page header on the vendor boot image. This may not be the case, even the default page size of 2048 will result in a two page header. Change-Id: I85efbbafa71348c6e107d91e3c75543a75319e0f
-rw-r--r--include/bootimg/bootimg.h15
-rwxr-xr-xunpack_bootimg.py8
2 files changed, 12 insertions, 11 deletions
diff --git a/include/bootimg/bootimg.h b/include/bootimg/bootimg.h
index f032261..09411c6 100644
--- a/include/bootimg/bootimg.h
+++ b/include/bootimg/bootimg.h
@@ -171,9 +171,9 @@ struct boot_img_hdr_v2 : public boot_img_hdr_v1 {
* +---------------------+
* | boot header | 4096 bytes
* +---------------------+
- * | kernel | m
+ * | kernel | m pages
* +---------------------+
- * | ramdisk | n
+ * | ramdisk | n pages
* +---------------------+
*
* m = (kernel_size + 4096 - 1) / 4096
@@ -185,15 +185,16 @@ struct boot_img_hdr_v2 : public boot_img_hdr_v1 {
* required to be present when a v3 boot image is used) is as follows:
*
* +---------------------+
- * | vendor boot header | 1 page
+ * | vendor boot header | o pages
* +---------------------+
- * | vendor ramdisk | o pages
+ * | vendor ramdisk | p pages
* +---------------------+
- * | dtb | p pages
+ * | dtb | q pages
* +---------------------+
- * o = (vendor_ramdisk_size + page_size - 1) / page_size
- * p = (dtb_size + page_size - 1) / page_size
+ * o = (2108 + page_size - 1) / page_size
+ * p = (vendor_ramdisk_size + page_size - 1) / page_size
+ * q = (dtb_size + page_size - 1) / page_size
*
* 0. all entities in the boot image are 4096-byte aligned in flash, all
* entities in the vendor boot image are page_size (determined by the vendor
diff --git a/unpack_bootimg.py b/unpack_bootimg.py
index 5d52646..628c19b 100755
--- a/unpack_bootimg.py
+++ b/unpack_bootimg.py
@@ -24,6 +24,7 @@ from struct import unpack
import os
BOOT_IMAGE_HEADER_V3_PAGESIZE = 4096
+VENDOR_BOOT_IMAGE_HEADER_V3_SIZE = 2108
def create_out_dir(dir_path):
"""creates a directory 'dir_path' if it does not exist"""
@@ -196,11 +197,10 @@ def unpack_vendor_bootimage(args):
ramdisk_size = kernel_ramdisk_info[4]
page_size = kernel_ramdisk_info[1]
- # The first page contains the boot header
- num_boot_header_pages = 1
-
+ # The first pages contain the boot header
+ num_boot_header_pages = get_number_of_pages(VENDOR_BOOT_IMAGE_HEADER_V3_SIZE, page_size)
num_boot_ramdisk_pages = get_number_of_pages(ramdisk_size, page_size)
- ramdisk_offset = page_size * num_boot_header_pages # header occupies a page
+ ramdisk_offset = page_size * num_boot_header_pages
image_info_list = [(ramdisk_offset, ramdisk_size, 'vendor_ramdisk')]
dtb_offset = page_size * (num_boot_header_pages + num_boot_ramdisk_pages