2017-01-31 3 views
0

Ich versuche, eine Arietta G25 Platine mit QEMU zu emulieren, habe aber einige Schwierigkeiten.Emulieren einer Arietta G25-Platine mit QEMU

Ich begann mit der Kompilierung von Linux mit Patches zur Unterstützung von Arietta, wie beschrieben here. Ich untersuchte dann die Liste unterstützter Maschinen mit qemu-system-arm -M help und stellte fest, dass, während die Arietta-Platine nicht aufgelistet war, eine Option für versatileab und versatilepb vorhanden war, die denselben Prozessor wie die Arietta hatten.

im Kernel-Verzeichnis arch/arm/boot, lief ich den Befehl

QEMU_AUDIO_DRV=none \ 
qemu-system-arm -M versatilepb \ 
       -m 256M \ 
       -kernel zImage \ 
       -dtb dts/acme-arietta.dtb \ 
       -nographic \ 
       -append "console=ttyAMA0" 

ich erwartet, dass die Kernel-Boot zu sehen und sofort durch das Fehlen eines Root-Dateisystem in Panik. Es wurde jedoch nie ein Text auf meiner Konsole angezeigt.

Ich habe versucht, herumspielen mit den Argumenten zu trösten (wie mit ttyS0, Hinzufügen von Raten, etc.), aber das hat nicht funktioniert.

Antwort

2

Dies ist ein sehr häufiger Punkt der Verwirrung für Leute, die in die ARM Embedded World kommen, die an x86 gewöhnt sind. Für x86 sieht im Wesentlichen jede Hardware, die Sie kaufen, wie ein Standard-PC aus - Speicher, serielle Schnittstelle usw. befinden sich alle an genau der gleichen Stelle und werden auf die gleiche Weise aufgerufen. So wird Gast-Software in der Regel nur auf einem dieser Systeme arbeiten.

ARM ist sehr unterschiedlich. Verschiedene Embedded Boards und SoCs haben unterschiedliche Geräte und stellen diese an verschiedenen Adressen zur Verfügung. Software, die auf ihnen läuft, muss so gebaut werden, dass sie mit diesen Geräten funktioniert, und der Versuch, Low-Level-Software (wie einen Kernel oder Bootloader oder ein Firmware-Image) auf dem falschen Gerät auszuführen, funktioniert nicht. Was hier passiert, ist, dass Sie gesagt haben: "Booten Sie einen Kernel für Arietta und sagen Sie ihm, dass der UART der UART der Arietta ist", aber Sie betreiben ihn auf einem Stück emulierter Hardware (sehr viel) anders. Der Kernel wird versuchen, mit Hardware zu kommunizieren, die nicht existiert und nur abstürzen wird. Es kann auch nichts drucken, weil es nicht weiß, wo der vielseitige UART-UART ist.

Die Unterstützung für die Emulation eines neuen Board-Modells zu QEMU ist kein trivialer Prozess (man denke nur an die gleiche Menge Arbeit wie das Hinzufügen von Unterstützung für das Board zum Linux-Kernel), da man Gerätemodelle schreiben muss für die gesamte Hardware, die auf diesem Board ist und die der Gast-Kernel zu verwenden versucht.