「QEMU」カテゴリーアーカイブ

Windowsホスト用のKQEMUの作り方

Fedora Core 4ホストで、Windows用のドライバをクロスコンパイルします。ここにあるMinGWのrpmをインストールすると作ることができました。
http://mirzam.it.vu.nl/mingw/
bitWalkのバイナリでもやってみたのですが、作ることができませんでした。
rpmをインストール後、ソースコード内でconfigureします。
./configure --enable-mingw32
make
また、ビルド時にELF用のアセンブラオプションが使われていて、クロスコンパイル環境でないと作ることができません。不便なのですがしょうがないですね。VirtualBoxを使って、Linuxゲストを動かしてコンパイルするのがよさそうです。

QEMUとKQEMUのGPL化

QEMUとKQEMUがGPLになるようです。KQEMUは、それにともないソースコードが公開されています。
KQEMUがGPLになるのはいいのですが、KVMやVirtualBoxがある現状を見るとどう扱っていいのか考えてしまいますね。

MinGWのランタイムライブラリ

QEMUを作るときに、MinGWのランタイムライブラリmingw-runtime-3.11.tar.gzを使うと、QEMUが動きません。例えば、MinGW-5.1.2.exeとかMinGW-5.1.3.exeでMinGW(gcc-3.4.2)をインストールすると、このライブラリが使われるため、Windows 2000ゲストが、unhandled win32 exceptionで終了してしまいます。mingw-runtime-3.10.tar.gzにダウングレードすると直ります。
最初、何が悪くて動かないかわからず、ゲストOSを3つほどだめにしてしまいました。

VirutalBoxのWindowsホストでのデバッグの仕方

ソースコードから、デバッグバージョンを作ります。
kmk BUILD_TYPE=debug
実行ファイルは、outwin.x86debugbinにできます。
Windowsホストだと、VisualStudio用のプロジェクトを作っているわけではないので、実行ファイルを指定してデバッグする必要があります。次のところにやり方が書いてあります。
http://msdn2.microsoft.com/ja-jp/library/0bxe8ytt(vs.80).aspx
その後、プロジェクトのプロパティでコマンド引数を設定してデバッグ開始をすれば良いです。
実際にデバッガ上で動かしてみると、ステップ実行すると画面がフリーズしてしまうことが問題でした。ブレークポイントを指定しての実行はできるみたいです。
また、ソースコードをプロジェクトに登録しないと、ソースコード内の検索ができないことが不便かなと思います。

VirtualBoxのLinuxホストでのデバッグの仕方

Linuxホストで、VirtualBoxをデバッグするのは次のようにするそうです。
まず、ソースコードからデバッグバージョンを作ります。
kmk BUILD_TYPE=debug
次に、カーネルモジュールがロードされ/dev/vboxdrvにリードライトの権限があることを確認します。
次に、ビルドしたディレクトリからVirtualBoxサービスを立ち上げます。
~/VirtualBox/.../out/.../bin $ LD_LIBRARY_PATH=. ./VBoxSVC
次に、別のターミナルから、デバッガー上でVirtualBoxを動かします。
~/ViratualBox/.../out/.../bin $ LD_LIBRARY_PATH=. gdb --args ./VirtualBox -startvm [VM NAME]
デバッグバージョンのVirtualBoxは、いろいろなところにAssertionが入っていて、おかしなとことがあればログファイルに記録されているそうです。

WindowsホストでのVirtualBoxの作り方

ここにビルドの仕方が書いてあります。
http://www.virtualbox.org/wiki/Windows%20build%20instructions
VisualC++と、Platform SDK、DirectX SDK、Windows DDKを順にインストールします。
VisualC++は、Express Editionを使いました。
MinGWは、MinGW-3.1.0-1.exeをインストールし、gcc-3.3.1などをC:MinGWディレクトリで展開しました。
SDLは、ソースコードからVC++を使って作りましたが、Development Librariesにあるものでも良いと思います。ソースコード内に、VisualC.zipというファイルがあるので、展開するとプロジェクトを開くことができます。
自分で作った場合は、
include
lib/SDL.dll
lib/SDL.lib
lib/SDLmain.lib
のように配置されている必要があります。
XercesとXalan。
VC++ Express Editionで作ろうとしたけど、作れなかった。VC6用のバイナリを使ってみることにした。
Q...をViusalC++ Express Edition用に作る。
ここにやり方が書いてある。
http://qtwin.sourceforge.net/qt3-win32/compile-msvc-2005.php
まず、コマンドプロンプトの環境整備です。
C:Program FilesMicrosoft Visual Studio 8Common7Toolsvsvars32.batに、PlatformSDKのPATH、INCLUDE、LIBを加えた。加える位置は、@goto endの前です。
@set PATH=C:Program FilesMicrosoft Platform SDK for Windows Server 2003 R2bin;%PATH%
@set INCLUDE=C:Program FilesMicrosoft Platform SDK for Windows Server 2003 R2Include;%INCLUDE%
@set LIB=C:Program FilesMicrosoft Platform SDK for Windows Server 2003 R2Lib;%LIB%
qt-3のconfigure.batを実行する前に、環境変数をセットした。QMAKESPECには、win32-msvc2005を指定した。
set QTDIR=C:qt-3
set PATH=%QTDIR%bin;%PATH%
set QMAKESPEC=win32-msvc2005
コンパイル後、qt-3libの中にdynamicというフォルダを作り、lib/qtmain.libをlibdynamicqtmain.libにコピーしました。また、libqt-mt3.libをlibdynamicqt-mt333.libに名前を変えてコピーしました。また、binqt-mt3.dllをbinqt-mt333.dllに名前を変えてコピーしました。これは、configure.vbsを実行するときにチェックされるからです。ただ、このように変更して本当に大丈夫なのかはどうかは、わかりません。
[追記:configure.vbsのlib/dynamic/qt-mt33*.libとなっているところをlib/dynamic/qt-mt3*.libに変更して、qt3のlibファイルをdynamicに丸ごとコピーするとVirtualBox.exeができたそうです。こちらのほう良いと思います。]
以上で、ライブラリの整備はおしまいです。
次に、ソースコードの先頭でcscript configure.vbsを実行します。次のようなオプションをつけて実行しました。
cscript configure.vbs --with-DDK=C:WINDDK3790.1830 --with-MinGW=C:MinGW --with-libSDL="C:Program FilesSDL-1.2.11" --with-Xerces="C:Program Filesxerces-c-windows_2000-msvc_60" --with-Xalan="C:Program FilesXalan-C_1_10_0-win32-msvc_60" --with-Qt="C:Qt-3" --with-VC-Express-Edition
このとき、kBuildがアップデートされていると、kmk.exe --versionが起動できないというエラーになってしまうようです。そのときは、kBuildbinwin.x86フォルダを別のところに移動し、元の位置に移動しなおすと動きました。これは、NTFSで他のコンピュータで作ったフォルダにはアクセス制限がかかるからです。正式にはセーフモードで起動しなおしてアクセス権を設定し直すみたいです。
ライブラリの位置は、実行する環境によって変えてください。結論から言うと、Express Editionでコンパイルする場合は、Xerces、Xalan、QTのライブラリは必要ではありませんでした。
そして、env.batを実行してからkmkを実行します。
env.bat
kmk
このとき、kBuildのりビジョン3以前では、自分のPCでは、Cygwinがインストールしてあるためkmkを実行しようとするとエラーになってしまいました。そこで、VirtualBoxのサイトの説明にある通りCygiwn1.dllをkBuildbinx86.bincygwin1.dllにコピーしたらコンパイルが始まりました。また、途中yasmを使うところで、"アクセスが拒否されました”と表示されてコンパイルが止まってしまいました。そこで、一旦vboxtoolswin.x86binフォルダを別のフォルダに移動して、同じ場所にコピーしなおしました。すると、yasmが実行可能になりました。
以上で、コンパイルは終了しました。
cd outwin.x86debugbin
VBoxBFE.exe -cdrom Knoppix.iso -boot d
で動きました。-boot dを指定しないとCD-ROMから起動しないです。VisualC++ Express Editionを使っているため他のGUIのプログラムは作られません。また、comregister.cmdとかないのでする必要がありません。実際のところQTとかのライブラリはVBoxBFE.exeのみでは必要ありませんでした。
SUPUninstall
SUPInstall
で、カーネルドライバのアンインストールとインストールができるようですが、まだ試していません。
以上で、VisualC++ Express Editionを使ってVirtualBoxを作ってみたのでした。

Fedore Core 4ホストでのVirtualBoxの作り方

Fedora Core 4ホストでVirtualBoxをビルドしてみました。その時のメモです。
ビルドに必要なものは、こちらに書いてあります。1つづつ確認していきます。
http://www.virtualbox.org/wiki/Linux%20build%20instructions
dev86は、rpmfindで探してきました。Fedora Core 5用のしか無かったのですが、それをインストールしました。
http://linuxsoft.cern.ch/fedora/linux/core/5/i386/os/repodata/repoview/dev86-0-0.16.17-2.1.html
rpm -ivh dev86-0.16.17-2.1.i386.rpm
次のrpmをインストールしました。
yum install uuid
yum install uuid-c++
yum install uuid-devel
yum install qt-devel
SDLとSDL-develは、QEMUを動かすときにインストール済みなので省略。もっと必要だったかもしれませんがメモし忘れてしまいました。
Intelのサイトからiaslを持ってきます。acpica-unix-20061109.tar.gzをダウンロードします。
http://www.intel.com/technology/iapc/acpi/downloads.htm
tar zxvf acpica-unix-20061109.tar.gz
cd acpica-unix-20061109/compile
make
cp iasl /usr/local/bin
Xerces-cは、FC4用のrpmが無いので自分でコンパイル、インストールします。
http://xml.apache.org/xerces-c/
tar zxvf xerces-c-current.tar.gz
export XERCESCROOT=/home/kazu/xerces-c-src_2_7_0
cd $XERCESCROOT
./runConfigure -plinux -cgcc -xg++ -minmem -nsocket -tnative -rpthread
gmake
make install
Xalan-cも同様に自分でコンパイル、インストールしました。
http://xml.apache.org/xalan-c/
tar zxvf Xalan-C_1_10_0-src.tar.gz
export XERCESCROOT=/home/kazu/xerces-c-src_2_7_0
export XALANCROOT=/home/kazu/xml-xalan
./runConfigure -p linux -c gcc -x g++
make clean
make
make install
XercesとXalanは、/usr/local/libにインストールされるので、そのライブラリのロードパスを指定します。
/etc/ld.so.conf.d/libxalan.confと言うファイルをつくって、次の内容を書きます。ファイルの名前は、拡張子が.confであればなんでもいいです。

/usr/local/lib

そして、設定を反映させます。
su
/sbin/ldconfig
exit
これで、開発環境の整備は終わりです。VirtualBoxのconfigureで環境のチェックをしているので、何か無いと言われたらインストールしてください。
次に、VirtualBoxのソースをコンパイルしました。
svn co http://virutalbox.org/src/vbox/trunk vbox
cd vbox
ここで、configureスクリプトで環境のチェックをするのですが、-lXcursorがリンクできなくて止まってしまいます。LIBRARY_PATHで、X Windowのライブラリのパスを指定しないといけないです。
また、QTの位置を指定しないといけないです。
LIBRARY_PATH=/usr/X11R6/lib ./configure --with-qt-dir=/usr/lib/qt-3.3
正常に終了すれば、env.shというファイルができます。
source ./env.sh
プログラムをビルドします。
kvm all
できたら、カーネルドライバをビルドします。
cd out/linux.x86/release/bin/src
make
ここで、ドライバをロードし、属性を指定します。オープンソースでないバイナリは、/etc/groupにvboxusersを作って、そのグループだけ動作するようにしているようですが、とりあえずこうしないと動きませんでした。
su
/sbin/insmod ./vboxdrv.ko
chmod a+rw /dev/vboxdrv
exit
一般ユーザになってプログラムを起動します。
cd ..
LD_LIBRARY_PATH=. ./VBoxSVC &
LD_LIBRARY_PATH=. ./VirtualBox
VirtualBoxの画面が出てくると思います。ドライバが使えないと言うエラーが出たら、ちゃんとロードして/dev/vboxdrvがあり、属性が指定してあるか確認してください。
VirtualBoxのサイトでは、DebianとGentooについての記述があって、Fedora Coreでの作成は考慮されていないようなので、けっこう手間がかかりました。

VirtualBoxとWindows Vistaホスト

Windows VistaホストでVirtualBoxをインストールし、実行すると次のようなエラーが出ることがあるそうです。
Failed to create the VirtualBox COM object.
The application will now terminate.
Callee RC: REGDB_E_CLASSNOTREG (0x80040154)
その時は、C:Program FilesInnoTek VirtualBoxに行き、
VBoxSVC /ReRegServer
regsvr32 VBoxC.dll
とすると良いそうです。