Issue #138: support customized dtc binary path

pull/159/head
cfig 1 year ago
parent 95ed740426
commit 859300e3b9
No known key found for this signature in database
GPG Key ID: B104C307F0FDABB7

@ -234,7 +234,7 @@ class Common {
//using mkbootfs //using mkbootfs
fun packRootfs(rootDir: String, ramdiskGz: String, osMajor: Int = 10) { fun packRootfs(rootDir: String, ramdiskGz: String, osMajor: Int = 10) {
val mkbootfs = String.format(Locale.getDefault(), Helper.prop("mkbootfsBin"), osMajor) val mkbootfs = String.format(Locale.getDefault(), Helper.prop("mkbootfsBin")!!, osMajor)
log.info("Packing rootfs $rootDir ...") log.info("Packing rootfs $rootDir ...")
val outputStream = ByteArrayOutputStream() val outputStream = ByteArrayOutputStream()
DefaultExecutor().let { exec -> DefaultExecutor().let { exec ->

@ -80,14 +80,14 @@ class Signer {
val bootSigner = Helper.prop("bootSigner") val bootSigner = Helper.prop("bootSigner")
log.info("Signing with verified-boot 1.0 style") log.info("Signing with verified-boot 1.0 style")
val sig = Common.VeritySignature( val sig = Common.VeritySignature(
verity_pk8 = Helper.prop("verity_pk8"), verity_pk8 = Helper.prop("verity_pk8")!!,
verity_pem = Helper.prop("verity_pem"), verity_pem = Helper.prop("verity_pem")!!,
jarPath = Helper.prop("bootSigner") jarPath = Helper.prop("bootSigner")!!
) )
val bootSignCmd = "java -jar $bootSigner " + val bootSignCmd = "java -jar $bootSigner " +
"${sig.path} $src " + "${sig.path} $src " +
"${sig.verity_pk8} ${sig.verity_pem} " + "${sig.verity_pk8} ${sig.verity_pem} " +
"$tgt" tgt
log.info(bootSignCmd) log.info(bootSignCmd)
DefaultExecutor().execute(CommandLine.parse(bootSignCmd)) DefaultExecutor().execute(CommandLine.parse(bootSignCmd))
} }

@ -118,7 +118,7 @@ data class BootV2(
theInfo.osPatchLevel = bh2.osPatchLevel theInfo.osPatchLevel = bh2.osPatchLevel
if (Avb.hasAvbFooter(fileName)) { if (Avb.hasAvbFooter(fileName)) {
theInfo.verify = "VB2.0" theInfo.verify = "VB2.0"
if (Avb.verifyAVBIntegrity(fileName, String.format(Helper.prop("avbtool"), "v1.2"))) { if (Avb.verifyAVBIntegrity(fileName, String.format(Helper.prop("avbtool")!!, "v1.2"))) {
theInfo.verify += " PASS" theInfo.verify += " PASS"
} else { } else {
theInfo.verify += " FAIL" theInfo.verify += " FAIL"
@ -597,7 +597,7 @@ data class BootV2(
fun sign(): BootV2 { fun sign(): BootV2 {
//unify with v1.1/v1.2 avbtool //unify with v1.1/v1.2 avbtool
val avbtool = String.format(Helper.prop("avbtool"), "v1.2") val avbtool = String.format(Helper.prop("avbtool")!!, "v1.2")
if (info.verify.startsWith("VB2.0")) { if (info.verify.startsWith("VB2.0")) {
Signer.signAVB(info.output, this.info.imageSize, avbtool) Signer.signAVB(info.output, this.info.imageSize, avbtool)
log.info("Adding hash_footer with verified-boot 2.0 style") log.info("Adding hash_footer with verified-boot 2.0 style")

@ -105,7 +105,7 @@ data class BootV2Dialects(
theInfo.osPatchLevel = bh2.osPatchLevel theInfo.osPatchLevel = bh2.osPatchLevel
if (Avb.hasAvbFooter(fileName)) { if (Avb.hasAvbFooter(fileName)) {
theInfo.verify = "VB2.0" theInfo.verify = "VB2.0"
if (Avb.verifyAVBIntegrity(fileName, String.format(Helper.prop("avbtool"), "v1.2"))) { if (Avb.verifyAVBIntegrity(fileName, String.format(Helper.prop("avbtool")!!, "v1.2"))) {
theInfo.verify += " PASS" theInfo.verify += " PASS"
} else { } else {
theInfo.verify += " FAIL" theInfo.verify += " FAIL"
@ -528,7 +528,7 @@ data class BootV2Dialects(
fun sign(): BootV2Dialects { fun sign(): BootV2Dialects {
//unify with v1.1/v1.2 avbtool //unify with v1.1/v1.2 avbtool
val avbtool = String.format(Helper.prop("avbtool"), "v1.2") val avbtool = String.format(Helper.prop("avbtool")!!, "v1.2")
if (info.verify.startsWith("VB2.0")) { if (info.verify.startsWith("VB2.0")) {
Signer.signAVB(info.output, this.info.imageSize, avbtool) Signer.signAVB(info.output, this.info.imageSize, avbtool)
log.info("Adding hash_footer with verified-boot 2.0 style") log.info("Adding hash_footer with verified-boot 2.0 style")

@ -204,7 +204,7 @@ data class BootV3(
fun sign(fileName: String): BootV3 { fun sign(fileName: String): BootV3 {
if (File(Avb.getJsonFileName(info.output)).exists()) { if (File(Avb.getJsonFileName(info.output)).exists()) {
Signer.signAVB(fileName, this.info.imageSize, String.format(Helper.prop("avbtool"), "v1.2")) Signer.signAVB(fileName, this.info.imageSize, String.format(Helper.prop("avbtool")!!, "v1.2"))
} else { } else {
log.warn("no AVB info found, assume it's clear image") log.warn("no AVB info found, assume it's clear image")
} }
@ -475,7 +475,7 @@ data class BootV3(
val alg = Algorithms.get(origSig.header!!.algorithm_type)!! val alg = Algorithms.get(origSig.header!!.algorithm_type)!!
ret.addArgument("--gki_signing_algorithm").addArgument(alg.name) ret.addArgument("--gki_signing_algorithm").addArgument(alg.name)
ret.addArgument("--gki_signing_key").addArgument(alg.defaultKey) ret.addArgument("--gki_signing_key").addArgument(alg.defaultKey)
ret.addArgument("--gki_signing_avbtool_path").addArgument(String.format(Helper.prop("avbtool"), "v1.2")) ret.addArgument("--gki_signing_avbtool_path").addArgument(String.format(Helper.prop("avbtool")!!, "v1.2"))
} }
ret.addArgument(" --id ") ret.addArgument(" --id ")
ret.addArgument(" --output ") ret.addArgument(" --output ")

@ -316,7 +316,7 @@ data class VendorBoot(
} }
fun sign(): VendorBoot { fun sign(): VendorBoot {
val avbtool = String.format(Helper.prop("avbtool"), "v1.2") val avbtool = String.format(Helper.prop("avbtool")!!, "v1.2")
File(Avb.getJsonFileName(info.output)).let { File(Avb.getJsonFileName(info.output)).let {
if (it.exists()) { if (it.exists()) {
Signer.signAVB(info.output, this.info.imageSize, avbtool) Signer.signAVB(info.output, this.info.imageSize, avbtool)

@ -29,7 +29,7 @@ import kotlin.io.path.deleteIfExists
interface IPackable { interface IPackable {
val loopNo: Int val loopNo: Int
val outDir: String val outDir: String
get() = Helper.prop("workDir") get() = Helper.prop("workDir")!!
fun capabilities(): List<String> { fun capabilities(): List<String> {
return listOf("^dtbo\\.img$") return listOf("^dtbo\\.img$")

@ -80,6 +80,6 @@ class OTAzipParser : IPackable {
companion object { companion object {
private val log = LoggerFactory.getLogger(OTAzipParser::class.java) private val log = LoggerFactory.getLogger(OTAzipParser::class.java)
private val workDir = Helper.prop("workDir") private val workDir = Helper.prop("workDir")!!
} }
} }

@ -27,6 +27,7 @@ import java.io.InputStream
class DTC { class DTC {
private val log = LoggerFactory.getLogger(DTC::class.java) private val log = LoggerFactory.getLogger(DTC::class.java)
private val dtcBin = Helper.prop("dtcBin") ?: "dtc"
data class DtbEntry( data class DtbEntry(
var seqNo: Int = 0, var seqNo: Int = 0,
@ -84,7 +85,7 @@ class DTC {
//dtb-> dts //dtb-> dts
DefaultExecutor().let { DefaultExecutor().let {
try { try {
val cmd = CommandLine.parse("dtc -q -I dtb -O dts").apply { val cmd = CommandLine.parse("$dtcBin -q -I dtb -O dts").apply {
addArguments(dtbFile) addArguments(dtbFile)
addArguments("-o $outFile") addArguments("-o $outFile")
} }
@ -98,7 +99,7 @@ class DTC {
//dts -> yaml //dts -> yaml
DefaultExecutor().let { DefaultExecutor().let {
try { try {
val cmd = CommandLine.parse("dtc -q -I dts -O yaml").apply { val cmd = CommandLine.parse("$dtcBin -q -I dts -O yaml").apply {
addArguments(outFile) addArguments(outFile)
addArguments("-o $outFile.yaml") addArguments("-o $outFile.yaml")
} }
@ -114,7 +115,7 @@ class DTC {
fun compile(dtsFile: String, outFile: String): Boolean { fun compile(dtsFile: String, outFile: String): Boolean {
log.info("compiling DTS: $dtsFile") log.info("compiling DTS: $dtsFile")
val cmd = CommandLine.parse("dtc -q -I dts -O dtb").let { val cmd = CommandLine.parse("$dtcBin -q -I dts -O dtb").let {
it.addArguments(dtsFile) it.addArguments(dtsFile)
it.addArguments("-o $outFile") it.addArguments("-o $outFile")
} }

@ -241,7 +241,7 @@ class Dtbo(
} }
fun sign(): Dtbo { fun sign(): Dtbo {
val avbtool = String.format(Helper.prop("avbtool"), "v1.2") val avbtool = String.format(Helper.prop("avbtool")!!, "v1.2")
Signer.signAVB(info.output, info.imageSize.toLong(), avbtool) Signer.signAVB(info.output, info.imageSize.toLong(), avbtool)
return this return this
} }

@ -14,7 +14,7 @@ open class BaseGenerator(
var keyPath: String = "" var keyPath: String = ""
var algorithm: String = "" var algorithm: String = ""
var salt: String = "" var salt: String = ""
val avbtool = String.format(Helper.prop("avbtool"), "v1.2") val avbtool = String.format(Helper.prop("avbtool")!!, "v1.2")
var signingArgs = "--hash_algorithm sha256 " + var signingArgs = "--hash_algorithm sha256 " +
"--prop com.android.build.the_partition_name.os_version:14 " + "--prop com.android.build.the_partition_name.os_version:14 " +
"--prop com.android.build.the_partition_name.fingerprint:anonymous/device/device:14/UD1A.230803.041/buildid:userdebug/test-keys" "--prop com.android.build.the_partition_name.fingerprint:anonymous/device/device:14/UD1A.230803.041/buildid:userdebug/test-keys"

@ -139,7 +139,7 @@ data class SparseImage(var info: SparseInfo = SparseInfo()) {
companion object { companion object {
private val SPARSE_MAGIC: UInt = 0x3aff26edu private val SPARSE_MAGIC: UInt = 0x3aff26edu
private val log = LoggerFactory.getLogger(SparseImage::class.java) private val log = LoggerFactory.getLogger(SparseImage::class.java)
private val workDir = Helper.prop("workDir") private val workDir = Helper.prop("workDir")!!
private val simg2imgBin = "simg2img" private val simg2imgBin = "simg2img"
private val img2simgBin = "img2simg" private val img2simgBin = "img2simg"

@ -32,8 +32,8 @@ class KernelExtractor {
fun run(fileName: String, workDir: File? = null): List<String> { fun run(fileName: String, workDir: File? = null): List<String> {
val ret: MutableList<String> = mutableListOf() val ret: MutableList<String> = mutableListOf()
val kernelVersionFile = Helper.prop("kernelVersionFile") val kernelVersionFile = Helper.prop("kernelVersionFile")!!
val kernelConfigFile = Helper.prop("kernelConfigFile") val kernelConfigFile = Helper.prop("kernelConfigFile")!!
val cmdPrefix = if (EnvironmentVerifier().isWindows) "python " else "" val cmdPrefix = if (EnvironmentVerifier().isWindows) "python " else ""
val cmd = CommandLine.parse(cmdPrefix + Helper.prop("kernelExtracter")).let { val cmd = CommandLine.parse(cmdPrefix + Helper.prop("kernelExtracter")).let {
it.addArgument("--input") it.addArgument("--input")

@ -12,3 +12,4 @@ dtboMaker = aosp/system/libufdt/utils/src/mkdtboimg.py
payloadDir = build/payload/ payloadDir = build/payload/
config.allow_cpio_duplicate = true config.allow_cpio_duplicate = true
config.dts_suffix = dts config.dts_suffix = dts
dtcBin = dtc

@ -43,7 +43,7 @@ class Helper {
load(Helper::class.java.classLoader.getResourceAsStream("general.cfg")) load(Helper::class.java.classLoader.getResourceAsStream("general.cfg"))
} }
fun prop(k: String): String { fun prop(k: String): String? {
return gcfg.getProperty(k) return gcfg.getProperty(k)
} }

Loading…
Cancel
Save