[U-Boot-Users] libfdt problem when loading device tree
Jerry Van Baren
gerald.vanbaren at ge.com
Thu Dec 13 19:59:49 CET 2007
Kumar Gala wrote:
> On Dec 13, 2007, at 10:24 AM, Joakim Tjernlund wrote:
>> I get this when I try to boot my board:
>> ## Booting image at 00200000 ...
>> Image Name: oskernel02a:p1a:99
>> Created: 2007-12-13 9:59:43 UTC
>> Image Type: PowerPC Linux Kernel Image (gzip compressed)
>> Data Size: 1238992 Bytes = 1.2 MB
>> Load Address: 00000000
>> Entry Point: 00000000
>> Verifying Checksum ... OK
>> Uncompressing Kernel Image ... OK
>> Loading Device Tree to 007fe000, end 007ff6f9 ... OK
>> WARNING: could not create /bd_t FDT_ERR_NOSPACE.
>> fdt_bd_t: FDT_ERR_NOSPACE
>> ERROR: /bd_t node create failed - must RESET the board to recover.
>> Resetting the board.
>> I have tried different combinations of -S and -R options to dtc,
>> but nothing helps:
>> dtc -S 2000 -R 2000 -f of-tmcu.dts -O asm > of-tmcu.S
>> If I remove the chosen node from my dts file, I get the error when
>> libfdt tries to create a chosen node.
>> I am using dtc 1.0.0 and u-boot 1.3.1
> How big is the .dtb if you don't specify -S? The -R should only be
> something like 8.
> - k
More trivia for Jocke:
Note that there now also is a "-s nnnn" option (IIRC and if you have the
latest dtc) which *adds* nnnn bytes to the blob rather than making the
blob a fixed size nnnn (IIRC, Kumar created it). Depending on your
circumstances and preferences, this could be a better choice than -S.
Having the /chosen node already in the blob has severe limitations.
Improving that is in my "todo" list: "...a suggestion by Scott Wood to
make the /chosen handling finer grained: if the /chosen node exists,
currently u-boot-fdt bails out. A better methodology is to not overwrite
pre-existing properties on a per-property basis, so if /chosen exists
but a necessary /chosen/property doesn't, it gets created."
IOW, if you create a blob with /chosen, you must have *everything*
necessary in it because it won't be fixed up at runtime.
Tip: if you do "fdt chosen" and then "fdt print /chosen", it will tell
you exactly what your board fixup code put in the /chosen node.
FWIIW, I created a patch to implement Scott's suggestion, but it needs
to be resurrected, rebased, and tested.
More information about the U-Boot