Zynqに搭載されたPS部を活用し、仮想化ソフトウェア「Xen」を実行してみよう!

今回は、MPSoCのPS部を活用して、Linuxの仮想化の実装であるXenを動かしてみましょう。MPSoCは、Arm Cortex-A53クアッド コアで複数のOSを動作させられる高いパフォーマンスなので、仮想マシン(VM)を動かすことができます。

Xenとは

Xenは現在、Linux Foundationのプロジェクトとしてメンテナンスされています(公式サイト)。歴史なども詳しく知りたい人はWikipediaも参照してみてください。

MPSoCでの実装についてはXilinxのWikiにも詳細が掲載されています。

Xenをビルドしましょう

Xenを含むrootfsを作成する

下記のコマンドでrootfsにXenのユーティリティを組込みます。選択するパッケージはスクリーンショットを参考にしてください。


$ petalinux-config -c rootfs

図

図

図

Linuxカーネルを設定する

下記のコマンドでカーネルの設定を行います。Xen上でゲストのLinuxカーネルを起動しやすいようにカーネルとrootfsを分離したイメージを生成します。具体的な設定はスクリーン ショットを参考にしてください。


$ petalinux-config

図

図

図

Xen用のデバイスツリーを設定する

下記のようにxen-overlayの記述を追記します。

$ cat project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
/include/ "system-conf.dtsi"
/include/ "xen-overlay.dtsi"
/ {
};
$ cat project-spec/meta-user/recipes-bsp/device-tree/device-tree.bbappend
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

SRC_URI += "file://system-user.dtsi"
SRC_URI += "file://xen-overlay.dtsi"

Linuxカーネルをビルドする


$ petalinux-build

ビルドが完了したら、下記のファイルをSDカードの第一FATパーティションにコピーします。

  • BOOT.BIN
  • Image
  • rootfs.cpio.gz.u-boot
  • system.dtb
  • xen.ub

XenをMPSoCのボードで実行してみましょう!

u-bootのカウント ダウンが表示されたらEnterを入力するとプロンプトが表示されます。下記のオプションでDom0 (ホストOS)のLinuxをブートさせます。


ZynqMP> mmc dev $sdbootdev &&&& mmcinfo; load mmc $sdbootdev:$partid 1000000 system.dtb &&&& load mmc $sdbootdev:$partid 0x80000 Image; fdt addr 1000000; load mmc $sdbootdev:$partid 1030000 xen.ub; load mmc $sdbootdev:$partid 2000000 rootfs.cpio.gz.u-boot; bootm 1030000 2000000 1000000

Linuxにログイン後、下記のコマンドでDomU (ゲストOS)のLinuxをブートさせます。

Dom0のコンソールに戻るには、Ctrl + ] を入力します。


# xl create -c /etc/xen/example-simple.cfg

図

まとめ

Xenを活用することでレガシーなソフトウェア資産をOSごと仮想的に動作させたり、セキュアなアプリケーションを別空間で動作させたりできます。みなさんもXenで遊んでみてください!

前の記事を読む