Booting the ELF kernel without ubldr on Raspberry Pi
Tim Kientzle
tim at kientzle.com
Thu Dec 24 06:39:11 UTC 2015
Actually, it would be more interesting to go a step further and boot the FreeBSD kernel directly from the firmware, bypassing both U-Boot and ubldr.
Warner did some work long ago to allow the FreeBSD kernel to boot from a Linux boot loader, which should make this possible. You might try looking at that code and seeing if you can get it to work.
Cheers,
Tim
> On Dec 21, 2015, at 7:48 PM, Sylvain Garrigues <sylgar at gmail.com> wrote:
>
> Hello,
>
> I’d like to boot FreeBSD directly with u-boot, without ubldr, using an image provided by the u-boot mkimage tool. The reason is simple: mkimage can deal with compressed kernels and will therefore speed my boot time. And I want to try it anyway, as it seems possible reading http://bsdcan.org/2008/schedule/attachments/49_2008_uboot_freebsd.pdf <http://bsdcan.org/2008/schedule/attachments/49_2008_uboot_freebsd.pdf> and various other
>
> Before going there and using an mkimage, I’d like to boot the kernel image just with the same bootelf version provided by the sysutils/u-boot-rpi2 port. It doesn’t display anything and crashes (I think I can see « illegal instruction » just before the board reboots). I don’t understand why, and this is my first question.
>
> Then I looked at the mkimage utility, although we can specify and freebsd kernel type through the -O flag, the bootm command only understands linux and NetBSD. I guess I should use linux there?
>
> Thanks for your help,
> Sylvain
>
>
> PS: FYI, below is:
>
> 1/ info about my kernel (I can see the entry point is at 0xc0100100), copied into the fat partition
>
> # readelf -h /root/crochet/work/obj/arm.armv6/root/crochet/src/sys/RPI2/kernel
> ELF Header:
> Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
> Class: ELF32
> Data: 2's complement, little endian
> Version: 1 (current)
> OS/ABI: UNIX - System V
> ABI Version: 0
> Type: EXEC (Executable file)
> Machine: ARM
> Version: 0x1
> Entry point address: 0xc0100100
> Start of program headers: 52 (bytes into file)
> Start of section headers: 6235080 (bytes into file)
> Flags: 0x5000202, has entry point, Version5 EABI, <unknown>
> Size of this header: 52 (bytes)
> Size of program headers: 32 (bytes)
> Number of program headers: 6
> Size of section headers: 40 (bytes)
> Number of section headers: 38
> Section header string table index: 35
> [root at clad /usr/ports/sysutils/u-boot-rpi2]#
>
> 2/ the interesting part of my include/configs/rpi-common.h from u-boot:
>
> #define CONFIG_EXTRA_ENV_SETTINGS \
> ENV_DEVICE_SETTINGS \
> "loadaddr=0x02000000\0" \
> "Fatboot=" \
> "env exists loaderdev || env set loaderdev ${fatdev}; " \
> "echo Booting from: ${fatdev} ${bootfile}; " \
> "fatload ${fatdev} ${loadaddr} ${bootfile} && bootelf ${loadaddr}; " \
> "\0" \
> "preboot=" \
> "fdt addr 0x100; " \
> "env set bootfile kernel; " \
> "env set fatdev 'mmc 0'; " \
> "\0"
> #undef CONFIG_BOOTCOMMAND
> #define CONFIG_BOOTCOMMAND "run Fatboot"
> #undef CONFIG_PREBOOT
> #define CONFIG_PREBOOT "run preboot"
> _______________________________________________
> freebsd-arm at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-arm
> To unsubscribe, send any mail to "freebsd-arm-unsubscribe at freebsd.org"
More information about the freebsd-arm
mailing list