From ec6f4780a6ec463d04e30636e5bff9f939a5cf0f Mon Sep 17 00:00:00 2001 From: cfig Date: Fri, 2 Jun 2023 15:43:49 +0800 Subject: [PATCH] Issue #122: support ramdisk.img(boot image v0) without kernel --- bbootimg/src/main/kotlin/bootimg/v2/BootV2.kt | 28 +++++++++++++++---- .../src/main/kotlin/packable/BootImgParser.kt | 3 +- integrationTest.py | 2 ++ src/integrationTest/resources_2 | 2 +- 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/bbootimg/src/main/kotlin/bootimg/v2/BootV2.kt b/bbootimg/src/main/kotlin/bootimg/v2/BootV2.kt index 5885e4c..a2e0c5b 100644 --- a/bbootimg/src/main/kotlin/bootimg/v2/BootV2.kt +++ b/bbootimg/src/main/kotlin/bootimg/v2/BootV2.kt @@ -200,7 +200,15 @@ data class BootV2( //info mapper.writerWithDefaultPrettyPrinter().writeValue(File(workDir + info.json), this) //kernel - Common.dumpKernel(Helper.Slice(info.output, kernel.position.toInt(), kernel.size, kernel.file!!)) + if (kernel.size > 0) { + Common.dumpKernel(Helper.Slice(info.output, kernel.position.toInt(), kernel.size, kernel.file!!)) + } else { + kernel.file = null + log.warn("found boot image without kernel: ${this.info.output}") + check(info.output == "ramdisk.img") { + "This should not happen, please add comments at: https://github.com/cfig/Android_boot_image_editor/issues/122" + } + } //ramdisk if (this.ramdisk.size > 0) { val fmt = C.dumpRamdisk( @@ -287,7 +295,11 @@ data class BootV2( } //kernel it.addRule() - it.addRow("kernel", this.kernel.file) + if (this.kernel.size > 0) { + it.addRow("kernel", this.kernel.file) + } else { //only for ramdisk.img, Issue #122 + it.addRow("kernel", "NONE") + } prints.add(Pair("kernel", this.kernel.file.toString())) File(Helper.prop("kernelVersionFile")).let { kernelVersionFile -> if (kernelVersionFile.exists()) { @@ -399,7 +411,7 @@ data class BootV2( fun pack(): BootV2 { //refresh kernel size - this.kernel.size = File(this.kernel.file!!).length().toInt() + this.kernel.size = if (this.kernel.file != null) File(this.kernel.file!!).length().toInt() else 0 //refresh ramdisk size if (this.ramdisk.file.isNullOrBlank()) { ramdisk.file = null @@ -468,7 +480,9 @@ data class BootV2( val bytesV2 = ByteBuffer.allocate(maxOf(1024 * 1024 * 64, info.imageSize.toInt())) .let { bf -> bf.order(ByteOrder.LITTLE_ENDIAN) - Common.writePaddedFile(bf, kernel.file!!, info.pageSize) + if (kernel.size > 0) { + Common.writePaddedFile(bf, kernel.file!!, info.pageSize) + } if (ramdisk.size > 0) { Common.writePaddedFile(bf, ramdisk.file!!, info.pageSize) } @@ -506,8 +520,10 @@ data class BootV2( ret.addArgument(info.headerVersion.toString()) ret.addArgument(" --base ") ret.addArgument("0x" + java.lang.Long.toHexString(0)) - ret.addArgument(" --kernel ") - ret.addArgument(kernel.file!!) + if (kernel.size > 0) { + ret.addArgument(" --kernel ") + ret.addArgument(kernel.file!!) + } ret.addArgument(" --kernel_offset ") ret.addArgument("0x" + Integer.toHexString(kernel.loadOffset.toInt())) if (this.ramdisk.size > 0) { diff --git a/bbootimg/src/main/kotlin/packable/BootImgParser.kt b/bbootimg/src/main/kotlin/packable/BootImgParser.kt index 293f278..1733b42 100644 --- a/bbootimg/src/main/kotlin/packable/BootImgParser.kt +++ b/bbootimg/src/main/kotlin/packable/BootImgParser.kt @@ -32,7 +32,8 @@ class BootImgParser : IPackable { get() = 0 override fun capabilities(): List { - return listOf("^boot(-debug)?\\.img$", "^recovery\\.img$", "^recovery-two-step\\.img$", "^init_boot\\.img$") + //ramdisk.img : Issue #122 + return listOf("^boot(-debug)?\\.img$", "^recovery\\.img$", "^recovery-two-step\\.img$", "^init_boot\\.img$", "^ramdisk\\.img$") } override fun unpack(fileName: String) { diff --git a/integrationTest.py b/integrationTest.py index ea5dbb8..c877230 100755 --- a/integrationTest.py +++ b/integrationTest.py @@ -178,6 +178,8 @@ def main(): verifySingleDir(resDir2, "issue_109_vendor_boot_no_dtb") # Issue 117: xz crc32/crc64 verifySingleDir(resDir2, "issue_117_xz_crc") + # Issue 122: ramdisk.img, boot image v0 + verifySingleDir(resDir2, "issue_122_ramdisk_img") log.info(successLogo) diff --git a/src/integrationTest/resources_2 b/src/integrationTest/resources_2 index bf9b8b9..5fdce9c 160000 --- a/src/integrationTest/resources_2 +++ b/src/integrationTest/resources_2 @@ -1 +1 @@ -Subproject commit bf9b8b996723536fcc19768185d87272f5363f76 +Subproject commit 5fdce9cd65d5b286f8c15fffe3ae142b64e0013a