Edited at

BitVisor のコンパイル

More than 3 years have passed since last update.

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


  1. Xcode 及び Xcode Command Line Tools のインストール

  2. Xcode のライセンス同意

  3. 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 の生成方法を追記