DTC 1.8.0
Changes since v1.7.2 include:
* dtc
- Add informative error for stray identifiers (e.g. unexpanded macros)
- Better decompiling of plugins
- Restore labels from __symbols__ node when possible
- Restore phandle references from __local_fixups__ and __fixups__
when possible
- Improve type guessing when compiling to dts format
- Add only new data to fixup nodes instead of complete regeneration
* libfdt
- Add fdt_setprop_namelen() and fdt_setprop_namelen_string()
- Add fdt_get_property_namelen_w()
- Add fdt_find_string_len_()
- Introduce fdt_downgrade_version()
- Verify alignment of sub-blocks in dtb
- Handle FDT_NOP tags before FDT_END in fdt_check_full()
- Document most remaining functions in libfdt.h
- Standardise "returns:" annotation in documentation
* checks
- Warn about missing #address-cells for interrupt parents
- Relax avoid_unnecessary_addr_size to allow child ranges properties
- Fix detection of 'i2c-bus' child node
- Remove check for graph child addresses (redundant with schema validation)
- Do not check overlays for alias paths
* fdtdump
- Remove overly strict dtb version check
* pylibfdt
- Fix backwards compatibility of return values with SWIG v4.3
- Port python bindings to build natively via meson and meson-python
* Build
- Deprecate Makefile in favor of Meson
- Support building libfdt without static library
- Don't build test programs by default
- Fix -Dtools=false build
- Add FreeBSD and non-GNU linker compatibility
* CI
- Add macOS build to GitHub Actions
- Add Cirrus CI for FreeBSD testing
- Add GitLab CI for Linux builds
- Update GitHub Actions ubuntu runner to 24.04
- Skip swig install for mingw32 Windows build
* Tests
- Add compatibility with uutils (Rust coreutils)
- Mark .so from asm output as non-executable stack (glibc-2.41 compat)
* General
- Consider drive letters when checking absolute paths on Windows
- Add AI contribution guidelines
- Assorted bugfixes and cleanups
- Add clang-format config
- Add SBOM file in CycloneDX format
Bump version to v1.8.0 Prepare for a new release. Assisted-by: Claude:claude-opus-4-6 Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
The source tree contains the Device Tree Compiler (dtc) toolchain for working with device tree source and binary files and also libfdt, a utility library for reading and manipulating the binary format.
dtc and libfdt are maintained by:
A Python library wrapping libfdt is also available. To build this you will need to install swig and Python development files. On Debian distributions:
$ sudo apt-get install swig python3-dev
The library provides an Fdt class which you can use like this:
$ PYTHONPATH=../pylibfdt python3
>>> import libfdt
>>> fdt = libfdt.Fdt(open('test_tree1.dtb', mode='rb').read())
>>> node = fdt.path_offset('/subnode@1')
>>> print(node)
124
>>> prop_offset = fdt.first_property_offset(node)
>>> prop = fdt.get_property_by_offset(prop_offset)
>>> print('%s=%s' % (prop.name, prop.as_str()))
compatible=subnode1
>>> node2 = fdt.path_offset('/')
>>> print(fdt.getprop(node2, 'compatible').as_str())
test_tree1
You will find tests in tests/pylibfdt_tests.py showing how to use each method. Help is available using the Python help command, e.g.:
$ cd pylibfdt $ python3 -c "import libfdt; help(libfdt)"
If you add new features, please check code coverage:
$ sudo apt-get install python3-coverage $ cd tests # It's just 'coverage' on most other distributions $ python3-coverage run pylibfdt_tests.py $ python3-coverage html # Open 'htmlcov/index.html' in your browser
The library can be installed with pip from a local source tree:
$ pip install . [--user|--prefix=/path/to/install_dir]
Or directly from a remote git repo:
$ pip install git+git://git.kernel.org/pub/scm/utils/dtc/dtc.git@main
The install depends on libfdt shared library being installed on the host system first. Generally, using --user or --prefix is not necessary and pip will use the default location for the Python installation which varies if the user is root or not.
You can also install everything via make if you like, but pip is recommended.
To install both libfdt and pylibfdt you can use:
$ make install [PREFIX=/path/to/install_dir]
To disable building the python library, even if swig and Python are available, use:
$ make NO_PYTHON=1
More work remains to support all of libfdt, including access to numeric values.