"No valid device tree blob found" error
Luiz Otavio O Souza
lists.br at gmail.com
Tue Feb 18 18:52:07 UTC 2014
On 17 February 2014 14:53, Ian Lepore wrote:
> On Mon, 2014-02-17 at 10:08 -0300, Luiz Otavio O Souza wrote:
>> On 16 February 2014 18:30, Glen Barber wrote:
>> > Images for RPI-B and BEAGLEBONE (and I suspect PANDABOARD) are failing
>> > to boot this week.
>> >
>> > The images are built against r261948. Console messages during boot:
>> >
>> > ## Starting application at 0x88000054 ...
>> > Consoles: U-Boot console
>> > Compatible API signature found @9f242240
>> > MMC Device 2 not found
>> > MMC Device 3 not found
>> > Number of U-Boot devices: 2
>> >
>> > FreeBSD/armv6 U-Boot loader, Revision 1.2
>> > (root at grind.freebsd.org, Sun Feb 16 18:10:43 UTC 2014)
>> > DRAM: 512MB
>> >
>> > Device: disk
>> > Loading /boot/defaults/loader.conf
>> > /boot/kernel/kernel data=0x460bc8+0x2c7438
>> > syms=[0x4+0x85a60+0x4+0x50c89]
>> >
>> > Hit [Enter] to boot immediately, or any other key for command prompt.
>> > Booting [/boot/kernel/kernel]...
>> > Using DTB provided by U-Boot.
>> > No valid device tree blob found!WARNING! Trying to fire up the kernel,
>> > but no device tree blob found!
>> >
>> > Any ideas if this is error on my part, or a problem in head/ ? The
>> > stable/10/ images boot fine, so I do not suspect any code changes in the
>> > build process.
>> >
>>
>>
>> Glen,
>>
>> I think it is related to r261819. Looking at the code it looks like
>> the attached patch may fix it (i'm still updating my images to the
>> latest -head and would probably need a few hours before i can test it
>> myself).
>>
>> Can you check if it works for you ?
>>
>> Thanks,
>>
>> Luiz
>
> I believe your patch is correct; when I copied the code to do the header
> check it came from a context where the header variable was the struct
> itself, not a pointer to it. Odd that the error message doesn't seem to
> match, though.
>
> -- Ian
The patch does indeed fix the issue.
The error message has two different usage cases, when called from the
fdt_copy() the output of command_errbuf/command_errmsg isn't
displayed. An error from fdt_copy() is printed instead. When called
from fdt_fixup() the error message was being overwritten.
The attached patch fix all these issues.
Now, when called from fdt_copy() i've added a missing '\n' at end of
the error message:
Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [/boot/kernel/kernel]...
Using DTB provided by U-Boot.
No valid device tree blob found!
WARNING! Trying to fire up the kernel, but no device tree blob found!
And from fdt_fixup() now it doesn't overwrite the error from
fdt_load_dtb[_addr]() anymore:
Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [/boot/kernel/kernel] in 9 seconds...
Type '?' for a list of commands, 'help' for more detailed help.
loader> fdt ls
Using DTB provided by U-Boot.
error validating blob: FDT_ERR_BADMAGIC
loader>
Does the attached patch looks fine ?
Luiz
-------------- next part --------------
Index: sys/boot/fdt/fdt_loader_cmd.c
===================================================================
--- sys/boot/fdt/fdt_loader_cmd.c (revision 262183)
+++ sys/boot/fdt/fdt_loader_cmd.c (working copy)
@@ -230,7 +230,7 @@
int err;
fdtp_size = fdt_totalsize(header);
- err = fdt_check_header(&header);
+ err = fdt_check_header(header);
if (err < 0) {
sprintf(command_errbuf, "error validating blob: %s",
fdt_strerror(err));
@@ -667,7 +667,7 @@
{
const char *env;
char *ethstr;
- int chosen, err, eth_no, len;
+ int chosen, eth_no, len;
struct sys_info *si;
env = NULL;
@@ -675,13 +675,8 @@
ethstr = NULL;
len = 0;
- if (fdtp == NULL) {
- err = fdt_setup_fdtp();
- if (err) {
- sprintf(command_errbuf, "No valid device tree blob found!");
- return (0);
- }
- }
+ if (fdtp == NULL && fdt_setup_fdtp() != 0)
+ return (0);
/* Create /chosen node (if not exists) */
if ((chosen = fdt_subnode_offset(fdtp, 0, "chosen")) ==
@@ -747,7 +742,7 @@
if (fdtp == NULL) {
err = fdt_setup_fdtp();
if (err) {
- printf("No valid device tree blob found!");
+ printf("No valid device tree blob found!\n");
return (0);
}
}
More information about the freebsd-arm
mailing list