Extended outer memory module
for my poor native memory.
Posts:
2022/02/13 クラビスの CTO になりました
2020/09/28 gendoc という YAML からドキュメントを生成するコマンドを作った
2020/09/13 ISUCON10 の予選を 7 位で通過した
2019/12/01 Puma の内部構造やアーキテクチャを追う
2019/05/27 Golang の正規表現ライブラリの処理の流れをざっくり掴む
2019/04/29 InnoDB の B+Tree Index について
2019/04/29 InnoDB における index page のデータ構造
2019/04/28 InnoDB はどうやってファイルにデータを保持するのか
2019/01/06 Designing Data-Intensive Applications を読んでいる
2019/01/03 年末年始に読んだ本について、など
2019/01/01 Ruby から ffi を使って Rust を呼ぶ
2018/11/10 ブラウザにおける状態の持ち方
2018/07/01 Rust で web アプリ、 或いは Rust における並列処理
2018/05/14 なぜテストを書くのか
2018/05/13 Rust で wasm 使って lifegame 書いた時のメモ
2018/03/12 qemu で raspbian のエミュレート(環境構築メモ)
2018/03/12 qemu で xv6 のエミュレート(環境構築メモ)
2018/03/03 Ruby の eval をちゃんと知る
2018/02/11 Web のコンセプト
2018/02/03 Rspec のまとめ
2018/02/03 Ruby を関数型っぽく扱う
急に qemu で xv6 動かしてみたくなってしまったので、
どうやったら動いたかをメモする
xv6 は MIT の授業で使われてるっぽいシンプルな OS
詳しくは講義ページとか見ると良さそう
–
なので elf binary(バイナリの形式の一つ)を使う
x86(Intel の 32-bit CPU アーキテクチャのこと)用にクロスコンパイルするために
toolchain を揃えなきゃいけないみたい
compiler toolchain に関しては講義ページ内のここに書いてある
そして /usr/local とかにぶち込むので基本的に全部 sudo でやればよさそう
–
–
–
とのことで、他のバージョンも色々試したのち 4.6.4 を入れたらうまくいきました
tar xjf gcc-core-4.6.4.tar.bz2 # 解凍する
cd gcc-4.6.4 # できた dir の中に入る
mkdir build # GCC will not compile correctly unless you build in a separate directory
cd build
# Makefile をつくる
sudo ../configure --prefix=/usr/local \
--target=i386-jos-elf --disable-werror \
--disable-libssp --disable-libmudflap --with-newlib \
--without-headers --enable-languages=c
sudo make all-gcc # いくつか warning とか error は出るが無視した
sudo make install-gcc # This step may require privilege (sudo make install-gcc)
sudo make all-target-libgcc
sudo make install-target-libgcc # This step may require privilege (sudo make install-target-libgcc)
cd ../..
i386-jos-elf-gcc -v # ここで以下のように出れば ok ぽい
# =>
# 組み込み spec を使用しています。
# COLLECT_GCC=i386-jos-elf-gcc
# COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i386-jos-elf/4.6.4/lto-wrapper
# ターゲット: i386-jos-elf
# configure 設定: ../configure --prefix=/usr/local --target=i386-jos-elf --disable-werror --disable-libssp --disable-libmudflap --with-newlib --without-headers --enable-languages=c
# スレッドモデル: single
# gcc バージョン 4.6.4 (GCC)
というわけでなんとか クロスコンパイル用の gcc toolchain が入った
–
使えるようにするまでなかなか面倒みたい
一旦ログイン証明書を作ってそれをシステム証明書に移動させて使う
というやり方をしているwhich gdb
which gdb
あとは簡単で xv6-public のソースを MIT の github からもらってきて
make qemu
とコマンド叩くだけ
こんな感じで起動する
workspace/xv6-public - [master] ( '-') make qemu
dd if=/dev/zero of=xv6.img count=10000
10000+0 records in
10000+0 records out
5120000 bytes transferred in 0.079054 secs (64765760 bytes/sec)
dd if=bootblock of=xv6.img conv=notrunc
1+0 records in
1+0 records out
512 bytes transferred in 0.000030 secs (17043521 bytes/sec)
dd if=kernel of=xv6.img seek=1 conv=notrunc
315+1 records in
315+1 records out
161452 bytes transferred in 0.001818 secs (88810330 bytes/sec)
qemu-system-i386 -serial mon:stdio -drive file=fs.img,index=1,media=disk,format=raw -drive file=xv6.img,index=0,media=disk,format=raw -smp 2 -m 512
xv6...
cpu1: starting 1
cpu0: starting 0
sb: size 1000 nblocks 941 ninodes 200 nlog 30 logstart 2 inodestart 32 bmap start 58
init: starting sh
$ # <- コンソール立ち上がった
ls コマンド
$ ls
. 1 1 512
.. 1 1 512
README 2 2 2290
cat 2 3 12208
echo 2 4 11396
forktest 2 5 7204
grep 2 6 13720
init 2 7 11784
kill 2 8 11348
ln 2 9 11328
ls 2 10 13280
mkdir 2 11 11404
rm 2 12 11388
sh 2 13 21192
stressfs 2 14 11852
usertests 2 15 49048
wc 2 16 12720
zombie 2 17 11136
console 3 18 0
$
起動時に開く qemu のウィンドウから直接叩くことも可能
–
参考: