読者です 読者をやめる 読者になる 読者になる

FLYING

〈全日本・紀文豆乳飲料シリーズ「麦芽コーヒー」の500ミリリットルパックを扱う小売店が少ないことに遺憾の意を表明する会〉活動記録

Cygwinでxv6を実行する

c/c++ unix windows

下準備編

既にCygwinを使っていた人も専用の環境として新規にCygwinをインストールした方がいいかもね。
結構バージョンの組み合わせによっても動く動かないがあるみたい。

Cygwinをインストールする

下記のパッケージを選択してインストール:

各種ソースコードをDLして展開する

DLするソースコードのバージョンと展開先の対応:

binutils-2.21.1a.tar.bz2
/path_to_cygwin/usr/src/binutils-2.21.1
gcc-core-4.5.3.tar.bz2
/path_to_cygwin/usr/src/gcc-4.5.3
gdb-6.8a.tar.bz2
/path_to_cygwin/usr/src/gdb-6.8

Cygwinをインストールしたディレクトリをルートとして,/usr/srcの下にまとめて展開する。
それぞれのアーカイブは下記のサイトからDLする。

GCCのビルドに必要なソースコードをDLして展開する

DLするソースコードのバージョンと展開先の対応:

gmp-5.0.2.tar.bz2
/path_to_cygwin/usr/src/gcc-4.5.3/gmp
mpc-0.9.tar.gz
/path_to_cygwin/usr/src/gcc-4.5.3/mpc
mpfr-3.1.0.tar.bz2
/path_to_cygwin/usr/src/gcc-4.5.3/mpfr

先ほどと同様にDLして展開する。

Cygwinbinutilsをビルドする
# cd /usr/src/binutils-2.21.1
# ./configure --target=i386-jos-elf --disable-nls
# make
# make install

記事最下部の追記部分を参照すると幸せになれるかもしれない。

CygwinGCCをビルドする
# mkdir /usr/src/build-gcc
# cd /usr/src/build-gcc
# ../gcc-4.5.3/configure --target=i386-jos-elf --disable-nls \
    --without-headers --disable-shared --without-newlib \
    --disable-threads --disable-libmudflap --disable-libssp \
    --with-mpfr-include=/usr/src/gcc-4.5.3/mpfr/src \
    --with-mpfr-lib=/usr/src/build-gcc/mpfr/src/.libs
# make all-gcc
# make install-gcc
# make all-target-libgcc
# make install-target-libgcc

GCCのビルドには非常に時間が掛かるので,しばらく放置する。

CygwinGDBをビルドする
# cd /usr/src/gdb-6.8
# ./configure --target=i386-jos-elf --program-prefix=i386-jos-elf- --disable-werror
# make
# make install

GCCほどではないものの,こちらもビルドに時間が掛かる。

導入編

QEMU for Windowsを導入

上記のサイトから最新のバイナリをDLし,任意のディレクトリに展開する。
展開したディレクトリには,CygwinからPATHを通す。

$ export PATH="$PATH:/cygdrive/c/qemu-0.13.0-windows" # これは一例

毎回これをやるのは面倒なので,.bashrcにでも書いておく。

xv6を導入

大元のサイトからgitでcloneしてもいいし,上記のサイトからtar.gzをDLして展開してもよい。
任意のディレクトリに展開した後,Cygwinでそのディレクトリに移動してmakeする。

$ cd ~/xv6
$ make
$ make qemu

QEMUの起動時にコケるが,ここまででディスクイメージは作成されている。
次のようにコマンドを実行すればxv6がQEMU上で起動するはず。

$ qemu -hdb fs.img xv6.img -smp 2 -m 512

make qemuで素早く実行したい人は,適宜Makefileを書き換えればよい。

追記(2012-02-11)

Windows 7 Ultimate 64bit(ビルド7601: Service Pack 1),Cygwin 1.7.9(0.237/5/3)の環境下で実行しているので,それ以外の環境でうまく実行できるかどうかはわかりません。

ただ,Cygwin 1.7.10でbinutilsをビルドしようとするとlibiberty/pex-unix.cでビルドエラーが出るみたいなので,その場合は/usr/include/cygwin/process.hを/usr/include以下にコピーして,以下のようにビルドをやり直してください。

# cd /usr/src/binutils-2.21.1
# make distclean
# ./configure --target=i386-jos-elf --disable-nls
# make
# make install

罠多すぎワロタ。