Linux PCでのエミュレーション


48

Raspberry Pi OSを含むSDカードをLinux PCに接続し、エミュレーターでOSを起動するにはどうすればよいですか?

VMWareが機能しないのはなぜですか?

この方法の制限は何ですか?

関連:Windows PCでのエミュレーション


これはエミュレーションの質問ではなく、仮想化の質問ではありませんか?
ズート・

1
仮想化編集のエミュレーションが気に入らない...チャットできますか?
アレックスチェンバレン

2
基本的な問題は、Piがx86と互換性のないARM CPUを持っていることです。これは、VMWareが実行方法を知っているものです。エミュレータが必要です。
トールビョーンラヴンアンデルセン

Raspbianの多くの機能(デスクトップ環境PIXEL、およびほとんどのアプリケーションを含む)でカスタマイズされたdebianのバージョンは、Raspberry Pi Webサイト
-angussidney

回答:


52

はい、これは完全に可能です。ただし、実際には、考え方とは少し異なります。


前文

SDカードには、オペレーティングシステムのイメージが含まれています。また、デバイスの電源を入れたときにこの画像を拡大することで機能します。

既にご存知のとおり、このイメージをSDカードにフラッシュして、稼働中のシステムを作成します。ただし、イメージをフラッシュする前にできることは、プロセッサーエミュレーターであるQEMUを使用してイメージを試し、ARM命令セットをエミュレートできるようにすることです。

この方法では、SDカードにフラッシュした後でも、イメージに加えた変更(インストール、コンパイルなど)が残っています。

QEMUを使用してイメージをロードする方法について説明します。Arch Linuxイメージでデモを行いますが、プロセスは同じです。


QEMUを使用する

前提条件

システムの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:ここでカーネルイメージをコンパイルする方法を示しますか?

VMの開始

次のものが必要です。

  • 提供されたsha1を使用して確認できるimgファイル(推奨)。
  • カーネルイメージ(zImage)。
  • ARM用QEMU。

仮想マシンは、次の長いコマンドを使用して起動できるようになりました。

qemu-system-arm -kernel zImage -cpu arm1176 -M versatilepb -serial stdio -append "root=/dev/sda2" -hda archlinuxarm-29-04-2012.img -clock dynticks

この方法を使用すると、数百メガバイトのストレージしか使用できないことに注意してください(イメージのスペアは何でも)。仮想ハードディスクは、QEMUユーザーガイドに従って作成できます。


これは私が望んでいたもの以上です-ありがとう!これは素晴らしい参考回答です
アレックスL

@Alex問題ありません。詳しく説明する必要がある場合はお知らせください。また、debianイメージが機能するかどうかを教えてください。異なる場合は指示に追加できます。
-Jivings


@Alexそれは良いものです、私はそれを見ませんでした。
Jivings

2
もう一方は閉じられているので、私ができることは、再開するために投票することです
-Jivings

8

Ubuntu 16.04、QEMU 2.9.0 -M raspi2、Raspbian 2016-05-27、バニラカーネル

ここに画像の説明を入力してください

  1. ソースから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`
    
  2. イメージをダウンロードし、そこからカーネルとdtsを抽出します。

    1. イメージをダウンロードして解凍します。

      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. パーティションの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
      
  3. 実行:

    ./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 raspi2QEMU 2.6.0で追加され、Ubuntu 16.04にはQEMU 2.5.0のみが含まれているため、QEMUをソースからコンパイルする必要があります。しかし、これは難しくありません。
  • GUIは表示されますが、SDLとVNCの両方でテストされたマウス/キーボードに応答しません。ただし、CLIは完全に機能します。そのため、今のところGUIを使用しているLiteイメージを使用することもできます。
  • ネットワーキングなし

Ubuntu 16.04、QEMU 2.5.0、Raspbian 2016-05-27、修正カーネル

このメソッドは-M versatilepb、Ubuntu 16.04のQEMU 2.5.0に存在するものを使用します。

欠点は、変更されたカーネルをダウンロードして(Qemuでエミュレートする:なぜ余分なカーネルを使用するのですか?)、イメージを変更する必要があるため、実際のシステムの代表性が低くなることです。

  1. ダウンロード: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でエミュレートする:なぜ追加のカーネルなのか?

  2. https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5cで言及されているように、Raspbianイメージを変更します。

    概要:

    1. の場合と同様にイメージをマウントします-M raspi2が、最初のパーティションではなく2番目のパーティションを使用します。

      sudo mount /dev/loop0p2 /mnt/rpi
      
    2. 画像を編集します。

      # 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
      
  3. 実行:

    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エミュレーションの実行方法


2
おい、あなたは素晴らしい!
SUBIN

4

Raspberry PiにはほとんどのPCとは異なるプロセッサアーキテクチャがあるため、提案されていることは実行できません。ほとんどのPCはx86ベースですが、RPiはARMベースのコンピューターです。

これは、たとえばMicrosoft WindowsをRPiで実行できない理由と同じ理由です。

VmWareは、x86ベースのオペレーティングシステム(32ビットおよび64ビット)のみを仮想化できるため、機能しません。QEMUなど、ARMを仮想化できるエミュレータは他にもありますが、これらはネイティブCPU仮想化サポートなしで完全なソフトウェアエミュレーションを実行しているため、非常に遅いことが予想されます。


3
x86でRasPi エミュレートする方法(QEMU を使用する方法など)に関する情報を追加していただけますか?説明は大歓迎ですが、私は本当にこの質問に焦点を当てたいと思いました。
アレックスL

3
反対票で申し訳ありませんが、これは質問者が必要とするものを達成する方法を説明していません。
G-。

一方、それは質問の他のポイントではなく、他の回答では対応していません。あなたのdownvotesは無益だと思います(この質問が先導しているというわけではありません)

3
ネイティブのvirtサポートがなくても、おそらくラズベリーパイよりもはるかに強力なマシンで仮想化しているので、スローはかなり相対的です
ケネスウィルケ

0

iotify.ioのセンサー、コマンドライン、およびファイルエディターに含まれているRaspberry Piシミュレーターを簡単に試すことができます。https://docs.iotify.io/にあるドキュメントをチェックして、さまざまなプロジェクト、OSを使い始め、Raspberry Piの作業環境に慣れてください。

ここに画像の説明を入力してください


1
技術的にはこれは答えですが、あなたは私たちのサイトをいくつかの無料広告に非常に明確に使用しています。あなたが提供するものは無料かもしれませんが、それはまだ大丈夫ではありません。コミュニティへの貢献に感謝しますが、広告は他の場所に持って行ってください。
ダースベイダー

4
@DarthVader:ポスターが彼らが製品と提携していることを知らせ、それが質問に答えているので、私はそれを受け入れられると呼びたいです。
Jacobm001
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.