DSX has some support for flattened device trees. DSX can convert: * a given flattened device tree to a soclib caba platform, * a given soclib caba platform to a flattened device tree. As all the needed data is '''not''' present in the components metadata, these conversions involve custom translator code. Therefore, support for translation is limited to known modules, i.e. modules having an associated ''handler''. = From a platform to a device tree = For a given platform, we may extract the corresponding device tree as seen for a given mapping table (a device tree can represent only one address-space): Import converter and built-in handlers: {{{ from dsx.contrib.dts_platform.platform_to_dts import PlatformToDts import dsx.contrib.dts_platform.platform_handlers }}} Convert the platform, for a given mapping table: {{{ dtsgen = PlatformToDts(arch, mapping_table) }}} Then we can retrieve the device tree {{{ device_tree = dtsgen.create_device_tree() }}} This device tree itself can be serialized to different formats. There are drivers for this task == Device tree serialization as ascii source (`dts`) == Import the driver {{{ from dsx.device_tree.dts import Driver }}} Call it for the device tree: {{{ driver = Driver( outdir = '.', parent = None, output_file = "my_platform.dts", ) device_tree.generate(driver) }}} == Device tree serialization as device tree blob (`dtb`) == Import the driver {{{ from dsx.device_tree.dtb import Driver }}} Call it for the device tree: {{{ driver = Driver( outdir = '.', parent = None, output_file = "my_platform.dtb", ) device_tree.generate(driver) }}} = From a device tree to a platform = Likewise, you may convert a device tree source or blob to a platform. The architecture generated will be flat around a VGMN. == Programmatically == import modules {{{ from dsx.contrib.dts_platform.dts_to_platform import DtsToPlatform import dsx.contrib.dts_platform.handlers from soclib.platform import PfDriver }}} Parse a dts and retrieve corresponding platform {{{ pgen = DtsToPlatform("test_3.dts", binary = 'kernel-soclib-mips.out') pf = pgen.create_caba_platform() }}} Generate the simulator, as usual: {{{ pf.generate(PfDriver("hard")) }}} == With a command-line one-liner == This tool can even create a netlist with GDB or memchecker-enabled platforms {{{ $ python -m dsx.contrib.dts_platform.converter -h Usage: converter.py [-o output_dir] [-b binary] file.dts Options: -h, --help show this help message and exit -o OUTPUT_DIR Output directory -b BINARY Binary kernel to load --gdb Whether to use GDB server --memchecker Whether to use Memchecker }}} For instance: {{{ $ python -m dsx.contrib.dts_platform.converter -o platform -b kernel.out --gdb my_platform.dts }}}