VanDahlen
VanDahlen

Reputation: 103

Raspberry 3: booting a Kernel by using U-Boot

I am playing around with a Raspberry 3 and try to boot a Linux Kernel by using U-Boot.

I've built a Linux Kernel (from github.com/raspberrypi), and Busbox-Userland. This Kernel boots and works just fine, when booting 'directly' (that means without U-Boot).

Now I've built U-Boot (Mainline, denx.de/u-boot.git), which also seems to work.

It boots and is accessible (both by HDMI/USB and [after adding pi3-disable-bt-Overlay]).

But now I am stuck; the Kernel won't start from within U-Boot.

I tried the following commands:

setenv fdtfile bcm2710-rpi-3-b.dtb

mmc dev 0
fatload mmc 0:1 ${kernel_addr_r} kernel7.img
fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}
setenv bootargs earlyprintk console=tty0 console=ttyAMA0 root=/dev/mmcblk0p2 rootfstype=ext2 rootwait noinitrd
bootz ${kernel_addr_r} - ${fdt_addr_r}

U-Boot's output is then:

[...]
reading kernel7.img
[...]
Kernel image @ 0x1000000 [ 0x000000 - 0x40e630 ]
## Flattened Device Tree blob at 0x000100
   Booting using fdt blob at 0x000100
   Using Device Tree in place at 0000100, end 00006b1a

Starting kernel...

And then the Monitor turns black and shows "no signal", also the serial console doesn't show any more information.

I've played around with the bootargs that are provided to the Kernel, but I didn't find a working scenario.

Does anybody have an idea?

As I said, both the U-Boot and the Kernel seem to work, but U-Boot can't boot the Kernel...

Thanks, VanDahlen

Upvotes: 3

Views: 2466

Answers (2)

Daniel P.
Daniel P.

Reputation: 840

I know this is a very old question but for me it helped to not manually load the device tree file and use ${fdt_addr} instead of ${fdt_addr_r} in bootz. So...

mmc dev 0
fatload mmc 0:1 ${kernel_addr_r} kernel7.img
setenv bootargs earlyprintk console=tty0 console=ttyAMA0 root=/dev/mmcblk0p2 rootfstype=ext2 rootwait noinitrd
bootz ${kernel_addr_r} - ${fdt_addr}

...should work.

Upvotes: 1

Rachit Tayal
Rachit Tayal

Reputation: 1292

Have you tried loading the kernel at a different address? i.e. at $loadaddr instead of $kernel_addr_r. Make sure kernel is getting loaded at the right address.

Upvotes: 0

Related Questions