• WindowsでRaspbian Jessieをエミュレートしてみた

    QEMUでRaspbian Jessieをエミュレート

    不定期更新がモットーの蒼空和音です。

    今回はRaspberry Pi上で動作するLinux、RaspbianをWindows上でエミュレートしてみました。
    何番煎じかわかりませんが、Debian8 (Jessie)ベースでの記事があまり見当たらなかったので書いてみました。

    1.必要なものを用意

    RaspbianをWindows(というよりはx86、x86_64環境)で実行するには下記のものが必要になります。

    • QEMU for Windows(CPUなどのハードウェアをエミュレーションするソフト)
    • QEMU用のLinuxカーネル(現在4.1.7+4.1.13+が利用可能。どっちゃでも。)
    • RASPBIAN JESSIE」または「RASPBIAN JESSIE LITE」のディスクイメージ
    • Linuxの動作環境(ディスクイメージを編集するので、物理or仮想マシンを用意)

    ①QEMU for Windowsのダウンロード

    https://qemu.weilnetz.de/のw32またはw64から環境に応じてQEMUをダウンロードしてください。
    最新版は基本的に下のほうにあります。ちょくちょく更新されています。
    ダウンロードしたファイルを実行するとインストーラが起動するのでさくっとインストール。

    QEMUはコマンドプロンプトから実行しますので、パスを通しておきましょう。
    デフォルトのC:\Program Files\qemuにインストールした場合は、次の手順で環境変数設定画面を開きます。

    コントロールパネル⇒(アイコン表示で)システム⇒システムの詳細設定⇒詳細設定⇒環境変数(N)…

    検索バーに「システム環境変数の編集」と入力して検索⇒環境変数(N)…でもOK。

    続いて、ユーザ環境変数に「新規(N)…」で次の値を追加します。

    変数名(N): Path
    変数値(V): C:\Program Files\qemu

    もちろん、システム環境変数のPathの末尾に追加してもOKです。(間違って消しちゃうとアレなのでさわらないようにしてます…)

    ②QEMU用カーネルのダウンロード

    kernel-qemu-4.1.7-jessieまたはkernel-qemu-4.1.13-jessieをダウンロードします。
    「View Raw」をクリックするとダウンロードできます。

    以下カーネルファイル名は「kernel-qemu-4.1.13-jessie」とします。

    ③ディスクイメージのダウンロード

    Linux環境下で編集するので、そちらでダウンロードしたほうが良いです。https://www.raspberrypi.org/downloads/raspbian/よりダウンロードします。
    RASPBIAN JESSIEがデスクトップあり、RASPBIAN JESSIE LITEがコマンドラインのみです。

    ダウンロード後zipを解凍しておきましょう。

    以下ディスクイメージファイル名は執筆時点の「2016-03-18-raspbian-jessie.img」とします。

     ④ディスクイメージの編集

    Linuxの環境下でディスクイメージをマウント後編集するのですが、先にディスクの状態を確認しておきます。

    fdisk -l 2016-03-18-raspbian-jessie.img

    Debian系だと通常ユーザだとfdiskのパスが通っていないので注意です…。
    rootだと通っていました。
    コマンドの結果が次のような感じです。

    Disk 2016-03-18-raspbian-jessie.img: 3.8 GiB, 4033871872 bytes, 7878656 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x8f1eafaf
    Device                          Boot  Start     End Sectors  Size Id Type
    2016-03-18-raspbian-jessie.img1        8192  131071  122880   60M  c W95 FAT32 (
    2016-03-18-raspbian-jessie.img2      131072 7878655 7747584  3.7G 83 Linux
    編集したいファイルは.img2のほうにあります。
    1セクタが512B、img2が131072セクタから始まるので512*131072=67108864B分オフセットしてからマウントします。
    ここでは/mntにマウントすることにします。
    mount -v -o offset=67108864 -t ext4 2016-03-18-raspbian-jessie.img /mnt
    マウント後、次の表のように編集します。
    ファイル 編集内容
    /mnt/etc/ld.so.preload 全ての行頭に#を付けてコメントアウト
    (/usr/lib/arm-linux-gnueabihf/libarmmem.soの1行)
    /etc/fstab /dev/mmcblkの記載のある行すべてに#を付けてコメントアウト
    (/dev/mmcblk0p1と/dev/dev/mmcblk0p2の2行)

    当方の環境ではld.so.preloadはTABキーのファイル名補完で出てきませんでした。
    そういうもんなのでしょうか。直接フルパスを入力しました。
    編集完了後、アンマウントします。

    cd ~/
    umount /mnt

    アンマウント後、ディスクイメージをWindowsへ転送しておきます。

    2.ディスクイメージの拡張

    そのままではRaspberry Piに導入したてと同じで空き容量がほとんどありません。
    実機ではSDカードをめいいっぱい使えるようにしますが、エミュレーションではディスクイメージを拡張しておきます。

    念のため現在のディスクサイズを調べておきましょう。

    qemu-img info 2016-03-18-raspbian-jessie.img

    image: 2016-03-18-raspbian-jessie.img
    file format: raw
    virtual size: 3.8G (4033871872 bytes)
    disk size: 3.8G

    下記コマンドでディスクを拡張します。今回は2GB分広げます。

    qemu-img resize 2016-03-18-raspbian-jessie.img +2GB

    ごちゃごちゃ怒られますが…気にせず、サイズが変わっているか確認します。

    qemu-img info 2016-03-18-raspbian-jessie.img

    image: 2016-03-18-raspbian-jessie.img
    file format: rawvirtual size: 5.8G (6181355520 bytes)
    disk size: 5.8G

    3.QEMUを起動

    下記コマンドでQEMUを起動します。

    qemu-system-arm -kernel kernel-qemu-4.1.13-jessie -cpu arm1176 -m 256 -M versatilepb -serial stdio -append “root=/dev/sda2 rootfstype=ext4 rw panic=1” -hda “2016-03-18-raspbian-jessie.img” -redir tcp:10022:10.0.2.15:22

    GUIの場合立ち上がるまでに結構時間がかかる場合があります。

    末尾の-redir tcp:10022:10.0.2.15:22はTera TermからSSH接続するためのポートフォワードです。Tera Termからはホスト名「localhost」ポート番号「100022」で接続します。
    初期設定では、ゲストはDHCPでIPを取得しているので、場合によってはIPがかわってしまうかも…。
    また、Windows Firewallを使用中の環境だと初回は警告が出るかもしれません。

    これでとりあえずRaspbianを触れる状態になりました。

    4.ストレージの拡張

    初期のままではディスクの空き容量が100MBほどしかないので、拡張しておきます。
    ディスクイメージは2.で拡張しましたが、パーティションとファイルシステムレベルでの拡張を行う必要があります。
    なお、raspi-configの「Expand root partition to fill SD card」は使えませんでした。

    QEMUの中のRaspbianのTerminalで以下を実行していきます。

    ①パーティションの拡張

    現在のパーティション情報を確認します。

    sudo fdisk -l /dev/sda

    Disk /dev/sda: 5.8 GiB, 6181355520 bytes, 12072960 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x8f1eafaf
    Device     Boot  Start      End  Sectors  Size Id Type
    /dev/sda1         8192   131071   122880   60M  c W95 FAT32 (LBA)
    /dev/sda2       131072 7878655 7747584  3.7G 83 Linux
    ルートがマウントされている/dev/sdaのパーティションを一度削除し、End Sectorを拡大したものを再度作成します。
    sudo fdisk /dev/sda
    Welcome to fdisk (util-linux 2.25.2).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    Command (m for help): d
    Partition number (1-2): 2
    Partition 2 has been deleted.
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended (container for logical partitions)
    Select (default p): p
    Partition number (1-4, default 2): 2
    First sector (2048-12072959, default 2048): 131072
    Last sector, +sectors or +size{K,M,G,T,P} (131072-12072959, default 12072959):12072959
    Created a new partition 2 of type ‘Linux’ and of size 5.7 GiB.
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Re-reading the partition table failed.: Device or resource busy
    The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
    パーティションの変更が完了したら再起動します。
    sudo reboot

    ②ファイルシステムの拡張

    以下のコマンドを実行します。すぐです。

    sudo resize2fs /dev/sda2

    以上でストレージの拡張は完了です。
    空き容量ができたかは次のコマンドで確認できます。

    df -h

    あとはご自由に。

    ストレージ拡張後のRaspbianのターミナル

    3.あとがき

    全体的にかなりもっさりとした印象でした…。
    当方のPCがわりと非力なだけかもしれませんが、GUIは結構重かったです。
    QEMU自体初めて使ったものですから、やり方によっては軽くできるかもです。


    【参考記事】

    「意識低い開発者のblog」   Yusuke Miyazaki氏
    Raspberry Pi を QEMU でエミュレートする方法 (2015年7月更新)

    「意識低い開発者のblog」   Yusuke Miyazaki氏
    Raspberry Pi のイメージファイルを拡張する

    qemu-rpi-kernel Wiki GitHub   Dhruv Vyas氏
    Emulating Jessie image with 4.1.x kernel

    カテゴリー: Linux, Raspberry Pi, Windows, 技術系

    タグ: , , , ,

    WindowsでRaspbian Jessieをエミュレートしてみた」への2件のフィードバック

    コメントを残す

    メールアドレスが公開されることはありません。

    計算式の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.