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