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