LoginSignup
5
8

More than 5 years have passed since last update.

QEMUに仮想PCIデバイスを追加する(3) : 開発/動作環境

Last updated at Posted at 2015-01-04

開発/動作環境について説明します。

Linux

QEMUで実行するLinuxを用意します。なんでも良いのですが、
頻繁に再起動することになるので
とりあえずBuildroot( http://buildroot.uclibc.org/ )を用いて最小限の環境を用意しました。

Buildrootには各種QEMU用のコンフィギュレーションが
configsディレクトリ以下に用意されているので、これを利用して
必要に応じて変更を加えます。

具体的にはソースコードをダウンロード、展開後に

    make qemu_x86_defconfig // i386 向け
    make menuconfig
        -> toolchain を glibcに (デフォルトではuClibc)
        -> buildoptions の number of jobs を 0 から8に
    make linux-menuconfig
        -> enable loadable module をチェク (デフォルトではoff)
    make

とします。他にも必要があれば make busybox-menuconfig などとします。
上記の通りにmakeを行うとカーネルイメージと(ブートローダを含まない)ext2 ルートファイルシステム(圧縮なし) が output/iamges 以下に作成されます。

このままではルートファイルシステムが小さいので

    dd if=/dev/zero of=image bs=10000 count=100 // (100M)
    mkfs -t ext2 -m 0 image

    mkdir mnt
    sudo mount -o loop,rw -t ext2 image mnt/

などとして適当にディスクイメージを作成、マウントした後にデータをコピーします
(Buildroot の設定からルートファイルシステムのサイズを変更する方法が
分からなかったためこうしました)。

QEMU

自分でコンパイルする必要があるので http://wiki.qemu.org/
よりソースコードをダウンロードしてきます。
単純にconfig, make をするとあらゆるアーキテクチャに対応したQEMUが作成されて
時間がかかるので、

    ./configure --target-list="i386-softmmu"

として、i386 用のみをコンパイルするようにします。実行ファイルは
i386-softmmu/qemu-system-i386 となります。

追加仮想デバイスのコンパイル

hw/char 以下にキャラクタデバイスの実装ファイルがあります。
今回はここに新たに作成したファイル(test_pci_device.c)を置きました。
同ディレクトリにある Makefile.obj に

    obj-$(CONFIG_PCI) += test_pci_device.o

を追加します(因みにi386-softmmu/config-device.mak で CONFIG_PCI=y となっています)。
これにより test_pci_device がmake時に一緒にコンパイルされます。

コンパイルしたQEMUを実行するには、

    qemu-system-i386 \
        -kernel bzImage \
        -hda image \
        -append "console=ttyS0 root=/dev/sda rw panic=1"
        -nographic \
        -no-reboot \
        -device test_pci

などとします(パス/ファイル名は適当に変えてください)。
ブートローダ無しで起動が行えます。
-nographic オプションを使用することでCUI環境のみでQEMUを実行できます。
-no-reboot とカーネルオプション(-append 以下)の panic=1 を利用することで、カーネルパニック1秒後に
QEMUが終了します。作成したPCIデバイスを -device オプションで渡します。

なお、この場合 ctrl-a+c でモニタ画面に移動でき
(GUI 版は alt-ctrl-2)、 ctrl-a+x でQEMUを終了できます。
モニタ画面では各種コマンドを実行できます。例えば、info pci
とタイプすると接続している PCIデバイスの状況が確認できます。


はじめ: (1) 作ったもの

前: (2) 前提知識 (PCI / デバイスドライバ)
次: (4) 仮想デバイス/ドライバの登録

5
8
3

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
5
8