Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Mar 2016 16:29:26 +0100
From:      Sylvain Garrigues <sylgar@gmail.com>
To:        freebsd-arm <freebsd-arm@freebsd.org>
Subject:   Booting kernel.bin directly on Raspberry Pi / external DTB support 
Message-ID:  <1CCA59DC-5539-4CFB-81BA-0112E2120B3B@gmail.com>

index | next in thread | raw e-mail

Hello,

I have written a small (ugly) patch to be able to boot a kernel directly without the ubldr loader while still using an external DTB (Linux-style booting may pass the DTB location pointer in the r2 register).
The patch is here: https://reviews.freebsd.org/differential/diff/14577/ 

I tested my patch successfully with the QEMU emulator with the -dtb option available in recent versions, using a VERSATILEPB kernel without FDT_STATIC.
# qemu-system-arm -M versatilepb -m 128M -kernel versatile.flash -cpu arm1176 -dtb versatilepb.dtb
FYI, once the kernel is built, here is the script to build the versatile.flash (adapted from gonzo, no longer need to clear the r0-r3 registers): https://reviews.freebsd.org/P92 <https://reviews.freebsd.org/P92>;

I also tested successfully my patch on my Raspberry Pi 2 using U-BOOT and the RPI2 kernel with my patch applied (and the LINUX_BOOT_ABI option):
u-boot> fatload mmc 0 0x200000 kernel.bin
u-boot> go 0x200000

That works.

So now I thought I could even bypass u-boot and launch kernel.bin directly from the Pi firmware… But it doesn’t work, I don’t understand why, and that is why I am writing here.
Here is the config.txt which I thought would work:

kernel=kernel.bin (instead of u-boot.bin)
kernel_address=0x200000 (line added because a FreeBSD kernel needs to be loaded on a 1MB or 2MB boundary)
device_tree=rpi2.dtb
device_tree_address=0x100
disable_commandline_tags=1

What am I missing? Is it even possible to boot kernel.bin directly on the Pi (with my patch)? I found this static minimalist loader from Andrew here: https://github.com/freebsd/freebsd/commit/074d37d46c3f9b282cd2d849d997b1b39acd710c <https://github.com/freebsd/freebsd/commit/074d37d46c3f9b282cd2d849d997b1b39acd710c>; - does it mean such a loader is necessary before the kernel?

Thanks,
Sylvain

PS: I know the « official and supported » way of booting FreeBSD on the Pi is the u-boot + ubldr combination. I just would like to finish this experiment and understand why kernel.bin cannot be booted directly.

home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1CCA59DC-5539-4CFB-81BA-0112E2120B3B>