Qemuを使用してRaspberry Piをエミュレートできない:カーネルパニック


15

私は、Fedora 22マシンでRaspberry Piをエミュレートするために、インターネット上のさまざまなガイドに従うことを試みています。私はこの質問を見つけました:QEMUraspbianをエミュレートし、カーネルを取得するkernel -qemuを見つけるためにそれを使用しました。2015-09-24-raspbian-jessie.imgRaspberry Piの良き人々からダウンロードしました。

実行しようとするqemu-system-armと、カーネルパニックが発生します。私が見逃しているものはありますか?

qemu-system-arm入力したコマンドラインは次のとおりです。

qemu-system-arm -cpu arm1176 -m 256 -M versatilepb -no-reboot -nographic -kernel kernel-qemu -appc=2 console=ttyAMA0 rw" -hda 2015-09-24-raspbian-jessie.img -net nic -net user,hostfwd=tcp::9999-:22

カーネルメッセージが続きます。

sd 0:0:0:0: [sda] Attached SCSI disk
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@fluxnic.net>
eth0: SMC91C11xFD (rev 1) at d089a000 IRQ 25 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
mousedev: PS/2 mouse device common for all mice
TCP cubic registered
NET: Registered protocol family 17
input: AT Raw Set 2 keyboard as /devices/fpga:06/serio0/input/input0
input: ImExPS/2 Generic Explorer Mouse as /devices/fpga:07/serio1/input/input1
EXT2-fs (sda2): error: couldn't mount because of unsupported optional features (244)
EXT4-fs (sda2): couldn't mount as ext3 due to feature incompatibilities
EXT4-fs (sda2): recovery complete
EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 8:2.
devtmpfs: mounted
Freeing init memory: 120K
Kernel panic - not syncing: Attempted to kill init!
[<c0032bec>] (unwind_backtrace+0x0/0xf0) from [<c03064dc>] (panic+0x58/0x170)
[<c03064dc>] (panic+0x58/0x170) from [<c0044054>] (do_exit+0x5d0/0x68c)
[<c0044054>] (do_exit+0x5d0/0x68c) from [<c004435c>] (do_group_exit+0x40/0xb0)
[<c004435c>] (do_group_exit+0x40/0xb0) from [<c004ed48>] (get_signal_to_deliver+0x1a8/0x378)
[<c004ed48>] (get_signal_to_deliver+0x1a8/0x378) from [<c002f124>] (do_signal+0x90/0x518)
[<c002f124>] (do_signal+0x90/0x518) from [<c002fa64>] (do_notify_resume+0x48/0x54)
[<c002fa64>] (do_notify_resume+0x48/0x54) from [<c002cc38>] (work_pending+0x24/0x28)

2
wheezyイメージをエミュレートしてみましたか?カーネルが動作する場合は、jessieでなければなりません。
dhruvvyas90

ああ、当たり前!はい、カーネルがimgに一致しない場合、問題が発生します!wheezyイメージは機能します...ありがとう。
マイクS

回答:


4

@dastaan​​が言ったように、カーネルバージョンはimgファイルと一致する必要があります。3.18カーネルで4.1カーネルバージョンのイメージファイルを使用しようとしていました。

適切な画像を使用しているので、動作します。

ありがとう!

編集:これを機能させるのは非常に簡単です:https : //github.com/dhruvvyas90/qemu-rpi-kernel/から画像を取得し、https: //www.raspberrypi.org/から対応するRaspian画像をダウンロードしますdownloads / raspbian /。現在、JessieとWheezyは両方の場所で稼働していますが、適切なカーネルがそのGithubサイトで利用可能になるという保証は今後ありません。いずれにせよ、私は自分自身の速度にあまり感心していなかったので、ラップトップの有線ネットワークポートに実際のPiを置き、5200 mAhの携帯電話の補助バッテリーを介して電源を供給し、ラップトップでVNCを使用してディスプレイ。

私はジェシーを働かせませんでした。それが問題でした-私はWheezyカーネルとJessieのイメージを持っていましたが、Jessieカーネルを持っていませんでした。


1
最新のカーネルを使用してどのように解決したか、詳細な回答を追加できますか?jessieをエミ​​ュレートしようとする他のユーザーを支援します。ありがとう。
dhruvvyas90

3
私はjessieカーネルとjessieイメージを試しましたが、同じエラーで失敗しています。4.1カーネル(github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/…)およびRaspbianからの通常のjessie post 2015年5月。
マイケルマクガラ

攻撃はありませんが、jessieカーネルのようなものはありません。ではraspbian netinstallerあなたはまったく同じカーネルがインストールされる喘鳴やジェシーとの両方のケースでインストールするように選択することができます。
ディーデリックデハース

カーネルの名前がバージョンごとに付けられているのは事実ですが、問題はraspbian netinstallerのダウンロード方法ではありませんでした。私の問題は、Raspberry Piの良き人々の画像ファイルを適切なカーネルバージョンと一致させることでした。将来、この質問にぶつかった人が私のエラーメッセージを見て、自分の問題が何であるかを理解することを願っています。
マイクS

@MichaelMcGarrahは、そのリポジトリのwikiを読んだ後に動作するようになりました:raspberrypi.stackexchange.com/a/53993/33424 Raspbianイメージを少し調整する必要があります。
Ciro Santilli新疆改造中心法轮功六四事件


0

ほとんどのガイドは古く、壊れたリンクが含まれています。使用しているraspbianバージョンと一致するパッチを適用したカーネルを使用する必要があります。

次のガイドは2017年2月時点で機能します。QEMUで実行するためのraspbianイメージの変更を処理するスクリプトを特徴とし、ネットワーク接続をraspbianと自動的に共有します。

https://ownyourbits.com/2017/02/06/raspbian-on-qemu-with-network-access/


0

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


メソッドlosetupは非常に複雑です。代わりにを使用してfdisk -l your-image.imgから、mountオプションのパーティションへのオフセットを使用できます-o loop,offset=$((512*YOUR_OFFSET))
ルスラン

-M raspi2ない仕事
zhaofeng-shu33

-1

Raspbian Jessie用のカスタムカーネル(4.1.7)は、githubのpolaco1782からダウンロードできます。docファイルの指示に従ってください。


1
カーネルは、エミュレートしようとするたびに緊急モードのプロンプトを表示します。read meファイルに書かれているとおりにしました。(最後の投稿を参照してください-> raspberrypi.org/forums/viewtopic.php?t=112259)基本的なjessieイメージで変更した内容を段階的に表示して動作させることができます。jessieイメージがライブになったため、他のユーザーにとっても便利になります。qemuでjessieをエミ​​ュレートするユーザーが増えています。前もって感謝します。
dhruvvyas90

あなたの答えを広げて、あなたのカーネルのカスタムとは何かを説明できますか?
グリーンオンライン

fstabmmcblkエントリにコメントすることで問題を解決できました。
dhruvvyas90

@Greenonline qemuはRpiプラットフォームをサポートしていないため、Qemuでrpiをエミュレートするために必要なカーネル構成の調整が必要です。Rpiカーネルをそのまま使用することはできません。
dhruvvyas90
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.