pmb.parse.bootimg: implement detection of QCDT types (MR 2276)

Implement a function to verify the type of QCDT image by comparing the
first four bytes of the file. This is represented in a deviceinfo
variable, used by boot-deploy for dt.img generation.
This commit is contained in:
methanal 2024-03-16 04:34:24 +00:00 committed by Oliver Smith
parent 75dcab4405
commit 259e6fba59
No known key found for this signature in database
GPG Key ID: 5AE7F5513E0885CB
1 changed files with 24 additions and 0 deletions

View File

@ -44,6 +44,27 @@ def get_mtk_label(path):
return label
def get_qcdt_type(path):
""" Get the dt.img type by reading the first four bytes of the file.
:param path: to the qcdt image extracted from boot.img
:returns: * None: dt.img is of unknown type
* Type string (e.g. "qcom", "sprd", "exynos") """
if not os.path.exists(path):
return None
with open(path, 'rb') as f:
fourcc = f.read(4)
if fourcc == b'QCDT':
return "qcom"
elif fourcc == b'SPRD':
return "sprd"
elif fourcc == b'DTBH':
return "exynos"
else:
return None
def bootimg(args, path):
if not os.path.exists(path):
raise RuntimeError("Could not find file '" + path + "'")
@ -129,6 +150,9 @@ def bootimg(args, path):
output["qcdt"] = ("true" if os.path.isfile(f"{bootimg_path}-dt") and
os.path.getsize(f"{bootimg_path}-dt") > 0 else "false")
if get_qcdt_type(f"{bootimg_path}-dt") is not None:
output["qcdt_type"] = get_qcdt_type(f"{bootimg_path}-dt")
output["dtb_second"] = ("true" if is_dtb(f"{bootimg_path}-second")
else "false")