[U-Boot] beagle-bone fdt booting problem

Hi,
I'm playing with fdt booting on beaglebone board. I'm using latest u-boot git HEAD (2c072c958bb544c72f0e848375803dbd6971f022) + I've added to am335x_evm confing : #ifndef CONFIG_SPL_BUILD #define CONFIG_OF_CONTROL #define CONFIG_OF_SEPARATE #endif
I took beaglebone devicetree from kernel. Then I took patch [1] to build image from u-boot and my compiled DT blob.
Booting this image always fails with: No valid FDT found - please append one to U-Boot binary, use u-boot-dtb.bin or define CONFIG_OF_EMBED. For sandbox, use -d <file.dtb> ** CONFIG_OF_CONTROL defined but no FDT - please see doc/README.fdt-control
I poke around this and find out that when CONFIG_OF_SEPARATE is used then fdt_blob is set to address of .__end pointer. When evaluate image with hexdump it seems that fdt blob (in my particular case and configuration) is shifted by 312 bytes from .__end. When I point gd->fdt_blob (hack in code) to that address it boots fine. Any ideas what I'm doing wrong (I must do something wrong as it seems nobody complains :)).
[1] - http://git.denx.de/?p=u-boot/u-boot-x86.git;a=commit;h=d4ab2022cdfe098e93819...
BR,
marek

Hi,
On 26 March 2014 00:10, Belisko Marek marek.belisko@gmail.com wrote:
Hi,
I'm playing with fdt booting on beaglebone board. I'm using latest u-boot git HEAD (2c072c958bb544c72f0e848375803dbd6971f022) + I've added to am335x_evm confing : #ifndef CONFIG_SPL_BUILD #define CONFIG_OF_CONTROL #define CONFIG_OF_SEPARATE #endif
I took beaglebone devicetree from kernel. Then I took patch [1] to build image from u-boot and my compiled DT blob.
Booting this image always fails with: No valid FDT found - please append one to U-Boot binary, use u-boot-dtb.bin or define CONFIG_OF_EMBED. For sandbox, use -d <file.dtb> ** CONFIG_OF_CONTROL defined but no FDT - please see doc/README.fdt-control
I poke around this and find out that when CONFIG_OF_SEPARATE is used then fdt_blob is set to address of .__end pointer. When evaluate image with hexdump it seems that fdt blob (in my particular case and configuration) is shifted by 312 bytes from .__end. When I point gd->fdt_blob (hack in code) to that address it boots fine. Any ideas what I'm doing wrong (I must do something wrong as it seems nobody complains :)).
[1] - http://git.denx.de/?p=u-boot/u-boot-x86.git;a=commit;h=d4ab2022cdfe098e93819...
You might be best taking this from the u-boot-x86.git branch 'bone'. It is a little old but it does work.
The patches for this were never applied unfortunately. I'll update them to mainline again at some point and resubmit.
Regards, Simon

Hello,
On Thu, Mar 27, 2014 at 4:28 PM, Simon Glass sjg@chromium.org wrote:
Hi,
On 26 March 2014 00:10, Belisko Marek marek.belisko@gmail.com wrote:
Hi,
I'm playing with fdt booting on beaglebone board. I'm using latest u-boot git HEAD (2c072c958bb544c72f0e848375803dbd6971f022) + I've added to am335x_evm confing : #ifndef CONFIG_SPL_BUILD #define CONFIG_OF_CONTROL #define CONFIG_OF_SEPARATE #endif
I took beaglebone devicetree from kernel. Then I took patch [1] to build image from u-boot and my compiled DT blob.
Booting this image always fails with: No valid FDT found - please append one to U-Boot binary, use u-boot-dtb.bin or define CONFIG_OF_EMBED. For sandbox, use -d <file.dtb> ** CONFIG_OF_CONTROL defined but no FDT - please see doc/README.fdt-control
I poke around this and find out that when CONFIG_OF_SEPARATE is used then fdt_blob is set to address of .__end pointer. When evaluate image with hexdump it seems that fdt blob (in my particular case and configuration) is shifted by 312 bytes from .__end. When I point gd->fdt_blob (hack in code) to that address it boots fine. Any ideas what I'm doing wrong (I must do something wrong as it seems nobody complains :)).
[1] - http://git.denx.de/?p=u-boot/u-boot-x86.git;a=commit;h=d4ab2022cdfe098e93819...
You might be best taking this from the u-boot-x86.git branch 'bone'. It is a little old but it does work.
It was based on that patches just [1] was reworked to fit latest u-boot (applied with errors):
diff --git a/Makefile b/Makefile index 538c3bf..0505678 100644 --- a/Makefile +++ b/Makefile @@ -752,8 +752,13 @@ u-boot-dtb.bin: u-boot.bin dts/dt.dtb FORCE quiet_cmd_copy = COPY $@ cmd_copy = cp $< $@
+ifneq ($(DEV_TREE_BIN),) +u-boot.dtb: + cp $(DEV_TREE_BIN) $@ +else u-boot.dtb: dts/dt.dtb $(call cmd,copy) +endif
OBJCOPYFLAGS_u-boot.hex := -O ihex
@@ -799,7 +804,7 @@ MKIMAGEFLAGS_u-boot.kwb = -n $(srctree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%) \ MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \ -R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage
-u-boot.img u-boot.kwb u-boot.pbl: u-boot.bin FORCE +u-boot.img u-boot.kwb u-boot.pbl: u-boot$(if $(CONFIG_OF_SEPARATE),-dtb,).bin FORCE $(call if_changed,mkimage)
u-boot.imx: u-boot.bin
The patches for this were never applied unfortunately. I'll update them to mainline again at some point and resubmit.
OK. Basically it was working I just hit 2 issues. One with odd skip 312 bytes and second that signature wasn't added to final image and verification was check only sha1 not rsa2048 ( I check when enable debug for some modules): Verifying Hash Integrity ... fit_image_verify_required_sigs: No signature node found: FDT_ERR_NOTFOUND I took some patches from next (which seems fixed signature issue) but it doesn't solve above problem.
Regards, Simon
BR,
marek

+Tom, Albert for this bug
Hi Belisko,
On 28 March 2014 03:40, Belisko Marek marek.belisko@gmail.com wrote:
Hello,
On Thu, Mar 27, 2014 at 4:28 PM, Simon Glass sjg@chromium.org wrote:
Hi,
On 26 March 2014 00:10, Belisko Marek marek.belisko@gmail.com wrote:
Hi,
I'm playing with fdt booting on beaglebone board. I'm using latest u-boot git HEAD (2c072c958bb544c72f0e848375803dbd6971f022) + I've added to am335x_evm confing : #ifndef CONFIG_SPL_BUILD #define CONFIG_OF_CONTROL #define CONFIG_OF_SEPARATE #endif
I took beaglebone devicetree from kernel. Then I took patch [1] to build image from u-boot and my compiled DT blob.
Booting this image always fails with: No valid FDT found - please append one to U-Boot binary, use u-boot-dtb.bin or define CONFIG_OF_EMBED. For sandbox, use -d <file.dtb> ** CONFIG_OF_CONTROL defined but no FDT - please see doc/README.fdt-control
I poke around this and find out that when CONFIG_OF_SEPARATE is used then fdt_blob is set to address of .__end pointer. When evaluate image with hexdump it seems that fdt blob (in my particular case and configuration) is shifted by 312 bytes from .__end. When I point gd->fdt_blob (hack in code) to that address it boots fine. Any ideas what I'm doing wrong (I must do something wrong as it seems nobody complains :)).
[1] -
http://git.denx.de/?p=u-boot/u-boot-x86.git;a=commit;h=d4ab2022cdfe098e93819...
You might be best taking this from the u-boot-x86.git branch 'bone'. It
is a
little old but it does work.
It was based on that patches just [1] was reworked to fit latest u-boot (applied with errors):
diff --git a/Makefile b/Makefile index 538c3bf..0505678 100644 --- a/Makefile +++ b/Makefile @@ -752,8 +752,13 @@ u-boot-dtb.bin: u-boot.bin dts/dt.dtb FORCE quiet_cmd_copy = COPY $@ cmd_copy = cp $< $@
+ifneq ($(DEV_TREE_BIN),) +u-boot.dtb:
cp $(DEV_TREE_BIN) $@
+else u-boot.dtb: dts/dt.dtb $(call cmd,copy) +endif
OBJCOPYFLAGS_u-boot.hex := -O ihex
@@ -799,7 +804,7 @@ MKIMAGEFLAGS_u-boot.kwb = -n $(srctree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%) \ MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \ -R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage
-u-boot.img u-boot.kwb u-boot.pbl: u-boot.bin FORCE +u-boot.img u-boot.kwb u-boot.pbl: u-boot$(if $(CONFIG_OF_SEPARATE),-dtb,).bin FORCE $(call if_changed,mkimage)
u-boot.imx: u-boot.bin
The patches for this were never applied unfortunately. I'll update them
to
mainline again at some point and resubmit.
OK. Basically it was working I just hit 2 issues. One with odd skip 312 bytes and second that signature wasn't added to final image and verification was check only sha1 not rsa2048 ( I check when enable debug for some modules): Verifying Hash Integrity ... fit_image_verify_required_sigs: No signature node found: FDT_ERR_NOTFOUND I took some patches from next (which seems fixed signature issue) but it doesn't solve above problem.
The 312 bytes issue turns out to be a problem with the hash section being appended after the supposed end of U-Boot. It was introduced in b02bfc4 and will go out in this release unless we fix it. I've got a patch which fixes it - will be doing some more testing and then submit along with a resubmit of the Beaglebone black verified boot patches.
Regards, Simon
participants (2)
-
Belisko Marek
-
Simon Glass