Thread (4 messages) 4 messages, 4 authors, 2008-11-10

Re: dtc: Add python source code output

From: Jimi Xenidis <hidden>
Date: 2008-11-10 17:00:49
Also in: linux-devicetree

On Nov 10, 2008, at 10:11 AM, Milton Miller wrote:
On 2008-11-07 at 02:31:40, David Gibson wrote:
quoted
On Thu, Nov 06, 2008 at 06:55:44PM +1100, Michael Ellerman wrote:
quoted
This commit adds an output format, which produces python
code. When run, the python produces a data structure that
can then be inspected in order to do various things.
...
quoted
quoted
I'm not sure if this is generally useful (or sane) but it was for  
me so
I thought I'd post it.
Hrm, well the idea of langauge source output seems reasonable.  But
the actual data structure emitted, and the method of construction in
Python both seem a bit odd to me.
quoted
I have a dts that I want to use to configure a simulator, and this
seemed like the nicest way to get there. dtc spits out the  
pythonised
device tree, and then I have a 10 line python script that does the
configuring.
[snip]
quoted
These branches also result in the value having different Python types
depending on the context.  That's not necessarily a bad thing, but
since which Python type is chosen depends on a heuristic only, it
certainly needs some care.  You certainly need to be certain that you
can always deduce the exact, byte-for-byte correct version of the
property value from whatever you put into the Python data structure.
quoted
+
+out:
+     fprintf(f, "    n.properties.append(p)\n");
So, emitting Python procedural code to build up the data structure,
rather than a great big Python literal that the Python parser will
just turn into the right thing seems a bit of a roundabout way of
doing this.
I would think so too.   I haven't looked at the output, only at  
Davids comments.  If the data structure is ambiguous, then I do  
think more thought is needed.
There is value in the DTC (optionally) emitting a python library and  
then having the DTC result use it.
It would allow for python to easily, at runtime, be able to modify the  
contents and not have to inline-edit, emit, compile a DTS.

BTW: it would also be nice if the python library to dump the dts (or  
even dtb)

Have you considered just parsing the flat tree binary?   Either  
creating a python binding to libfdt or even just parsing the dtb  
directly?

I have written perl code to parse a dtb and query it for nodes and  
properties, it wasn't too bad.  I need to look at a bug report by  
another user and comment it, then I should seek the okays post it.   
It is currently read-only and iterative callback based (like the  
kernels early-scan-flat-tree stuff), but I have planned creating a  
tree for querying, editing, and re-flattening.  Perl strings are  
counted length binary blobs, so property contents are interpreted  
with pack and unpack.  The library has been used to search a dtb to  
build a list of cpu instances and memory blocks, and it has been  
used to query the properties of a known node in the tree.

milton

_______________________________________________
devicetree-discuss mailing list
devicetree-discuss@ozlabs.org
https://ozlabs.org/mailman/listinfo/devicetree-discuss
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help