Booting the ELF kernel without ubldr on Raspberry Pi
Sylvain Garrigues
sylgar at gmail.com
Tue Dec 22 03:48:59 UTC 2015
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"
More information about the freebsd-arm
mailing list