From ad2de6e477cad1da7f5c930f4b0f0945fd67a0cd Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Tue, 24 Jun 2025 10:38:18 +0800 Subject: [TOOLS] Add DTC (Devicetree Compiler) tools Signed-off-by: GuEe-GUI <2991707448@qq.com> --- tools/dtc.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tools/dtc.py (limited to 'tools') diff --git a/tools/dtc.py b/tools/dtc.py new file mode 100644 index 0000000000..67d7d04f61 --- /dev/null +++ b/tools/dtc.py @@ -0,0 +1,52 @@ +# +# Copyright (c) 2006-2023, RT-Thread Development Team +# +# SPDX-License-Identifier: Apache-2.0 +# +# Change Logs: +# Date Author Notes +# 2023-05-10 GuEe-GUI the first version +# + +import os, re + +from building import * + +__dtc_install_tip = """ +You should install dtc (devicetree compiler) in your system: + Linux: + Debian/Ubuntu: apt-get install device-tree-compiler + Arch/Manjaro: pacman -Sy dtc + + MacOS: + brew install dtc + + Windows (MinGW): + msys2: pacman -S dtc +""" + +def __check_dtc(value): + if value != 0 and os.system("dtc -v") != 0: + print(__dtc_install_tip) + +def dts_to_dtb(RTT_ROOT, dts_list, options = "", include_paths = [], ignore_warning = []): + path = GetCurrentDir() + '/' + warning_ops = "" + for warning in ignore_warning: + warning_ops += " -W no-" + warning + for dts in dts_list: + dtb = dts.replace('.dts', '.dtb') + if not os.path.exists(path + dtb) or os.path.getmtime(path + dtb) < os.path.getmtime(path + dts): + tmp_dts = dts + '.tmp' + Preprocessing(dts, None, output = tmp_dts, CPPPATH=[RTT_ROOT + '/components/drivers/include'] + include_paths) + ret = os.system("dtc -I dts -O dtb -@ -A {} {} {} -o {}".format(warning_ops, options, path + tmp_dts, path + dtb)) + __check_dtc(ret) + if os.path.exists(path + tmp_dts): + os.remove(path + tmp_dts) + +def dtb_to_dts(RTT_ROOT, dtb_name, dts_name = None, options = ""): + path = GetCurrentDir() + '/' + if dts_name == None: + dts_name = re.sub(r'\.dtb[o]*$', '.dts', dtb_name) + ret = os.system("dtc -I dtb -O dts {} {} -o {}".format(options, path + dtb_name, path + dts_name)) + __check_dtc(ret) -- cgit v1.3.1