Booting kernel.bin directly on Raspberry Pi / external DTB support

Sylvain Garrigues sylgar at gmail.com
Thu Mar 24 15:29:51 UTC 2016


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.


More information about the freebsd-arm mailing list