90db6d9989
At present we require that setup.py is executed from the Makefile, which sets up various important things like the list of files to build and the version number. However many installation systems expect to be able to change to the directory containing setup.py and run it. This allows them to support (for example) building/installing for multiple Python versions, varying installation paths, particular C flags, etc. The problem in implementing this is that we don't want to duplicate the information in the Makefile. A common solution (so I am told) is to parse the Makefile to obtain the required information. Update the setup.py script to read a few Makefiles when it does not see the required information in its environment. This allows installation using: ./pylibfdt/setup.py install Signed-off-by: Simon Glass <sjg@chromium.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
82 lines
2.4 KiB
Text
82 lines
2.4 KiB
Text
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 <jdl@jdl.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 python-dev
|
|
|
|
The library provides an Fdt class which you can use like this:
|
|
|
|
$ PYTHONPATH=../pylibfdt python
|
|
>>> import libfdt
|
|
>>> fdt = libfdt.Fdt(open('test_tree1.dtb').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=%r' % (prop.name, prop.value)
|
|
compatible=bytearray(b'subnode1\x00')
|
|
>>> print '%s=%s' % (prop.name, prop.value)
|
|
compatible=subnode1
|
|
>>> node2 = fdt.path_offset('/')
|
|
>>> print fdt.getprop(node2, 'compatible')
|
|
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
|
|
$ python -c "import libfdt; help(libfdt)"
|
|
|
|
If you add new features, please check code coverage:
|
|
|
|
$ sudo apt-get install python-pip python-pytest
|
|
$ sudo pip install coverage
|
|
$ cd tests
|
|
$ coverage run pylibfdt_tests.py
|
|
$ coverage html
|
|
# Open 'htmlcov/index.html' in your browser
|
|
|
|
|
|
To install the library via the normal setup.py method, use:
|
|
|
|
./pylibfdt/setup.py [--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.
|
|
|
|
|
|
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
|