Hier habe ich ein Bild von Raspberry Pi (neu gestaltet). Nennen wir espi2-16gb.img
Emulieren Sie ARM Raspberry Pi 2 Modell B v1.1 auf einem Ubuntu-PC
Jetzt möchte ich es emulieren, bevor ich es physisch in einen Pi 2 einfüge.
Ich habe ein Startskript start_arm_pi.sh
wie folgt erstellt:
#!/bin/bash
# Starts raspberry pi image in configuration mode
qemu-system-arm -kernel ./boot_for_pi2/kernel.img \
-cpu arm1176 -m 1024 \
-M versatilepb -no-reboot -serial stdio \
-append "root=/dev/mapper/crypt_sdcard cryptdevice=/dev/mmcblk0p2:crypt_sdcard panic=1 rootfstype=ext4 rw init=/bin/bash" \
-hda /path/to/pi2-16gb.img
Aber mit Fehler:
pulseaudio: set_sink_input_volume() failed
pulseaudio: Reason: Invalid argument
pulseaudio: set_sink_input_mute() failed
pulseaudio: Reason: Invalid argument
Über das Bild
Tatsächlich gibt es zwei Partitionen der Bilddatei pi2-16gb.img
.
/boot/
von /dev/mmcblk0p1
und /
von /dev/mmcblk0p2
. Das /dev/mmcblk0p2
wird aber durch LUKS-Verschlüsselung verschlüsselt .
Das kernel.img
wird von der unverschlüsselten Partition abgeleitet/dev/mmcblk0p1
Alle Dateien in der Partition /dev/mmcblk0p1
(werden wie /boot/
in diesem Bild bereitgestellt bereitgestellt.
Und ich denke, die Datei cmdline.txt und die Datei config.txt können hilfreich sein.
Inhalt von cmdline.txt
dwc_otg.fiq_fix_enable = 0 console = ttyAMA0,115200 kgdboc = ttyAMA0,115200 console = tty1 lift = Deadline root = / dev / mapper / crypt_sdcard cryptdevice = / dev / mmcblk0p2: crypt_sdcard rootfstype = ext4 rootwait
Inhalt von config.txt
initramfs initramfs.gz 0x00f00000 hdmi_ignore_hotplug = 1
Haben Sie einige Ideen, die Pi auf meinem Ubuntu-PC emulieren?
Vielen Dank, eine Million!
Aktualisiert
Ich hatte einen physischen Pi 2, auf dem dieses Bild ausgeführt wurde.
Und von der seriellen TTL-Schnittstelle (Tx, Rx) erhielt ich folgende Nachrichten:
Pastebin (Punkt) com / Y7Xg5WRg
Es wurde eine Infozeile zum Kernel-Befehl gefunden:
[0.000000] Kernel-Befehlszeile: dma.dmachans = 0x7f35 bcm2708_fb.fbwidth = 656 bcm2708_fb.fbheight = 416 bcm2709.boardrev = 0xa21041 bcm2709.serial = 0x2925606f smsc95xx.macadf: B: 25: = 1 bcm2709.disk_led_gpio = 47 bcm2709.disk_led_active_low = 0 sdhci-bcm2708.emmc_clock_freq = 250000000 vc_mem.mem_base = 0x3dc00000 vc_mem.mem_size = 0x3f000000 dwc_0 = root = / dev / mapper / crypt_sdcard cryptdevice = / dev / mmcblk0p2: crypt_sdcard rootfstype = ext4 rootwait
Wird das hilfreich sein?
Aktualisiert
Ich hatte festgestellt, dass qemu
Raspberry Pi 2 ab Version 2.6.0 gemäß seiner Dokumentseite unterstützt wird: wiki.qemu (dot) org / ChangeLog / 2.6
Also habe ich qemu
Version 2.6.0 auf meinem Ubuntu 14.04 x86_64 PC kompiliert . Und ich habe es mit diesem Befehl gestartet.
/usr/local/src/qemu-2.6.0/bin/debug/native/arm-softmmu/qemu-system-arm \
-kernel /path/to/boot_for_pi2/kernel7.img \
-cpu arm1176 -m 256 \
-M raspi2 \
-no-reboot \
-serial stdio \
-sd /path/to/pi2-16gb.img \
-append "dwc_otg.fiq_fix_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 elevator=deadline root=/dev/mapper/crypt_sdcard cryptdevice=/dev/mmcblk0p2:crypt_sdcard rootfstype=ext4"
Und hier ist jetzt die Ausgabe.
WARNING: Image format was not specified for '/path/to/pi2-16gb.img' and probing guessed raw.
Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
Specify the 'raw' format explicitly to remove the restrictions.
Uncompressing Linux... done, booting the kernel.
Aber es hörte hier auf und das Qemu-Fenster ist schwarz mit nichts ...
Bedeutet das, dass etwas mit dem Kernel nicht stimmt?
Die Datei kernel7.img
wird /boot/
tatsächlich von ihrer Partition abgeleitet .
Aktualisiert
Ich habe den Emulator erfolgreich gestartet, aber mit einem Fehler ...
/usr/local/src/qemu-2.6.0/bin/debug/native/arm-softmmu/qemu-system-arm \
-kernel /path/to/kernel-qemu-4.4.11-jessie \
-m 256 \
-cpu arm1176 \
-M versatilepb \
-no-reboot \
-serial stdio \
-hda /media/alex/F049-1FB6/2016-05-27-raspbian-jessie.img \
-append "dwc_otg.lpm_enable=0 root=/dev/sda2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait init=/bin/bash" \
Der Treiber kann montiert werden. Hier habe ich es mit einem neuesten rasbianischen Bild getestet2016-05-27-raspbian-jessie.img
Der Qemu-Kernel, den ich verwendet habe, stammt von:
github (dot) com / dhruvvyas90 / qemu-rpi-kernel
Aber ich hatte eine Kernel-Panik ...
Hier ist der Fehler im Detail.
quelle
#!
und dem ein Leerzeichen vorhanden ist./bin/bash
Ich glaube, der Leerzeichen ist erforderlich, damit Ihr Skript funktioniert.qemu
2.6 einstellen ?Antworten:
Es ist mir gelungen, Raspbian Jessie Lite auf Kubuntu 14.04 zu starten, nachdem ich QEMU aus git kompiliert hatte. Es gibt jedoch ein kleines Problem: Ich habe die Tastatureingabe nicht zum Laufen gebracht (ich muss stattdessen ein virtuelles serielles Terminal verwenden).
Wie auch immer, hier ist was ich getan habe:
1) Kompilieren Sie QEMU aus Git (passen Sie die Konfigurationsoptionen an Ihre Bedürfnisse an, aber diese haben für mich gut genug funktioniert):
2) Bestimmen Sie das Layout der Raspbian-Bildpartition:
3) Die erste Partition des Mount Raspbian-Images unter Berücksichtigung der oben angegebenen Zahlen für den Beginn der Partitionen (Sektor 8192 für Partition 1):
4) Nehmen Sie von dort die erste cmdline.txt sowie den richtigen Kernel und die richtige
.dtb
Datei:5) Hängen Sie das Bild aus:
6) Um zu verhindern, dass sich der Kernel beschwert, dass die Root-Partition über die SD-Kartengröße hinausgeht, fügen Sie dem Image ein paar Nullen hinzu (hier wähle ich 2 GiB - dies ist ein bisschen übertrieben, tut aber nicht weh, passen Sie es an Bedürfnisse):
7) Endlich können wir einen ersten Start durchführen, bei dem das anfängliche Skript die Größe des Dateisystems an das gesamte Gerät anpasst:
Der Kernel kann nicht zurückgesetzt werden. Wenn er gedruckt wird
sysrq: SysRq: Resetting
, beenden Sie QEMU einfach über Strg + C oder schließen Sie das Fenster.8) Mounten Sie die Boot-Partition erneut und kopieren Sie die aktualisierte
cmdline.txt
:9) Starten Sie abschließend QEMU wie in Schritt 7) und Raspbian startet normal. Nach ein oder zwei Minuten sind Sie an der Anmeldeaufforderung.
Da die Tastatur nicht funktioniert (scheint eine QEMU-Einschränkung für RPi zu sein), möchten Sie wahrscheinlich die virtuelle serielle Konsole einrichten. Stellen Sie dazu sicher, dass das Finale vorhanden
cmdline.txt
istconsole=ttyAMA0,115200
(und keine weiteren Erwähnungen vonttyAMA0
) und die QEMU-Befehlszeilenoption-serial stdio
vorhanden ist. Dadurch erhalten Sie eine Anmeldeaufforderung in dem von QEMU verwendeten Terminal, in das Sie Ihr System eingeben und verwenden können.Um zu vermeiden, dass QEMU beendet wird, wenn Sie Strg + C in die serielle Konsole eingeben , lesen Sie diesen Unix.SE-Beitrag .
quelle
Sie können nur die Geräte emulieren, die speziell unterstützt werden (oder die Sie hinzugefügt haben), z . B. http://qemu.weilnetz.de/qemu-doc.html#ARM-System-emulator .
AFAICT Einige Teile der RPi-Hardware werden ohne Anpassung nicht unterstützt.
quelle
qemu
Version 2.6 Himbeer-Pi 2 bereits unterstützt. wiki.qemu.org/ChangeLog/2.6 Mit welchen Befehlen sollte ich dieses Image jetzt starten? Ich habeqemu 2.6
bereits eine neuere zum Test zusammengestellt.img
Datei selbst.