101 lines
2.7 KiB
Markdown
101 lines
2.7 KiB
Markdown
|
# Device Tree Compiler and libfdt
|
||
|
|
||
|
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>`](mailto:david@gibson.dropbear.id.au)
|
||
|
|
||
|
## Python library
|
||
|
|
||
|
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.
|
||
|
|
||
|
## Mailing lists
|
||
|
|
||
|
* The [devicetree-compiler](mailto:devicetree-compiler@vger.kernel.org)
|
||
|
list is for discussion about dtc and libfdt implementation.
|
||
|
* Core device tree bindings are discussed on the
|
||
|
[devicetree-spec](mailto:devicetree-spec@vger.kernel.org) list.
|
||
|
|