Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Mar 2016 06:25:09 +0100
From:      Bernd Walter <ticso@cicely7.cicely.de>
To:        Sylvain Garrigues <sylgar@gmail.com>
Cc:        freebsd-arm <freebsd-arm@freebsd.org>
Subject:   Re: Booting kernel.bin directly on Raspberry Pi / external DTB support
Message-ID:  <20160325052509.GE48704@cicely7.cicely.de>
In-Reply-To: <1CCA59DC-5539-4CFB-81BA-0112E2120B3B@gmail.com>
References:  <1CCA59DC-5539-4CFB-81BA-0112E2120B3B@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Mar 24, 2016 at 04:29:26PM +0100, Sylvain Garrigues wrote:
> 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.

I don't know if it is part of ubldr, or if there is any additional code,
which runs before ubldr, but the Pis won't boot with the ARM CPU.
Somewhere in the boot path is GPU bootcode, which then enables the ARM
CPU.
You also need low level HW init, such as setting up the clocks and RAM,
which is not done in the Kernel.

-- 
B.Walter <bernd@bwct.de> http://www.bwct.de
Modbus/TCP Ethernet I/O Baugruppen, ARM basierte FreeBSD Rechner uvm.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20160325052509.GE48704>