
Timur Tabi wrote:
Jerry Van Baren wrote:
The bad version error is because you are running a version 16 blob and you need a version 17 blob to allow modifications.
Why? U-Boot was able to modify v16 blobs, why can't libfdt do the same?
Hi Timur,
It had very limited capabilities: it "modified" the blob by creating a new blob, copying the old stuff to the new blob, and then adding the "chosen" node. For some values, it rewrote values in place but was unable to create new properties or nodes. Switching to libfdt and insisting on having a v17 blob (with spare space) totally removes those limitations.
libfdt allows modifying the blob in place, but only if it is v17. I've taken advantage of this. libfdt actually has four sets of capabilities: 1) Read-only 2) Write sequentially (effectively what was done previously) 3) Write in place (modifying pre-existing values - also previous) 4) Full featured write (requires v17 and available space)
I've implemented write/modifies using the full write capabilities because it is the simplest for implementing the fdt command and most flexible by far (doing a write modifies the value or creates it if it doesn't exist).
An improvment to the "set" command would be to do a write in place if the full featured write failed (i.e. not a v17 blob or no space left). Patches are welcome. ;-)
Best regards, gvb