FreeBSDカーネルをELF形式で起動する必要がありますか、またはzImage形式で起動する必要がありますか?どのように?

FreeBSDカーネルをELF形式で起動する必要がありますか、またはzImage形式で起動する必要がありますか?どのように?

Arm(32ビット)ChromebookでDebian 12を仮想化しました。ホスト/ dom0にはDevuan 5を、ゲスト/ domUにはDebian 12を選択しました。それは非常にうまく動作します。しかし、私たちの目標は異なります。私たちはFreeBSDをdomUに仮想化したいと思います。 FreeBSD armゲスト用に動作するXen PVネットワークドライバを提供できますか?私はJulien GrallがXenドライバをArmのFreeBSDに移植したことを発見しました。 Julienの仕事がFreeBSDのアップストリームで承認されているのだろうか。この場合、ArmカーネルのFreeBSDでXen PVドライバを有効にすると、ArmのXenゲストであるFreeBSDが機能するはずです。 Julienの作業がFreeBSDのアップストリームで承認されていない場合は、彼のパッチを見つけてArmカーネルのFreeBSDに適用する必要があります。

私たちは次のスライドを見つけました。

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

スライド13では、Armカーネル構成のXENHVM FreeBSDが言及されています。これが私たちが探しているものです。

FreeBSD Xenクライアントには、スライドプレゼンテーションの作成に関していくつかの制限があるようです。たとえば、Debian Bookbug Guest の場合、Chromebook の実際の CPU 数と一致させるために vcpus = '2' を使用しましたが、スライド 13 では FreeBSD ゲストが 1 つの VCPU のみをサポートしているため、vcpu = '1 を変更する必要があります。 2つ以上のvcpuのサポートが後で追加されない限り、FreeBSDゲスト設定では、このスライドショーが9年になったため可能です。

ここでは、armカーネル構成ファイルのXENHVM FreeBSDを見つけることができると思います。

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

しかし、私が正しく理解していない限り、それはありません。残念ながら、9年前にJulien Grallのスライドプレゼンテーションで言及されたXen on Armのサポートは、公式のFreeBSDソースコードに追加されていません。私は現在、Julien Grallによって書かれたパッチがまだオンラインのどこかに投稿されていることを確認するためにオンラインを検索しています。見つからない場合は、ここでxen-usersメーリングリストに連絡してください。 Julienは定期的にリストを読んでXen on Armに関する質問に答えたので、オンラインでパッチが見つからない場合はパッチを見つける方法を教えてくれると思いました。

FreeBSD Wikiのこのページによると:

https://wiki.freebsd.org/Xen

FreeBSDはarmではなくx86でのみXenをサポートすると思います。したがって、Xen FreeBSDゲストをArmで作業することは難しいでしょう。私たちは、Julien Grallが過去にこれを動作させることができるいくつかのパッチを持っていることを知っています!

ここでJulienの少し新しいスライドショーを見つけました。

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

内容はほとんど同じですが、GENERIC FreeBSDカーネルがarm64でXenをサポートしていると言っていますが、まだarm 32ビットでXen用のXENHVM FreeBSD構成が必要であることがわかりましたが、まだオンラインで見つかりませんでした。

Xenから起動するLinuxカーネルと、それ以外のFreeBSDカーネルの出力を見てください。

% 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

起動できないFreeBSDカーネルはELF形式ですが、起動できるLinuxカーネルはzImage形式です。

xenbits.xenproject.orgでドキュメントを読むのに時間を費やし、ドキュメントによると、ARMのXenはカーネルをzImage形式で起動する方法だけを知っているので、FreeBSDカーネルフォーマットは現代ではx86カーネルとして誤って検出されます。禅。

私はまた、XenでFreeBSD / armを起動することについてFOSDEM 2014でJulien Grallの30分のビデオプレゼンテーションを見ました:

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

このビデオとは異なる場所で、JulienはXenのFreeBSD / arm用のブートABIがまだ開発されておらず、時々クラッシュし、問題を調査する必要があると述べました。彼はLinuxで使用されているzImage ABIについて言及しましたが、FreeBSDはその形式を使用せず、XenでFreeBSD / armを起動するためにどの形式を使用するのかは当時の一般的な質問でした。残念ながら、9年以上経ってもサポートされている唯一の形式は、Linuxで使用されているzImage形式です。

当時のJulienの使命は、Linuxで使用されているサポートされているzImage形式の代わりにELFバイナリを使用してXenでFreeBSD / armを起動することでした。発生して終了します。したがって、最善の解決策は、ELF形式ではなくzImage形式でFreeBSDカーネルを構築するための規則を移植することです。 LinuxでLinuxarmカーネルをzImage形式でビルドする方法を学ぶために、LinuxのMakefilesを調べてきましたが、理解するのは簡単ではありません。

関連情報