23
29

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 5 years have passed since last update.

QEMU for windowsでRaspbian Jessieを動作させる

Posted at

以前、QEMUでRaspbian Wheezyを動作させましたが、Raspbian Jessieはできませんでした。いろいろ試行錯誤していましたが、以下のページの手順で動作させることができたので、作業手順をまとめます。

Emulating Jessie image with 4.1.x kernel · dhruvvyas90/qemu-rpi-kernel Wiki

動作させる目的

自宅でRaspberry Pi Model B+が元気に動作していますが、これに変更を加える前に動作確認する環境が欲しいです。一般的なOSであれば、普通にVagrant+VirtualBoxやDockerを使用しますが、ARMプロセッサが前提のRaspbianでは簡単にはできません。当記事は、その環境を作るための作業手順です。

ちなみに、元々はRaspbian+Dockerの動作確認環境が欲しかったための作業でしたが、後述しますがDockerは動作できませんでした。

ダウンロード

この作業で作成したパッケージは、GitHubで公開しています。

作業環境

  • Surface Pro 4 + Windows 10
    • qemu-system-armが動作すれば、この環境でなくても問題無いはずです。
  • Vagrant 1.8.1 + VirtualBox
    • Raspbianイメージをマウントするために必要ですが、.img内を編集できるのであれば不要です。
  • QEMU 2.4.1 on Windows
  • Raspbian Jessie 2016/2/26版

作業手順

Qemu、Raspbian、カーネルイメージをダウンロード

QEMUは、Windows用にビルドされたアプリをダウンロードします。記事執筆時点ではQemu-2.4.1-windows.7zが最新です。

Qemu On Windows

Raspbianをダウンロードします。記事執筆時点では2016-02-26-raspbian-jessie.zipが最新です。

Download Raspbian for Raspberry Pi

NOTE: 旧バージョンのRaspbianがページに表示されていませんが、 https://downloads.raspberrypi.org/ から旧バージョンをダウンロードできるっぽいです。

RaspbianをQEMUで動作させるために必要なカーネルイメージをダウンロードします。Jessie用をダウンロードしてください。記事執筆時点ではkernel-qemu-4.1.13-jessieが最新です。

dhruvvyas90/qemu-rpi-kernel: Qemu kernel for emulating Rpi on QEMU

ダウンロードしたファイルは、全てC:\raspbian-jessie-on-qemu\に置きます。

ダウンロードしたファイルを展開

ダウンロードしたファイルを展開します。フォルダ・パスを決め打ちにしていますが、別フォルダでも問題ありません。

Qemu-2.4.1-windows.7zC:\raspbian-jessie-on-qemu\qemu\に展開します。C:\raspbian-jessie-on-qemu\qemu\以下にQemuのファイル群が展開されている状態になります。

2016-02-26-raspbian-jessie.zipC:\raspbian-jessie-on-qemu\raspbian\に展開します。

kernel-qemu-4.1.13-jessieC:\raspbian-jessie-on-qemu\raspbian\に移動します。

これで、以下のようなファイル構成になります。

C:\
+---raspbian-jessie-on-qemu\
    +---qemu\
    |   +---qemu-system-arm.exe などQemuのファイル群
    +---raspbian\
        +---2016-02-26-raspbian-jessie.img
        +---kernel-qemu-4.1.13-jessie

Raspbianイメージを変更

Raspbianはこのままでは起動できません。起動できるように内部を編集します。この作業でVagrant+VirtualBoxを使用します。Raspbianイメージをマウントできて内部を編集できるのであれば、別の手段で問題ありません。

コマンドプロンプトを開き、C:\raspbian-jessie-on-qemu\raspbian\まで移動して、Vagrantを起動します。

cd C:\raspbian-jessie-on-qemu\raspbian\
vagrant init ubuntu/trusty64
vagrant up
vagrant ssh

Vagrantは、デフォルトでVagrantfileがあるフォルダを/vagrant/にマウントします。つまり、/vagrant/2016-02-26-raspbian-jessie.imgにRaspbianイメージがあります。このRaspbianイメージをマウントします。

$ sudo mount -v -o offset=67108864 -t ext4 /vagrant/2016-02-26-raspbian-jessie.img /mnt/

/mnt/etc/ld.so.preloadを開きます。

$ sudo vi /mnt/etc/ld.so.preload

1行目をコメントアウトします。

/usr/lib/arm-linux-gnueabihf/libarmmem.so
↓
#/usr/lib/arm-linux-gnueabihf/libarmmem.so

/mnt/etc/fstabを開きます。

sudo vi /mnt/etc/fstab

/dev/mmcblkを含む行をコメントアウトします。

/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
↓
#/dev/mmcblk0p1  /boot           vfat    defaults          0       2
#/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

exitして、Vagrantを破棄します。

vagrant destroy -f
rm Vagrantfile
rmdir /S /Q .vagrant

これで、Raspbianイメージの変更は完了です。

Raspbianを起動

QEMUでRaspbianを起動します。コマンドが長いので、起動バッチ・ファイルを作成します。C:\raspbian-jessie-on-qemu\run.batを以下のように作成します。

qemu\qemu-system-arm.exe -kernel raspbian\kernel-qemu-4.1.13-jessie -cpu arm1176 -m 256 -M versatilepb -serial stdio -append "root=/dev/sda2 rootfstype=ext4 rw" -hda raspbian\2016-02-26-raspbian-jessie.img -redir tcp:50022::22

作成したrun.batを実行します。問題が無ければ、以下のようにRaspbianが起動します。

raspbian-startup

初期ユーザーはpi、パスワードはraspberryです。

上記のバッチ・ファイルに-redir tcp:50022::22というオプションが指定されているため、50022番ポートでssh接続ができます。

Raspbian Liteの場合

以上の作業をRaspbian Liteで行うと、以下のように起動します。

raspbian-lite-startup

おまけ:Raspbian Jessie on qemuでDockerを動作させようとして失敗したメモ

$ apt-cache show docker.io
Package: docker.io
Version: 1.3.3~dfsg1-2
Architecture: armhf
Maintainer: Paul Tagliamonte <paultag@debian.org>
Installed-Size: 14970
Depends: adduser, iptables, init-system-helpers (>= 1.18~), perl, libapparmor1 (>= 2.6~devel), libc6 (>= 2.14), libdevmapper1.02.1 (>= 2:1.02.90), libsqlite3-0 (>= 3.5.9)
Recommends: aufs-tools, ca-certificates, cgroupfs-mount | cgroup-lite, git, xz-utils
Suggests: btrfs-tools, debootstrap, lxc, rinse
Breaks: docker (<< 1.5~)
Replaces: docker (<< 1.5~)
Built-Using: golang-context (= 0.0~git20140604.1.14f550f-1), golang-dbus (= 1-1), golang-go-patricia (= 1.0.1-1), golang-go-systemd (= 2-1), golang-go.net-dev (= 0.0~hg20131201-1), golang-gocapability-dev (= 0.0~git20140516-1), golang-gosqlite-dev (= 0.0~hg20130601-1), golang-mux (= 0.0~git20140505.1.136d54f-2), golang-pty (= 0.0~git20140315.1.67e2db2-1)
Homepage: https://github.com/docker/docker
Priority: optional
Section: admin
Filename: pool/main/d/docker.io/docker.io_1.3.3~dfsg1-2_armhf.deb
Size: 3081622
SHA256: c5808c63bb28259d8bc4d13dad0b3c04675ec4abcf1b7bc18b07979d525fc62b
SHA1: 186f392e650ef2d71b9ba7f01078dc35ae3cca95
MD5sum: e6e16890ff92228a4607eb1a040e78c7
Description: Linux container runtime
 Docker complements kernel namespacing with a high-level API which operates at
 the process level. It runs unix processes with strong guarantees of isolation
 and repeatability across servers.
 .
 Docker is a great building block for automating distributed systems:
 large-scale web deployments, database clusters, continuous deployment systems,
 private PaaS, service-oriented architectures, etc.
 .
 This package contains the daemon and client. Using docker.io on non-amd64 hosts
 is not supported at this time. Please be careful when using it on anything
 besides amd64.
 .
 Also, note that kernel version 3.8 or above is required for proper operation of
 the daemon process, and that any lower versions may have subtle and/or glaring
 issues.
Description-md5: 05dc9eba68f3bf418e6a0cf29d555878

docker.ioがインストールできるので、早速、インストールして簡単なコマンドを実行したところ、エラーになってしまいました…

$ sudo docker run ubuntu /bin/echo 'Hello world'
2016/03/07 05:36:01 Post http:///var/run/docker.sock/v1.15/containers/create: read unix /var/run/docker.sock: connection reset by peer

そもそもインストールされたバージョンが古いですし、別の手段を探すこととします。

ライセンス

RaspbianはDFSGで提供されています。

QEMUはGPL v2で提供されています。

この文章の作業手順で作成してGitHubで公開しているパッケージは、RaspbianとQEMUのライセンスに準拠します。

クリエイティブ・コモンズ・ライセンスこの文章はクリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。この文章に書いてある内容は無保証であり、自己責任でご利用ください。

23
29
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
23
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?