Ich möchte ARM-Code simulieren. Zum Beispiel möchte ich Code wie folgt ausführen:
%Vor%Und es würde 6 auf einer Software auf meinem Ubuntu ausgeben. Ist es möglich?
Keil MDK kann zur Simulation der ARM-Codes verwendet werden. Es bietet eine Simulation / Debug Perspektive, mit der der ARM-Registersatz untersucht werden kann. Speicherinhalt, etc ...
MDK-Lite-Evaluierungsversion ist kostenlos für eine maximale Code-Größe von 32 KB verfügbar.
Linux-Version von MDK ist nicht verfügbar. Aber Keil MDK funktioniert tadellos über WEIN in Ubuntu.
Schritt 1: Installiere Wein auf Ubuntu
Öffnen Sie ein Terminal und geben Sie Folgendes ein:
%Vor%Schritt 2: Herunterladen Keil MDK .
Schritt 3: Installieren Sie MDK
Klicken Sie mit der rechten Maustaste auf die ausführbare Datei MDK , und wählen Sie die Option Öffnen mit Wine Windows Program Loader .
Schritt 4: Rufen Sie Keil uVision MDK unter Ubuntu auf
Öffnen Sie ein Terminal und geben Sie Folgendes ein:
%Vor%Schritt 5: Installieren Sie Flash Magic (optional)
Flash Magic ist ein Tool zum Herunterladen von Software für Keil Boards. Laden Sie Flash Magic Software herunter und installieren Sie es auf Wein (siehe vorherige Schritte).
Erstellen Sie eine COM1-Verbindung zum seriellen Port. Öffne ein Terminal und tippe:
%Vor%Schritt 1: Erstellen Sie ein Keil UVision-Projekt für das ARM7-Ziel.
Wählen Sie in der Keil UVision-Werkzeugleiste Projekt - & gt; Neues Projekt .
Navigieren Sie zu einem Speicherort, an dem Sie dieses Projekt erstellen möchten.
Geben Sie einen Projektnamen ein und klicken Sie auf Speichern .
Wählen Sie ARM - & gt; ARM7 (Little Endian) als Gerät für Target. Klicken Sie auf OK.
Schritt 2: Erstellen Sie eine Assembly-Quelldatei für das Ziel
Wählen Sie in der Keil UVision-Werkzeugleiste Datei - & gt; Neu Fügen Sie der neu erstellten Datei den folgenden Code hinzu:
%Vor%Stellen Sie Tab-Space vor jeder Assembly-Anweisung wie oben beschrieben bereit. Speichern Sie die Datei mit der Erweiterung '. S' .
Schritt 3: Fügen Sie die Quelldatei zum Projekt hinzu
Klicken Sie im Projektfenster (auf der linken Seite von UVision) mit der rechten Maustaste auf Quellgruppe 1 und wählen Sie die Option < Hinzufügen von Dateien zur Gruppen-Quellgruppe 1 .
Wählen Sie test.s und klicken Sie auf 'Hinzufügen' . (Wählen Sie Dateityp als ASM-Quelldatei )
Schritt 4: Erstellen Sie die Quelldatei
Wählen Sie in der Keil UVision-Werkzeugleiste Projekt - & gt; Build target oder Drücken Sie F7 , um die Quelldatei zu kompilieren.
Schritt 5: Anwendung simulieren / debuggen
Wählen Sie in der Keil UVision-Werkzeugleiste Debug - & gt; Debug-Sitzung starten / beenden oder Drücken Sie Strg + F5 .
Die Debug-Perspektive wird mit einer Registeransicht auf der linken Seite, Codeansicht in der Mitte, Speicheransicht rechts unten usw. geöffnet.
Verwenden Sie die Debugging-Schlüssel, um den Code auszuführen:
Beobachten Sie die Registeransicht am Ende der Programmausführung:
Wählen Sie in der Keil UVision-Werkzeugleiste Debug - & gt; Debug-Sitzung starten / beenden oder Strg + F5 drücken, um die Debugging-Perspektive zu verlassen.
Wenn Sie es in eine tatsächliche ausführbare Datei einbauen, können Sie es mit dem QEMU ARM-Emulator ausführen.
Sie könnten Arm Code über QEMU laufen lassen, das ein Emulator ist, aber ich denke nicht, dass Sie direkt auf ein anderes Stück Software ausgeben können, weil QEMU auch eine Software ist, aber Sie könnten etwas wie Shared Memory oder sogar eine Datei verwenden Zugriff auf eine Datei erfordert möglicherweise einen Mutex), um Ergebnisse vom Emulator an die Host-Software und zurück zu übergeben, auch wenn es ein wenig langsam sein könnte
Ich denke, was Sie suchen, ist ein Weg zu printf
der Wert, der von einer ARM Assembly-Funktion aus einem C-Programm zurückgegeben wird. Dazu können Sie den Befehlszeilensimulator arm-elf-run
verwenden, der mit der Toolchain arm-elf-gcc verfügbar ist. Sie können die Toolchain von Ссылка . (Entpacke das Archiv einfach in einen Ordner und füge optional <path>/gunarm-4.0.2/bin/
an die PATH
Variable deines Systems an)
Zunächst müssen Sie Ihren ARM-Code in einer Assembly-Funktion in einer Assembly-Datei (.s) anordnen, sagen wir myasm.s
. Jetzt müssen Sie einen Testcode in C ( test.c
, zum Beispiel) schreiben, um die Assembly-Funktion aufzurufen und den zurückgegebenen Wert mit unserem bekannten printf()
zu drucken. Sie können den Quellcode unten finden:
myasm.s:
%Vor%test.c:
%Vor% Sobald die beiden Dateien fertig sind, können Sie sie mit arm-elf-gcc
Und dann führe die Binärdatei mit arm-elf-run
Dies wird ein retval = 6
auf Ihrem Ubuntu-Terminal ausgeben:)
Sie können den Code in diesem Git-Repository als Ausgangspunkt verwenden:
Wie andere bereits erwähnt haben, müssen Sie zuerst QEMU installieren, um die ARM-Hardware zu emulieren, und Sie müssen eine Möglichkeit haben, Ihren Code zu kompilieren (ich empfehle die CodeSourcery Lite Edition Toolchain ). Bearbeiten Sie dann den Eintrag TOOLROOT
in der Datei Makefile.common
, um auf den Installationsort Ihrer Toolchain zu zeigen, und führen Sie einfach den Befehl make test
aus, nachdem Sie Ihren Assemblercode geschrieben und in Ihre C-Testdatei exportiert haben.
Der Code in diesem Repository enthält eine Reihe von Beispielen, die Sie an Ihre eigenen Zwecke anpassen können. Mit den C-Testdateien können Sie Ihren Assemblercode aufrufen und die Ergebnisse in Ubuntu an Ihr Terminal ausgeben. :)
Ich benutze immer eine kleine qemu ARM VM, um ARM-Programme zu testen.
Sie können es von debian herunterladen und dann mit: ( mehr infos )
%Vor%Da es ein Vollarmsystem simuliert, können Sie die Programme darauf schreiben (z. B. mit vim + gcc) und sie dann dort testen.
Ich bin mir nicht sicher, warum noch niemand es erwähnt hat, aber Sie können eine "echte" und erschwingliche Armplattform zum Experimentieren mit Himbeere pi .
Es kommt standardmäßig nicht mit Ubuntu, nach meinem Wissen kommt es mit einem Debian-Remix namens Raspbian (kann aber auch laufen) Fedora, Arch oder Debian) .
Wenn es um die Unterstützung dieser Plattform geht, gibt es Bücher dafür und es hat sogar eine eigene Stack Exchange Subcommunity .
Wenn Sie vorhaben, einen ARM-Emulator in C zu schreiben, können Sie den Code in diesem Repository als Ausgangspunkt verwenden. Ссылка Es hat eine Pipeline der Größe 4. Datenverarbeitungsbefehle sind implementiert und es behandelt die Überlauf- und Übertragsflags. Branch und Interrupts sind ebenfalls implementiert. Er akzeptiert eine Assembleranweisung als Eingabe und simuliert den endgültigen Speicherzustand nach Beendigung der Anweisung. Es gibt einige Beispieleingaben, die als Code-Kommentare hinzugefügt wurden. Lesen Sie mehr unter Ссылка