12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #
- # 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)
|