+(xen-devel and Arm maintainers, including Julien)
> On Nov 27, 2023, at 18:03, Mario Marietto <marietto2...@gmail.com> wrote:
>
> Hello.
> We have just virtualized Debian 12 on our arm (32 bit) Chromebook model
> xe303c12 . 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 questions 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. This is the error we get :
> # xl create freebsd.cfg
> Parsing config from freebsd.cfg xc: error: panic: xg_dom_elfloader.c:63:
> xc_dom_guest_type: image not capable of booting inside a HV
> M container: 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 4:cannot
> (re-)build domain: -3
> libxl: error: libxl_domain.c:1183:libxl__destroy_domid: Domain 4:Non-existant
> domain
> libxl: error: libxl_domain.c:1137:domain_destroy_callback: Domain 4:Unable to
> destroy guest
> libxl: error: libxl_domain.c:1064:domain_destroy_cb: Domain 4:Destruction of
> domain failed
>
> We are spending 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.