Support boot image v4
Test: th
Change-Id: Ied870199f92dc2e2015f3ef59e5ab52eddc987fd
diff --git a/payload_generator/boot_img_filesystem.cc b/payload_generator/boot_img_filesystem.cc
index 89b175e..cad267e 100644
--- a/payload_generator/boot_img_filesystem.cc
+++ b/payload_generator/boot_img_filesystem.cc
@@ -57,7 +57,7 @@
}
uint32_t header_version =
*reinterpret_cast<uint32_t*>(header_version_blob.data());
- if (header_version > 3) {
+ if (header_version > 4) {
LOG(WARNING) << "Boot image header version " << header_version
<< " isn't supported for parsing";
return nullptr;
@@ -80,13 +80,22 @@
result->kernel_size_ = hdr_v0->kernel_size;
result->ramdisk_size_ = hdr_v0->ramdisk_size;
result->page_size_ = hdr_v0->page_size;
- } else {
+ } else if (header_version == 3) {
auto hdr_v3 = reinterpret_cast<boot_img_hdr_v3*>(header_blob.data());
CHECK_EQ(0, memcmp(hdr_v3->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE));
CHECK_EQ(3u, hdr_v3->header_version);
result->kernel_size_ = hdr_v3->kernel_size;
result->ramdisk_size_ = hdr_v3->ramdisk_size;
result->page_size_ = 4096;
+ } else {
+ auto hdr_v4 = reinterpret_cast<boot_img_hdr_v4*>(header_blob.data());
+ CHECK_EQ(0, memcmp(hdr_v4->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE));
+ CHECK_EQ(hdr_v4->header_version, 4u);
+ result->kernel_size_ = hdr_v4->kernel_size;
+ result->ramdisk_size_ = hdr_v4->ramdisk_size;
+ // In boot image v3 and v4, page size is hard coded as 4096
+ result->page_size_ = 4096;
+ result->signature_size_ = hdr_v4->signature_size;
}
CHECK_GT(result->page_size_, 0u);
@@ -141,6 +150,10 @@
if (ramdisk_size_ > 0 && offset + ramdisk_size_ <= file_size) {
files->emplace_back(GetFile("<ramdisk>", offset, ramdisk_size_));
}
+ offset += utils::RoundUp(ramdisk_size_, page_size_);
+ if (signature_size_ > 0) {
+ files->emplace_back(GetFile("<boot signature>", offset, signature_size_));
+ }
return true;
}
diff --git a/payload_generator/boot_img_filesystem.h b/payload_generator/boot_img_filesystem.h
index 61f755c..7773461 100644
--- a/payload_generator/boot_img_filesystem.h
+++ b/payload_generator/boot_img_filesystem.h
@@ -52,9 +52,10 @@
// The boot.img file path.
std::string filename_;
- uint32_t kernel_size_; /* size in bytes */
- uint32_t ramdisk_size_; /* size in bytes */
- uint32_t page_size_; /* flash page size we assume */
+ uint32_t kernel_size_ = 0; /* size in bytes */
+ uint32_t ramdisk_size_ = 0; /* size in bytes */
+ uint32_t signature_size_ = 0; /* size in bytes */
+ uint32_t page_size_ = 4096; /* flash page size we assume */
DISALLOW_COPY_AND_ASSIGN(BootImgFilesystem);
};