|
|
|
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:
|
|
|
|
|
|
|
|
David Gibson <david@gibson.dropbear.id.au>
|
|
|
|
Jon Loeliger <loeliger@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
Python library
|
|
|
|
--------------
|
|
|
|
|
|
|
|
A Python library 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
|
|
|
|
|
|
|
|
|
|
|
|
To install the library via the normal setup.py method, use:
|
|
|
|
|
|
|
|
./pylibfdt/setup.py install [--prefix=/path/to/install_dir]
|
|
|
|
|
|
|
|
If --prefix is not provided, the default prefix is used, typically '/usr'
|
|
|
|
or '/usr/local'. See Python's distutils documentation for details. You can
|
|
|
|
also install via the Makefile if you like, but the above is more common.
|
|
|
|
|
|
|
|
To install both libfdt and pylibfdt you can use:
|
|
|
|
|
|
|
|
make install [SETUP_PREFIX=/path/to/install_dir] \
|
|
|
|
[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.
|
|
|
|
|
|
|
|
|
|
|
|
Tests
|
|
|
|
-----
|
|
|
|
|
|
|
|
Test files are kept in the tests/ directory. Use 'make check' to build and run
|
|
|
|
all tests.
|
|
|
|
|
|
|
|
If you want to adjust a test file, be aware that tree_tree1.dts is compiled
|
|
|
|
and checked against a binary tree from assembler macros in trees.S. So
|
|
|
|
if you change that file you must change tree.S also.
|
|
|
|
|
|
|
|
|
|
|
|
Mailing list
|
|
|
|
------------
|
|
|
|
The following list is for discussion about dtc and libfdt implementation
|
|
|
|
mailto:devicetree-compiler@vger.kernel.org
|
|
|
|
|
|
|
|
Core device tree bindings are discussed on the devicetree-spec list:
|
|
|
|
mailto:devicetree-spec@vger.kernel.org
|