Fwd: Should we boot the FreeBSD kernel in ELF format or in zImage format ? How?

From: Mario Marietto <marietto2008_at_gmail.com>
Date: Sat, 25 Nov 2023 11:41:03 UTC
Hello to everyone.

we have just virtualized Debian 12 on our arm (32 bit) Chromebook. As host
/ dom0 we have chosen Devuan 5,and for guest / domU,Debian 12. It works
great. But our goal is different. We want to virtualize FreeBSD as domU.
Can we have a working Xen PV network driver for a FreeBSD arm guest ?. I
found that Julien Grall has ported the Xen drivers to FreeBSD on arm. I
would like to know if Julien's work was accepted upstream by FreeBSD, in
which case FreeBSD as a Xen guest on arm should work if we enable the Xen
PV drivers in the FreeBSD on arm kernel. If Julien's work was not accepted
upstream by FreeBSD, we will have to find his patches and apply them
ourselves to the FreeBSD on arm kernel.

We found these slides :

https://events.static.linuxfound.org/sites/events/files/slides/Porting%20FreeBSD%20on%20Xen%20on%20ARM%20.pdf

Slide 13 refers to a XENHVM FreeBSD on arm kernel config - that is what we
want to find.

It looks like when that slide presentation was written, there were some
limitations on FreeBSD Xen guests. For example, for our debian bookworm
guest, I am using vcpus = '2' to match the number of real cpus on our
Chromebook, but slide 13 mentions support for only 1 VCPU with a FreeBSD
guest, so I will need to change that vcpus = '1' in the FreeBSD guest
config unless support for 2 or more vcpus was added later, which is
possible because that slide presentation is 9 years old.

Here is where I would expect to find the XENHVM FreeBSD on arm kernel
config file:

https://cgit.freebsd.org/src/tree/sys/arm/conf

But it is not there unless I am not understanding something correctly. For
now, unfortunately conclude that the support for Xen on arm that Julien
Grall mentioned in that slide presentation 9 years ago was never added to
the official FreeBSD source code. I am searching the web now to see if the
patches that Julien Grall wrote are still posted somewhere online. If we
cannot find them, we can ask here and on the xen-users mailing list. Julien
regularly reads that list and responds to question about Xen on arm, so I
think he will tell us how to find the patches if we cannot find them online.

According to this page from the FreeBSD wiki:

https://wiki.freebsd.org/Xen

I think FreeBSD only supports Xen on x86, not arm. So this is going to be a
bit of a challenge to get a Xen FreeBSD guest on arm working. We know
Julien Grall has some patches that made it work in the past !

I found a slightly newer slide presentation by Julien here:

https://www.slideshare.net/xen_com_mgr/bsdcan-2015-how-to-port-your-bsd

It is about the same, but it mentions the GENERIC FreeBSD kernel supports
Xen on arm64, but still says we need the XENHVM FreeBSD config for Xen on
arm 32 bit, which I haven't found online yet.

Please,take a look at this output of the linux kernel that can boot on Xen,
and the FreeBSD kernel that cannot :


% file zImage-6.1.59-stb-xen-cbe+
zImage-6.1.59-stb-xen-cbe+: Linux kernel ARM boot executable zImage
(little-endian)

% file FREEBSD-XENVIRT
FREEBSD-XENVIRT: ELF 32-bit LSB executable, ARM, EABI5 version 1
(SYSV), dynamically linked, interpreter /red/herring, for FreeBSD 11.0
(1100048), not stripped


The FreeBSD kernel that won't boot is in ELF format but the Linux kernel
that does boot is in zImage format.

I spent time reading the docs on xenbits.xenproject.org, and according to
those docs Xen on arm only knows how to boot a kernel in the zImage format,
so the FreeBSD kernel is in a format that modern Xen incorrectly detects as
an x86 kernel.

I also watched Julien Grall's 30 minute video presentation of his work to
boot FreeBSD/arm on Xen at FOSDEM 2014 here :

https://archive.fosdem.org/2014/schedule/event/freebsd_xen_arm/

In that video, and in other places, Julien mentions that the boot ABI for
FreeBSD/arm on Xen was not yet developed and he was getting occasional
crashes and needed to investigate the problem. He mentioned the zImage ABI
that Linux uses, but pointed out FreeBSD does not use that format, and back
then it was an open question which format to use to boot FreeBSD/arm on
Xen. Unfortunately, nine years later, the only supported format is still
the zImage format that Linux uses.

It looks like Julien's work back then was using an ELF binary to boot
FreeBSD/arm on Xen instead of the supported zImage format that Linux uses
and the modern Xen toolstack exits with an error when trying to boot the
FreeBSD ELF formatted binary that Julien's patch creates. So the best
solution would be to try to port the rules to build a FreeBSD kernel in the
zImage format instead of the ELF format. I have been studying the Makefiles
in Linux to see how Linux builds the Linux arm kernel in the zImage format,
but it is not trivial to understand.
-- 
Mario.