Linux, Windows, Mac で BitVisor をコンパイルする方法を紹介します。
Linux
まずはコンパイル環境を整えます。
Fedora の場合は以下のとおりです。
$ sudo dnf -y install mercurial make gcc mingw64-gcc
CentOS の場合は以下のとおりです。
$ sudo yum -y install mercurial make gcc epel-release
$ sudo yum -y --enablerepo=epel install mingw64-gcc
Ubuntu の場合は以下のとおりです。
$ sudo apt-get -y install mercurial make gcc mingw-w64
次に、BitVisor の最新版を BitBucket から取得してコンパイルします。
$ hg clone https://bitbucket.org/bitvisor/bitvisor
$ cd bitvisor
$ make
$ make -C boot/loader
$ make -C boot/uefi-loader
以下のファイルが生成されていたら成功です。
- bitvisor.elf
- boot/loader/bootloader
- boot/loader/bootloaderusb
- boot/uefi-loader/loadvmm.efi
とても簡単ですね。
Windows
ここでは MSYS2 を使った方法を紹介します。
まずは、下記の「MSYS2 installer」のページに従って MSYS2 をインストールしてください。64bit版 (msys2_x86_64-????????.exe) を選択します。
http://msys2.github.io/
インストールされた「MSYS2 Shell」を起動して、コマンドプロンプトを表示します。
次に、クロスコンパイラをインストールするための設定をします。下記のページにある crossgcc を使用します。
http://osdn.jp/projects/msys2-crossgcc/
(1) /etc/pacman.conf に crossgcc のリポジトリを追記します。
$ cat >> /etc/pacman.conf
[crossgcc]
SigLevel = Optional TrustAll
Server = http://osdn.dl.osdn.jp/msys2-crossgcc/62918
(Ctrl+Dを入力)
(2) パッケージ一覧を更新してから、必要なパッケージをインストールします。
$ pacman -Sy
$ pacman -S make wget patch x86_64-elf-gcc gcc
次に BitVisor の最新版を BitBucket から取得します。mercurial がシンボリックリンクをうまく扱えないようなので、zip ファイルをダウンロードします。URL は下記の BitBucket のダウンロードのページから最新のものを取得して、ファイル名を適宜調整してください。
https://bitbucket.org/bitvisor/bitvisor/downloads
$ wget https://bitbucket.org/bitvisor/bitvisor/get/dd0b81c76707.zip
$ unzip dd0b81c76707.zip
$ cd bitvisor-bitvisor-dd0b81c76707
アセンブラが古いので、以下のようにパッチを当てます。
$ patch -p1 -s
--- a/boot/loader/bootloaderusb.s 2015-12-08 00:00:00.000000000 +0900
+++ b/boot/loader/bootloaderusb.s 2015-12-08 00:00:00.000000000 +0900
@@ -194,7 +194,7 @@
# Make a multiboot info
lea 4(%bp),%edi
push %edi # Clear multiboot info
- lea 88/4(%eax),%ecx
+ lea 22(%eax),%ecx
rep stosl
pop %ebx
mov %dl,15(%ebx) # Write a drive number
(Ctrl-Dを入力)
最後に、適宜クロスコンパイラを指定して、コンパイルします。
$ make CC=x86_64-elf-gcc
$ make CC=x86_64-elf-gcc -C boot/loader
$ make EXE_CC=gcc -C boot/uefi-loader
以下のファイルが生成されていたら成功です。
- bitvisor.elf
- boot/loader/bootloader
- boot/loader/bootloaderusb
- boot/uefi-loader/loadvmm.efi
Mac
ここでは MacPorts を使った方法を紹介します。
下記のページに従って、MacPorts をインストールします。
https://www.macports.org/install.php
- Xcode 及び Xcode Command Line Tools のインストール
- Xcode のライセンス同意
- OS X のバージョンに合った MacPorts のインストール
必要なパッケージをインストールします。
$ sudo port install mercurial x86_64-elf-gcc wget
クロスコンパイラをダウンロードして展開します。
$ mkdir mingw64-gcc
$ cd mingw64-gcc
$ wget http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Automated%20Builds/mingw-w64-bin_i686-darwin_20130622.tar.bz2
$ tar xvf mingw-w64-bin_i686-darwin_20130622.tar.bz2
BitVisor の最新版を BitBucket から取得します。また、アセンブラが古いのでパッチを当てます。
$ hg clone https://bitbucket.org/bitvisor/bitvisor
$ cd bitvisor
$ patch -p1 -s
--- a/boot/loader/bootloaderusb.s 2015-12-08 00:00:00.000000000 +0900
+++ b/boot/loader/bootloaderusb.s 2015-12-08 00:00:00.000000000 +0900
@@ -194,7 +194,7 @@
# Make a multiboot info
lea 4(%bp),%edi
push %edi # Clear multiboot info
- lea 88/4(%eax),%ecx
+ lea 22(%eax),%ecx
rep stosl
pop %ebx
mov %dl,15(%ebx) # Write a drive number
(Ctrl-Dを入力)
クロスコンパイラを用いてコンパイルします。
$ make CC=x86_64-elf-gcc AR=x86_64-elf-ar OBJCOPY=x86_64-elf-objcopy SIZE=x86_64-elf-size
$ make CC=x86_64-elf-gcc -C boot/loader
$ make EXE_CC=~/mingw64-gcc/bin/x86_64-w64-mingw32-gcc -C boot/uefi-loader
以下のファイルが生成されていたら成功です。
- bitvisor.elf
- boot/loader/bootloader
- boot/loader/bootloaderusb
- boot/uefi-loader/loadvmm.efi
※12/9: Mac での loadvmm.efi の生成方法を追記