From 437043d9f3cdcadb9b9898a25a9216323066e250 Mon Sep 17 00:00:00 2001 From: Adrian Freihofer Date: Tue, 3 Jun 2025 10:23:12 +0200 Subject: devicetree: minor improvements - Do not use the ${} bitbake syntax for shell internal variables - Fix shellcheck SC2045 warning: Iterating over ls output is fragile. Use globs. - Improve error handling for dtc. Print the output, not only the exit value. (From OE-Core rev: f33ee0cfb3c664c4857c18271dd55981bc369cc1) Signed-off-by: Adrian Freihofer Signed-off-by: Richard Purdie --- meta/classes-recipe/devicetree.bbclass | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/meta/classes-recipe/devicetree.bbclass b/meta/classes-recipe/devicetree.bbclass index 1806cb62cb..2a2ac93e9b 100644 --- a/meta/classes-recipe/devicetree.bbclass +++ b/meta/classes-recipe/devicetree.bbclass @@ -109,7 +109,11 @@ def devicetree_compile(dtspath, includes, d): ppargs.append("-I{0}".format(i)) ppargs += ["-o", "{0}.pp".format(dts), dtspath] bb.note("Running {0}".format(" ".join(ppargs))) - subprocess.run(ppargs, check = True) + try: + subprocess.run(ppargs, check=True, capture_output=True) + except subprocess.CalledProcessError as e: + bb.fatal(f"Command '{' '.join(ppargs)}' failed with return code {e.returncode}\nstdout: {e.stdout.decode()}\nstderr: {e.stderr.decode()}\ndtspath: {os.path.abspath(dtspath)}") + # determine if the file is an overlay or not (using the preprocessed file) isoverlay = devicetree_source_is_overlay("{0}.pp".format(dts)) @@ -125,7 +129,11 @@ def devicetree_compile(dtspath, includes, d): dtcargs += ["-o", "{0}.{1}".format(dtname, "dtbo" if isoverlay else "dtb")] dtcargs += ["-I", "dts", "-O", "dtb", "{0}.pp".format(dts)] bb.note("Running {0}".format(" ".join(dtcargs))) - subprocess.run(dtcargs, check = True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + try: + subprocess.run(dtcargs, check=True, capture_output=True) + except subprocess.CalledProcessError as e: + bb.fatal(f"Command '{' '.join(dtcargs)}' failed with return code {e.returncode}\nstdout: {e.stdout.decode()}\nstderr: {e.stderr.decode()}\ndtname: {dtname}") + python devicetree_do_compile() { import re @@ -144,14 +152,16 @@ python devicetree_do_compile() { } devicetree_do_install() { - for DTB_FILE in `ls *.dtb *.dtbo`; do - install -Dm 0644 ${B}/${DTB_FILE} ${D}/boot/devicetree/${DTB_FILE} + for dtb_file in *.dtb *.dtbo; do + [ -e "$dtb_file" ] || continue + install -Dm 0644 "${B}/$dtb_file" "${D}/boot/devicetree/$dtb_file" done } devicetree_do_deploy() { - for DTB_FILE in `ls *.dtb *.dtbo`; do - install -Dm 0644 ${B}/${DTB_FILE} ${DEPLOYDIR}/devicetree/${DTB_FILE} + for dtb_file in *.dtb *.dtbo; do + [ -e "$dtb_file" ] || continue + install -Dm 0644 "${B}/$dtb_file" "${DEPLOYDIR}/devicetree/$dtb_file" done } addtask deploy before do_build after do_install -- cgit v1.2.3-54-g00ecf