FreeBSDのXen Kernelを作る

放置するのもなんですし、日々の調べ物を書くチラシの裏として活用しようかと。
しかしながら、内容が小出しになる、もしくは途中で無駄だと判断して中断することもあるので、答えが知りたくてググッてきた人には悪いかもしれません。

んじゃ、本題。

NetBSD 5.1 (AMD64)で動いている Xen 環境に DomainU として FreeBSD を動かしたいので、準仮想化用に使う Kernel を作ってみました。

いつもの方法で kernel を作ります。

gomyway# uname -rm
8.2-RELEASE i386
gomyway# cd /usr/src/
gomyway# make buildkernel KERNCONF=XEN

ここでちょいと迷ったのが、どこにビルドされた kernel があるのか分からない。面倒になったので、適当なパーティションを作ってそこにインストールしてから取り出すことにしてました。

適当にイメージファイルを作って mdconfig でメモリディスクをアタッチします。

gomyway# dd if=/dev/zero of=/home/freebsd8.2.img bs=1m count=1024
gomyway# mdconfig -a -t vnode -u 0 -f /home/freebsd8.2.img

ファイルシステムを作って bsdlabel で fstype を 4.2BSD に変更します。

gomyway# bsdlabel -w /dev/md0 a
gomyway# bsdlabel -e /dev/md0
gomyway# newfs /dev/md0a

mount します。

gomyway# mount /dev/md0a /mnt

メモリディスクにカーネルをインストールします。

gomyway# cd /usr/src
gomyway# make installkernel DESTDIR=/mnt  KERNCONF=XEN

これで /mnt/boot/kernel/kernel に Xen kernel があります。

これを Xen ホストにコピーして DomainU として起動してみますが… OS起動時にpmap_init で落ちる。

# xm create -c freebsd.conf
(snip)
panic: pmap_init: page table page is out of range

ワケがわからないよ。

ググッてみたら、AMD特有の問題のようで 2011年1月ぐらいにFIX入っているみたいなので、後日CURRENT で Xen Kernel を作ってもう一度トライしてみます。