From e5c6a41ede58dd82baf713b1872fed98cd8b9ebb Mon Sep 17 00:00:00 2001 From: cfig Date: Mon, 5 Jun 2023 17:09:55 +0800 Subject: [PATCH] Issue #123: better support dtb/dts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ● support dumping /proc/device-tree from a running rooted Android ● support editing standalone dtb file --- README.md | 76 +++++++++++++--- .../main/kotlin/packable/DeviceTreeParser.kt | 83 ++++++++++++++++++ .../main/kotlin/packable/PackableLauncher.kt | 4 +- .../src/main/kotlin/packable/VBMetaParser.kt | 3 - integrationTest.py | 2 + src/integrationTest/resources_2 | 2 +- tools/bin/dtc-android | Bin 0 -> 74784 bytes 7 files changed, 152 insertions(+), 18 deletions(-) create mode 100644 bbootimg/src/main/kotlin/packable/DeviceTreeParser.kt create mode 100755 tools/bin/dtc-android diff --git a/README.md b/README.md index 57622e1..f000ffc 100644 --- a/README.md +++ b/README.md @@ -53,15 +53,16 @@ Well done you did it! The last step is to star this repo :smile ## Supported ROM image types -| Image Type | file names | platforms | note | -| --------------- | ----------------------------------- |-------------|-------------------------| -| boot | boot.img, init_boot.img, boot(-debug|-test-harness).img | all | | -|vendor boot | vendor_boot.img, vendor_boot-debug.img, vendor_kernel_boot.img | all | | -| recovery | recovery.img, recovery-two-step.img | all | | -| vbmeta | vbmeta.img, vbmeta_system.img etc. | all | | -| dtbo | dtbo.img | linux & mac | | -| sparse images | system.img, vendor.img, product.img etc.| linux | | -| OTA payload | payload.bin | all | Windows git-bash | +| Image Type | file names | platforms | note | +| --------------- |----------------------------------------------------------------|-------------|-------------------------| +| boot | boot.img, init_boot.img, boot-debug.img, boot-test-harness.img | all | | +|vendor boot | vendor_boot.img, vendor_boot-debug.img, vendor_kernel_boot.img | all | | +| recovery | recovery.img, recovery-two-step.img | all | | +| vbmeta | vbmeta.img, vbmeta_system.img etc. | all | | +| dtbo | dtbo.img | linux & mac | | +| dtb | *.dtb | linux & mac | | +| sparse images | system.img, vendor.img, product.img etc. | linux | | +| OTA payload | payload.bin | all | Windows git-bash | Please note that the boot.img MUST follows AOSP verified boot flow, either [Boot image signature](https://source.android.com/security/verifiedboot/verified-boot#signature_format) in VBoot 1.0 or [AVB HASH footer](https://android.googlesource.com/platform/external/avb/+/master/README.md#The-VBMeta-struct) (a.k.a. AVB) in VBoot 2.0. @@ -69,6 +70,7 @@ Please note that the boot.img MUST follows AOSP verified boot flow, either [Boot | Device Model | Manufacturer | Compatible | Android Version | Note | |--------------------------------|--------------|----------------------|--------------------------|------| +| Pixel 7 (panther) | Google | Y | 13 (TQ2A.230505.002)
2023)| | | ADT-3 (adt3) | Askey/Google | Y | 12 (spp2.210219.010) | amlogic inside,
Android TV | | Pixel 3 (blueline) | Google | Y | 12 (spp2.210219.008,
2021)| | | Pixel 3 (blueline) | Google | Y | 11 (RP1A.200720.009,
2020)| [more ...](doc/additional_tricks.md#pixel-3-blueline) | @@ -156,7 +158,7 @@ Please note that to use 'gradle flash', your host machine must be connectted to
- edit device-tree blob(dtb) inside vendor_boot.img + How to edit device tree blob(dtb) inside vendor_boot.img If you want to edit the device-tree blob in place: @@ -184,6 +186,55 @@ cp build/unzip_boot/dtb
+
+ + How to pull device tree blob(dtb) from a rooted device + +If you have a rooted device and want to pull /proc/device-tree +```bash +touch fake.dtb +./gradlew pull +``` +This tool will copy `dtc` to the target device via `adb`, and dump the dtb and dts file. Eventually you should get something like this +``` ++--------+------------------------------+ +| What | Where | ++--------+------------------------------+ +| source | /proc/device-tree | ++--------+------------------------------+ +| DTB | panther.dtb | ++--------+------------------------------+ +| DTS | build/unzip_boot/panther.dts | ++--------+------------------------------+ + +``` + +
+ +
+ + How to work edit device tree blob(dtb) file + +If you have a dtb file and want to edit its content +```bash +cp . +./gradlew unpack +``` +This tool will decompile it and put the decompiled source to build/unzip_boot. + +``` + Unpack Summary of panther.dtb ++------+------------------------------+ +| What | Where | ++------+------------------------------+ +| DTB | panther.dtb | ++------+------------------------------+ +| DTS | build/unzip_boot/panther.dts | ++------+------------------------------+ +``` + +
+
working with system.img @@ -255,11 +306,10 @@ https://android.googlesource.com/platform/system/core/+/refs/heads/master/libspa Android Nexus/Pixle factory images
https://developers.google.cn/android/images
-This project is developed with products by Jetbrains. +
+This project is developed with products by Jetbrains. drawing - - diff --git a/bbootimg/src/main/kotlin/packable/DeviceTreeParser.kt b/bbootimg/src/main/kotlin/packable/DeviceTreeParser.kt new file mode 100644 index 0000000..ebbd76c --- /dev/null +++ b/bbootimg/src/main/kotlin/packable/DeviceTreeParser.kt @@ -0,0 +1,83 @@ +package packable + +import cfig.bootimg.Common +import cfig.helper.Helper +import cfig.helper.Helper.Companion.check_call +import cfig.helper.Helper.Companion.check_output +import cfig.helper.Helper.Companion.deleteIfExists +import cfig.packable.IPackable +import cfig.utils.DTC +import org.slf4j.LoggerFactory +import java.io.File + +class DeviceTreeParser : IPackable { + override fun capabilities(): List { + return listOf("^.*\\.dtb$") + } + override val loopNo: Int + get() = 1 + + override fun unpack(fileName: String) { + super.clear() + log.info("unpacking $fileName") + val outFile = workDir + fileName.removeSuffix(".dtb") + "." + Helper.prop("config.dts_suffix") + DTC().decompile(fileName, outFile) + + //print summary + val prints: MutableList> = mutableListOf() + prints.add(Pair("DTB", fileName)) + prints.add(Pair("DTS", outFile)) + log.info("\n\t\t\tUnpack Summary of {}\n{}\n", fileName, Common.table2String(prints)) + } + + override fun pack(fileName: String) { + log.info("packing $fileName") + val outFile = workDir + fileName.removeSuffix(".dtb") + "." + Helper.prop("config.dts_suffix") + check(DTC().compile(outFile, "$fileName.new")) { "fail to compile dts" } + + //print summary + val prints: MutableList> = mutableListOf() + prints.add(Pair("DTS", outFile)) + prints.add(Pair("updated DTB", "$fileName.new")) + log.info("\n\t\t\tPack Summary of {}\n{}\n", fileName, Common.table2String(prints)) + } + + override fun pull(fileName: String, deviceName: String) { + //prepare + super.clear() + File(workDir).mkdir() + + //pull + "adb root".check_call() + "adb push tools/bin/dtc-android /data/vendor/dtc-android".check_call() + val hw = "adb shell getprop ro.hardware".check_output() + log.info("ro.hardware=$hw") + "adb shell /data/vendor/dtc-android -I fs /proc/device-tree -o /data/vendor/file.to.pull".check_call() + "adb pull /data/vendor/file.to.pull $workDir$hw.dts".check_call() + "adb shell /data/vendor/dtc-android -I fs -O dtb /proc/device-tree -o /data/vendor/file.to.pull".check_call() + "adb pull /data/vendor/file.to.pull $hw.dtb".check_call() + "adb shell rm /data/vendor/file.to.pull".check_call() + "adb shell rm /data/vendor/dtc-android".check_call() + if (fileName != "$hw.dtb") { + File(fileName).delete() + log.warn("deleting intermediate dtb file: $fileName") + } + + //print summary + val prints: MutableList> = mutableListOf() + prints.add(Pair("source", "/proc/device-tree")) + prints.add(Pair("DTB", "$hw.dtb")) + prints.add(Pair("DTS", "$workDir$hw.dts")) + log.info("\n\t\t\tPull Summary of {}\n{}\n", "$hw.dtb", Common.table2String(prints)) + } + + fun clear(fileName: String) { + super.clear() + listOf(".new").forEach { + "$fileName$it".deleteIfExists() + } + } + + private val log = LoggerFactory.getLogger(DeviceTreeParser::class.java) + private val workDir = Helper.prop("workDir") +} \ No newline at end of file diff --git a/bbootimg/src/main/kotlin/packable/PackableLauncher.kt b/bbootimg/src/main/kotlin/packable/PackableLauncher.kt index 8df350b..a143868 100644 --- a/bbootimg/src/main/kotlin/packable/PackableLauncher.kt +++ b/bbootimg/src/main/kotlin/packable/PackableLauncher.kt @@ -16,6 +16,7 @@ package cfig.packable import cfig.utils.SparseImgParser import org.slf4j.LoggerFactory +import packable.DeviceTreeParser import java.io.File import java.util.regex.Pattern import kotlin.reflect.KClass @@ -30,7 +31,8 @@ fun main(args: Array) { val packablePool = mutableMapOf, KClass>() listOf( DtboParser(), VBMetaParser(), BootImgParser(), SparseImgParser(), VendorBootParser(), PayloadBinParser(), - MiscImgParser() + MiscImgParser(), + DeviceTreeParser() ).forEach { @Suppress("UNCHECKED_CAST") packablePool.put(it.capabilities(), it::class as KClass) diff --git a/bbootimg/src/main/kotlin/packable/VBMetaParser.kt b/bbootimg/src/main/kotlin/packable/VBMetaParser.kt index 51c69e4..1d1b84a 100644 --- a/bbootimg/src/main/kotlin/packable/VBMetaParser.kt +++ b/bbootimg/src/main/kotlin/packable/VBMetaParser.kt @@ -15,13 +15,10 @@ package cfig.packable import avb.AVBInfo -import avb.alg.Algorithms import cfig.Avb -import cfig.helper.CryptoHelper import cfig.helper.Dumpling import cfig.helper.Helper import cfig.helper.Helper.Companion.deleteIfExists -import com.fasterxml.jackson.core.type.TypeReference import com.fasterxml.jackson.databind.ObjectMapper import org.slf4j.LoggerFactory import java.io.File diff --git a/integrationTest.py b/integrationTest.py index c877230..ce1a081 100755 --- a/integrationTest.py +++ b/integrationTest.py @@ -180,6 +180,8 @@ def main(): verifySingleDir(resDir2, "issue_117_xz_crc") # Issue 122: ramdisk.img, boot image v0 verifySingleDir(resDir2, "issue_122_ramdisk_img") + # Issue 123: dtb + verifySingleDir(resDir2, "issue_123_dtb") log.info(successLogo) diff --git a/src/integrationTest/resources_2 b/src/integrationTest/resources_2 index 5fdce9c..517ca7a 160000 --- a/src/integrationTest/resources_2 +++ b/src/integrationTest/resources_2 @@ -1 +1 @@ -Subproject commit 5fdce9cd65d5b286f8c15fffe3ae142b64e0013a +Subproject commit 517ca7a72425c6b8b913feea0b505f07879549c9 diff --git a/tools/bin/dtc-android b/tools/bin/dtc-android new file mode 100755 index 0000000000000000000000000000000000000000..575c6a23ef60f2f122f5a2f4ad71b6448dfa8ed2 GIT binary patch literal 74784 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