4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

東京大学 品川研究室Advent Calendar 2020

Day 6

Bochsの使い方

Last updated at Posted at 2020-12-05

Bochs

http://bochs.sourceforge.net/
Bochsはx86のエミュレータで,初期の386プロセッサから市場に流通していないような最新のCPUまでを(:astonished:)エミュレートすることができます.
Intelの中の人がメンテナンスをしているようです.
現在でも頻繁に更新されていて,helpに質問を投げると割とすぐ返してくれたりしました.

使い方

手順

Bochs本体のインストール

最新版はこのページ
このページの最後にSVNスナップショットも乗っていました.
コンフィグのオプションとして,

./configure --enable-vmx=2 \\
            --enable-x86-64 \\
            --enable-all-optimizations \\
            --enable-long-phy-address \\
            --enable-avx \\
            --enable-cpu-level=6 \\
            --enable-configurable-msrs \\
            --enable-fpu \\
            --enable-alignment-check \\
            --enable-svm \\
            --with-all-libs \\
            --enable-e1000 \\
            --enable-evex \\
            --enable-gdb-stub

を渡しました.--enable-vmx=2でeptの有効化,--enable-x86-64でx86-64の有効化,--enable-e1000でe1000の有効化ができます.
そのほかのオプションはbochs内で現在一番機能のあるcpumodelであるcorei7_icelake_uを動作させるために有効化しました.

イメージの取得

公式に配布されているイメージもあるのですが,
このページでDebian Jessieインストール済みのディスクイメージが公開されているので,これを使うのが楽かと思います.
これらのイメージのユーザーはこのようになってます.

Username: root
Password: toor

Username: bochs
Password: bochs

ディスクイメージからOSをインストールするのは(大変だと思うので)あまりお勧めではないです. 自分はうまく動かせませんでした...

bochsrcの準備

Bochsではエミュレートするマシンの情報をbochsrcというファイルに記述します.
自分はこちらのDebian Jessie起動用bochsrcを参考に

bochsrc
info: action=report

romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
cpu: model=corei7_icelake_u, ips=1200000000
cpuid: x86_64=1, vmx=2, 1g_pages=1, pcid=1
clock: sync=realtime
megs: 2048
boot: disk

# gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0

# Hard disks.
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="DebianJessie64.img", cylinders=4161, heads=8, spt=63

# network
pci: enabled=1, chipset=i440fx

## linux
#e1000: mac=52:54:00:12:34:56, ethmod=linux, ethdev=enp0s25

# socket
e1000: mac=52:54:00:12:34:56, ethmod=socket, ethdev=40000, script=''

詳しい書き方は[マニュアル] (http://bochs.sourceforge.net/doc/docbook/user/bochsrc.html)を参照するのが良いと思います.
基本的にはcpuのモデルに基づいて使える機能が決まりますが,cpuidで細かく設定することもできるようです.
ネットワークインタフェースに関してはBochsのマニュアルに書いてありますが,インターネットにつなぎたいときはlinuxを,bochs間で通信させたいときはsocketを使いました.(それしかうまく動かなかったので...)
あと,gdbstubの行のコメントアウトを外すと,gdbを使ってデバッグができるようになります.

起動

bochsrcとイメージを用意したら,それらと同一のディレクトリでbochsコマンドをたたけばbochsのウィンドウが現れ,起動すると思います.

Tips

Diskの操作

Diskにファイルをコピーしたいときは,自分はマウントして直接操作しました.

mount -t ext4 -o loop,rw,offset=1048576 DebianJessie64.img.backup disk

でマウントできると思います.
また,カーネルモジュールのコンパイルやファイルのダウンロードなどはマウント先ディレクトリにchrootして行いました.
もしもっといい方法があれば教えてください.

イメージのリサイズ

  1. qemu-imgでファイルサイズを拡大
qemu-img resize DebianJessie64.img +40G
  1. partedでパーティションを変更
$ parted DebianJessie64.img
(parted) unit s
(parted) resizepart 2 -1s
(parted) q
  1. resize2fsで拡大したパーティションをext2fsでフォーマット
$ losetup -f 
$ sudo mount -t ext2 -o loop,rw,offset=1048576 DebianJessie64.img disk
$ sudo resize2fs /dev/loop??
$ sudo umount disk

のようにしてイメージのリサイズを行いました.

ネットワーク

前述のとおり,ネインターネットにつなぎたいときはlinuxを,bochs間で通信させたいときはsocketを使いました.
また,socketを使いたいときにはbxhubのプロセスが立ち上がっている必要があります.

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?