How to boot FreeBSD as a domU using u-boot.bin as a kernel bootloader on my ARM Chromebook

Mario Marietto marietto2008 at gmail.com
Tue Dec 19 17:15:51 CET 2023


Hello.

I'm trying to boot FreeBSD for arm32 bit as DomU on my ARM Chromebook.
Basically there are two ways to accomplish this task :

1) to write a patch that allows the FreeBSD kernel to boot as a zImage
file. This could be accomplished applying this patch to a specific file
that's on the source code of FreeBSD :


https://xenbits.xen.org/gitweb/?p=p...8;hb=0782e25d98cc1391472717035f986c979edef0c9
<https://xenbits.xen.org/gitweb/?p=people/julieng/freebsd.git;a=blob_plain;f=sys/arm/conf/XENVIRT;h=ff6433392e6fc2d5fa7c1ad1f7c40155003af9a8;hb=0782e25d98cc1391472717035f986c979edef0c9>


This patch was written by Julien Grall a lot of time ago and now it does
not work anymore. This is the reason :

It appears FreeBSD-CURRENT removed the last step converting the kernel file
to kernel.bin. The patch can be readily rebased, but without kernel.bin
that doesn't do too much.


So,without a rebase of that patch the first option is not applicable. And
I'm not able to fix it.

2) booting FreeBSD using U-Boot,as explained to me by a xen developer :

I was trying to explain why and how Julien's patch works so that you could
be the one to re-do something similar or fix the patch on the FreeBSD
kernel that you are working with. I am happy to help review and write
patches but I don't work with the FreeBSD kernel so I wouldn't be able to
help you quickly. However, I might have a suggestion. Do you know if
FreeBSD can be booted by U-Boot ? Because U-Boot definitely boots as Xen on
ARM guest firmware/bootloader. You should be able to build U-Boot and use
the U-Boot binary as Xen guest kernel, then U-Boot could load FreeBSD from
disk or network and start it. For instance as domU config file:

kernel="/home/petalinux/u-boot.bin"
disk = [ '/home/petalinux/test.img,raw,xvda' ]

I know it is important to build u-boot with the following config to make it
work on Xen.

CONFIG_CMO_BY_VA_ONLY=y


According with these suggestions (and with the suggestions of a FreeBSD
developer) I have compiled the needed u-boot.bin from scratch using this
procedure :

# git clone https://github.com/u-boot/u-boot.git

# cd u-boot

# ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make snow_defconfig : this
line generates the file .config

# nano .config and I've added these parameters :

CONFIG_ARMV7_NONSEC=n
CONFIG_EFI_GRUB_ARM32_WORKAROUND=y

suggested to me by a FreeBSD developer in relation to the FreeBSD fragment :

https://github.com/freebsd/freebsd-ports/blob/main/sysutils/u-boot-master/files/FreeBSD_Fragment

but I haven't added this parameter :

CONFIG_CMO_BY_VA_ONLY=y

according with what he said,instead :

"I took a brief look at your post and it seems to me that the option
CONFIG_CMO_BY_VA_ONLY is irrelevant to your target armv7 32 bit platform :

https://source.denx.de/u-boot/u-boot/-/blob/master/arch/arm/cpu/armv8/Kconfig?ref_type=heads#L3

Finally,the uboot-bin file is generated with this command :

# ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make

At this point,I took a look inside the .config file and I saw that the
parameter "CONFIG_ARMV7_NONSEC=n" has been removed. So,for some reason,it
is not accepted and this could be a problem....

These are the xen config files that I've used :

nano freebsd.cfg

name="test"
kernel="u-boot.bin"
extra = "console=hvc0"
memory=256
vcpus=1
disk = [ 'FreeBSD-13.2-RELEASE-armv7.img,raw,xvda' ]

nano start-freebsd

xl create freebsd.cfg
xl console freebsd

This is what happens when I launch the vm :

# ./start-freebsd

Parsing config from freebsd.cfg
xc: error: panic: xg_dom_core.c:689: xc_dom_find_loader: no loader found:
Invalid kernel
libxl: error: libxl_dom.c:571:libxl__build_dom: xc_dom_parse_image failed
libxl: error: libxl_create.c:1640:domcreate_rebuild_done: Domain 1:cannot
(re-)build domain: -3
libxl: error: libxl_domain.c:1183:libxl__destroy_domid: Domain
1:Non-existent domain
libxl: error: libxl_domain.c:1137:domain_destroy_callback: Domain 1:Unable
to destroy guest
libxl: error: libxl_domain.c:1064:domain_destroy_cb: Domain 1:Destruction
of domain failed
freebsd is an invalid domain identifier (rc=-6)

-- 
Mario.


More information about the U-Boot mailing list