GNU/Linux >> Linux の 問題 >  >> Linux

QEMU で Raspberry Pi 2 をエミュレートする方法は?

Raspberry Pi 2 ビルド ボットなどを実行したい場合は、Qemu をユーザー/静的モードで実行する方法を検討してください。仮想マシンで Linux を使用してこれを試しましたが、Qemu システム エミュレーションと比較してかなり高速です。残念ながら、これは CPU のみをエミュレートするため、ゲームや Wayland/Weston をテストすることはできません。

この方法を使用して、約 1 時間で Pi 2 用のカーネルを構築できました。


qemu の構築に慣れている場合は、https://github.com/0xabu/qemu で pi2 システム エミュレーションのサポートを見つけることができます。特に高速ではなく、デバイスのエミュレーションは不完全ですが、RAM とフレームバッファのサイズを変更できます。

https://github.com/0xabu/qemu/wiki の最後に Raspbian を起動するための簡単な説明があります


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 .
    cp /mnt/rpi/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 をコンパイルする必要があります。しかし、これは難しいことではありません。
    • SDL と VNC の両方でテストされ、GUI は表示されますが、マウス/キーボードに応答しません。ただし、CLI は完全に機能します。したがって、今のところ go GUI を備えた Lite イメージを使用することもできます。
    • ネットワーキングなし

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

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

    欠点は、変更されたカーネルをダウンロードして (https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel を参照)、イメージを変更する必要があることです。実際のシステムをあまり代表していません。

    <オール>
  • ダウンロード: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

    この追加のカーネル イメージが必要な理由:https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel

  • 次の URL に記載されているように、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 がデフォルトであるため、-M raspi2 のソースから QEMU をコンパイルする必要はありません。 .ただし、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 年 5 月 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)
    

    TODO:sschoof は rootdelay=1 について言及しています これで解決します。試してみる必要があります。

    bztsrc/raspi3-tutorial QEMU 上の RPI3 ベアメタル

    https://github.com/bztsrc/raspi3-tutorial は、QEMU でのみ動作する優れた例のセットです。https://raspberrypi.stackexchange.com/questions/34733/how-to-do- qemu-emulation-for-bare-metal-raspberry-pi-images/85135#85135


    Linux
    1. Linuxがメインフレームに登場した経緯

    2. 自分のディレクトリにR3.3.1をインストールする方法は?

    3. Raspberry Pi 3 で画面を回転させる方法

    1. Ubuntu でホスト名を変更する方法

    2. ターミナルでHZを確認するには?

    3. rpm の内容を抽出するにはどうすればよいですか?

    1. RaspberryPiの電源をオンにしてシャットダウンする方法[絶対的な初心者向けのヒント]

    2. basenameコマンドの使用方法は?

    3. GDB と QEMU を使用して Linux カーネルをデバッグするには?