Raspberry Pi OSを含むSDカードをLinux PCに接続し、エミュレーターでOSを起動するにはどうすればよいですか?
VMWareが機能しないのはなぜですか?
この方法の制限は何ですか?
Raspberry Pi OSを含むSDカードをLinux PCに接続し、エミュレーターでOSを起動するにはどうすればよいですか?
VMWareが機能しないのはなぜですか?
この方法の制限は何ですか?
回答:
はい、これは完全に可能です。ただし、実際には、考え方とは少し異なります。
SDカードには、オペレーティングシステムのイメージが含まれています。また、デバイスの電源を入れたときにこの画像を拡大することで機能します。
既にご存知のとおり、このイメージをSDカードにフラッシュして、稼働中のシステムを作成します。ただし、イメージをフラッシュする前にできることは、プロセッサーエミュレーターであるQEMUを使用してイメージを試し、ARM命令セットをエミュレートできるようにすることです。
この方法では、SDカードにフラッシュした後でも、イメージに加えた変更(インストール、コンパイルなど)が残っています。
QEMUを使用してイメージをロードする方法について説明します。Arch Linuxイメージでデモを行いますが、プロセスは同じです。
システムのQEMUを取得する必要があります。QEMUに必要な要件は1つだけです。入力デバイスを機能させるには、SDL開発パッケージをインストールする必要があります。これはパッケージマネージャーから利用できます。
通常のパッケージマネージャーを使用してパッケージをダウンロードすることをお勧めします。
アーチ:
sudo pacman -S sdl qemu
Ubuntu:
より新しいバージョン(14.04以降)にはパッケージがあります:
sudo apt-get install qemu-system-arm
古いバージョンの場合:
sudo apt-get install libsdl-dev
sudo add-apt-repository ppa:linaro-maintainers/tools
sudo apt-get update
sudo apt-get install qemu-system
自分でQEMUを構築する
または、QEMUを自分でビルドすることもできます。これは、新しいバージョンを試したい場合に最適ですが、時間がかかり、コンパイル中に多くのエラーに備えることができます!WebサイトからQEMUをビルドする場合は、ARMサポート用にコンパイルする必要があることに注意してください。最初にディストリビューションリポジトリを確認してください。これは次のように実行できます。
mkdir rpi-emu && cd rpi-emu
wget http://wiki.qemu.org/download/qemu-1.1.0-1.tar.bz2
tar xvjf qemu-1.1.0-1.tar.bz2
cd qemu-1.1.0-1
./configure –target-list=arm-softmmu,arm-linux-user
make
sudo make install
以下を使用してARMサポートがあることを確認します。
qemu-system-arm --version
QEMU emulator version 1.0,1, Copyright (c) 2003-2008 Fabrice Bellard
私たちはArch Linuxで作業しているので、Arch Armイメージを使用します。ただし、これを使用したいものに置き換えてください。または、すでにイメージを持っている可能性があります。その場合は、この手順をスキップしてください。
wget http://anorien.csc.warwick.ac.uk/mirrors/raspberrypi.org/images/archlinuxarm/archlinuxarm-29-04-2012/archlinuxarm-29-04-2012.zip
unzip archlinuxarm-29-04-2012.zip
QEMUが機能するためには、カーネルイメージ(.imgファイル内にある)も必要です。
注:このステップはDebianには必要ないと思います。誰か確認してください。
幸いなことに、プリコンパイルされた画像が利用可能であり、ここから画像を使用できます(直接ダウンロード)。
TODO:ここでカーネルイメージをコンパイルする方法を示しますか?
次のものが必要です。
仮想マシンは、次の長いコマンドを使用して起動できるようになりました。
qemu-system-arm -kernel zImage -cpu arm1176 -M versatilepb -serial stdio -append "root=/dev/sda2" -hda archlinuxarm-29-04-2012.img -clock dynticks
この方法を使用すると、数百メガバイトのストレージしか使用できないことに注意してください(イメージのスペアは何でも)。仮想ハードディスクは、QEMUユーザーガイドに従って作成できます。
Ubuntu 16.04、QEMU 2.9.0 -M raspi2、Raspbian 2016-05-27、バニラカーネル
ソースからQEMU 2.9.0をコンパイルします。
sudo apt-get build-dep qemu-system-arm
git clone --recursive git://git.qemu-project.org/qemu.git
cd qemu
git checkout v2.9.0
./configure
make `nproc`
イメージをダウンロードし、そこからカーネルとdtsを抽出します。
イメージをダウンロードして解凍します。
wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-05-31/2016-05-27-raspbian-jessie.zip
unzip 2016-05-27-raspbian-jessie.zip
パーティションの2番目のイメージをマウントします。最も簡単な方法は次のとおりです。
sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
これはlosetup
、Ubuntu 16.04の最新バージョン、https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576でのみ機能します
これにより、ループデバイスが出力されます。例:
/dev/loop0
だから私たちは:
sudo mkdir /mnt/rpi
sudo mount /dev/loop0p1 /mnt/rpi
cp /mnt/rpi/kernel7.img bcm2709-rpi-2-b.dtb .
sudo umount /mnt/rpi
sudo losetup -d /dev/loop0
実行:
./arm-softmmu/qemu-system-arm \
-M raspi2 \
-append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2" \
-cpu arm1176 \
-dtb bcm2709-rpi-2-b.dtb \
-sd 2016-05-27-raspbian-jessie.img \
-kernel kernel7.img \
-m 1G \
-smp 4 \
-serial stdio \
;
その後、ホスト端末に表示される端末にログインできます。
現在の制限:
-M raspi2
QEMU 2.6.0で追加され、Ubuntu 16.04にはQEMU 2.5.0のみが含まれているため、QEMUをソースからコンパイルする必要があります。しかし、これは難しくありません。Ubuntu 16.04、QEMU 2.5.0、Raspbian 2016-05-27、修正カーネル
このメソッドは-M versatilepb
、Ubuntu 16.04のQEMU 2.5.0に存在するものを使用します。
欠点は、変更されたカーネルをダウンロードして(Qemuでエミュレートする:なぜ余分なカーネルを使用するのですか?)、イメージを変更する必要があるため、実際のシステムの代表性が低くなることです。
ダウンロード:https : //github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie
4.4.12
それがRaspbianイメージのカーネルバージョンであるため、選択します。
そのカーネルBLOBを生成するプロセスは、リポジトリのhttps://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/toolsで説明されています。
なぜこの追加のカーネルイメージが必要なのか:Qemuでエミュレートする:なぜ追加のカーネルなのか?
https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5cで言及されているように、Raspbianイメージを変更します。
概要:
の場合と同様にイメージをマウントします-M raspi2
が、最初のパーティションではなく2番目のパーティションを使用します。
sudo mount /dev/loop0p2 /mnt/rpi
画像を編集します。
# Comment out the line present there with #
sudo vim /mnt/rpi/etc/ld.so.preload
# Comment out the lines of type: "/dev/mmcblk*"
sudo vim /mnt/rpi/etc/fstab
実行:
sudo apt-get install qemu-system-arm
qemu-system-arm \
-kernel kernel-qemu-4.4.12-jessie \
-cpu arm1176 \
-m 256 \
-M versatilepb \
-no-reboot \
-serial stdio \
-append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
-hda 2016-05-27-raspbian-jessie.img
[失敗] Ubuntu 17.04、QEMU 2.8.0 -M raspi2、Raspbian 2016-05-27、バニラカーネル
この新しいUbuntuでは、QEMU 2.8.0がデフォルトであるため、QEMUをソースからコンパイルする必要はありません-M raspi2
。ただし、次のメッセージの後、起動時に2.8.0がハングします。
Console: switching to colour frame buffer device 100x30
これは、どれだけ不安定かを示しています-M raspi2
。
[失敗] Ubuntu 16.04、QEMU 2.9.0 -M raspi2、Raspbian 2017-08-16、バニラカーネル
この新しいイメージでは、2016-05-27と同じ方法を使用して、ブート時にカーネルがパニックになります:
Please append a correct "root=" boot option; here are the available partitions:
...
[ 4.138114] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
bztsrc/raspi3-tutorial
QEMUのRPI3ベアメタル
https://github.com/bztsrc/raspi3-tutorialは、QEMUで動作する優れたサンプルセットです。非常に簡単に始められます:ベアメタルRaspberry PiイメージのQEMUエミュレーションの実行方法
Raspberry PiにはほとんどのPCとは異なるプロセッサアーキテクチャがあるため、提案されていることは実行できません。ほとんどのPCはx86ベースですが、RPiはARMベースのコンピューターです。
これは、たとえばMicrosoft WindowsをRPiで実行できない理由と同じ理由です。
VmWareは、x86ベースのオペレーティングシステム(32ビットおよび64ビット)のみを仮想化できるため、機能しません。QEMUなど、ARMを仮想化できるエミュレータは他にもありますが、これらはネイティブCPU仮想化サポートなしで完全なソフトウェアエミュレーションを実行しているため、非常に遅いことが予想されます。
iotify.ioのセンサー、コマンドライン、およびファイルエディターに含まれているRaspberry Piシミュレーターを簡単に試すことができます。https://docs.iotify.io/にあるドキュメントをチェックして、さまざまなプロジェクト、OSを使い始め、Raspberry Piの作業環境に慣れてください。