xref: /aosp_15_r20/external/dtc/README.md (revision cd60bc56d4bea3af4ec04523e4d71c2b272c8aff)
1*cd60bc56SAndroid Build Coastguard Worker# Device Tree Compiler and libfdt
2*cd60bc56SAndroid Build Coastguard Worker
3*cd60bc56SAndroid Build Coastguard WorkerThe source tree contains the Device Tree Compiler (dtc) toolchain for
4*cd60bc56SAndroid Build Coastguard Workerworking with device tree source and binary files and also libfdt, a
5*cd60bc56SAndroid Build Coastguard Workerutility library for reading and manipulating the binary format.
6*cd60bc56SAndroid Build Coastguard Worker
7*cd60bc56SAndroid Build Coastguard Workerdtc and libfdt are maintained by:
8*cd60bc56SAndroid Build Coastguard Worker
9*cd60bc56SAndroid Build Coastguard Worker* [David Gibson `<[email protected]>`](mailto:[email protected])
10*cd60bc56SAndroid Build Coastguard Worker
11*cd60bc56SAndroid Build Coastguard Worker## Python library
12*cd60bc56SAndroid Build Coastguard Worker
13*cd60bc56SAndroid Build Coastguard WorkerA Python library wrapping libfdt is also available. To build this you
14*cd60bc56SAndroid Build Coastguard Workerwill need to install `swig` and Python development files. On Debian
15*cd60bc56SAndroid Build Coastguard Workerdistributions:
16*cd60bc56SAndroid Build Coastguard Worker
17*cd60bc56SAndroid Build Coastguard Worker```
18*cd60bc56SAndroid Build Coastguard Worker$ sudo apt-get install swig python3-dev
19*cd60bc56SAndroid Build Coastguard Worker```
20*cd60bc56SAndroid Build Coastguard Worker
21*cd60bc56SAndroid Build Coastguard WorkerThe library provides an `Fdt` class which you can use like this:
22*cd60bc56SAndroid Build Coastguard Worker
23*cd60bc56SAndroid Build Coastguard Worker```
24*cd60bc56SAndroid Build Coastguard Worker$ PYTHONPATH=../pylibfdt python3
25*cd60bc56SAndroid Build Coastguard Worker>>> import libfdt
26*cd60bc56SAndroid Build Coastguard Worker>>> fdt = libfdt.Fdt(open('test_tree1.dtb', mode='rb').read())
27*cd60bc56SAndroid Build Coastguard Worker>>> node = fdt.path_offset('/subnode@1')
28*cd60bc56SAndroid Build Coastguard Worker>>> print(node)
29*cd60bc56SAndroid Build Coastguard Worker124
30*cd60bc56SAndroid Build Coastguard Worker>>> prop_offset = fdt.first_property_offset(node)
31*cd60bc56SAndroid Build Coastguard Worker>>> prop = fdt.get_property_by_offset(prop_offset)
32*cd60bc56SAndroid Build Coastguard Worker>>> print('%s=%s' % (prop.name, prop.as_str()))
33*cd60bc56SAndroid Build Coastguard Workercompatible=subnode1
34*cd60bc56SAndroid Build Coastguard Worker>>> node2 = fdt.path_offset('/')
35*cd60bc56SAndroid Build Coastguard Worker>>> print(fdt.getprop(node2, 'compatible').as_str())
36*cd60bc56SAndroid Build Coastguard Workertest_tree1
37*cd60bc56SAndroid Build Coastguard Worker```
38*cd60bc56SAndroid Build Coastguard Worker
39*cd60bc56SAndroid Build Coastguard WorkerYou will find tests in `tests/pylibfdt_tests.py` showing how to use each
40*cd60bc56SAndroid Build Coastguard Workermethod. Help is available using the Python help command, e.g.:
41*cd60bc56SAndroid Build Coastguard Worker
42*cd60bc56SAndroid Build Coastguard Worker```
43*cd60bc56SAndroid Build Coastguard Worker$ cd pylibfdt
44*cd60bc56SAndroid Build Coastguard Worker$ python3 -c "import libfdt; help(libfdt)"
45*cd60bc56SAndroid Build Coastguard Worker```
46*cd60bc56SAndroid Build Coastguard Worker
47*cd60bc56SAndroid Build Coastguard WorkerIf you add new features, please check code coverage:
48*cd60bc56SAndroid Build Coastguard Worker
49*cd60bc56SAndroid Build Coastguard Worker```
50*cd60bc56SAndroid Build Coastguard Worker$ sudo apt-get install python3-coverage
51*cd60bc56SAndroid Build Coastguard Worker$ cd tests
52*cd60bc56SAndroid Build Coastguard Worker# It's just 'coverage' on most other distributions
53*cd60bc56SAndroid Build Coastguard Worker$ python3-coverage run pylibfdt_tests.py
54*cd60bc56SAndroid Build Coastguard Worker$ python3-coverage html
55*cd60bc56SAndroid Build Coastguard Worker# Open 'htmlcov/index.html' in your browser
56*cd60bc56SAndroid Build Coastguard Worker```
57*cd60bc56SAndroid Build Coastguard Worker
58*cd60bc56SAndroid Build Coastguard WorkerThe library can be installed with pip from a local source tree:
59*cd60bc56SAndroid Build Coastguard Worker
60*cd60bc56SAndroid Build Coastguard Worker```
61*cd60bc56SAndroid Build Coastguard Worker$ pip install . [--user|--prefix=/path/to/install_dir]
62*cd60bc56SAndroid Build Coastguard Worker```
63*cd60bc56SAndroid Build Coastguard Worker
64*cd60bc56SAndroid Build Coastguard WorkerOr directly from a remote git repo:
65*cd60bc56SAndroid Build Coastguard Worker
66*cd60bc56SAndroid Build Coastguard Worker```
67*cd60bc56SAndroid Build Coastguard Worker$ pip install git+git://git.kernel.org/pub/scm/utils/dtc/dtc.git@main
68*cd60bc56SAndroid Build Coastguard Worker```
69*cd60bc56SAndroid Build Coastguard Worker
70*cd60bc56SAndroid Build Coastguard WorkerThe install depends on libfdt shared library being installed on the
71*cd60bc56SAndroid Build Coastguard Workerhost system first. Generally, using `--user` or `--prefix` is not
72*cd60bc56SAndroid Build Coastguard Workernecessary and pip will use the default location for the Python
73*cd60bc56SAndroid Build Coastguard Workerinstallation which varies if the user is root or not.
74*cd60bc56SAndroid Build Coastguard Worker
75*cd60bc56SAndroid Build Coastguard WorkerYou can also install everything via make if you like, but pip is
76*cd60bc56SAndroid Build Coastguard Workerrecommended.
77*cd60bc56SAndroid Build Coastguard Worker
78*cd60bc56SAndroid Build Coastguard WorkerTo install both libfdt and pylibfdt you can use:
79*cd60bc56SAndroid Build Coastguard Worker
80*cd60bc56SAndroid Build Coastguard Worker```
81*cd60bc56SAndroid Build Coastguard Worker$ make install [PREFIX=/path/to/install_dir]
82*cd60bc56SAndroid Build Coastguard Worker```
83*cd60bc56SAndroid Build Coastguard Worker
84*cd60bc56SAndroid Build Coastguard WorkerTo disable building the python library, even if swig and Python are available,
85*cd60bc56SAndroid Build Coastguard Workeruse:
86*cd60bc56SAndroid Build Coastguard Worker
87*cd60bc56SAndroid Build Coastguard Worker```
88*cd60bc56SAndroid Build Coastguard Worker$ make NO_PYTHON=1
89*cd60bc56SAndroid Build Coastguard Worker```
90*cd60bc56SAndroid Build Coastguard Worker
91*cd60bc56SAndroid Build Coastguard WorkerMore work remains to support all of libfdt, including access to numeric
92*cd60bc56SAndroid Build Coastguard Workervalues.
93*cd60bc56SAndroid Build Coastguard Worker
94*cd60bc56SAndroid Build Coastguard Worker## Mailing lists
95*cd60bc56SAndroid Build Coastguard Worker
96*cd60bc56SAndroid Build Coastguard Worker* The [devicetree-compiler](mailto:[email protected])
97*cd60bc56SAndroid Build Coastguard Worker  list is for discussion about dtc and libfdt implementation.
98*cd60bc56SAndroid Build Coastguard Worker* Core device tree bindings are discussed on the
99*cd60bc56SAndroid Build Coastguard Worker  [devicetree-spec](mailto:[email protected]) list.
100*cd60bc56SAndroid Build Coastguard Worker
101