Kann eine C-Datei mit einem ARM-CPU-Emulator ausgeführt werden?

482
Tailor

Ich hatte die Idee, eine ARM-CPU zu emulieren, um verschiedene Programme auszuführen. Zunächst wollte ich die CPU emulieren und beispielsweise eine einfache "Hallo Welt" in C ausführen.

Leider fand ich keine Antwort mit Google etc.

Kann eine C-Datei beispielsweise mit einem ARM-CPU-Emulator ausgeführt werden?

Ich dachte daran, eine CPU ohne GUI zu emulieren - einfach über die Befehlszeile, auf der ich die C-Datei ausführen möchte.

0
Vielleicht kannst du es mit einem Container versuchen? Babblo vor 5 Jahren 0
Container wie ein Docker-Container? kannst du es erklären? Tailor vor 5 Jahren 0
Was meinst du mit "C-File ausführen"? Wollen Sie ein C-Programm ausführen, das auf einer anderen Hardware ausgeführt wird, die Sie emulieren? Oder ein C-Programm mit einem Compiler für andere in einem Emulator ausgeführte Hardware kompilieren? Oder suchen Sie einen C-Dolmetscher? Oder was? AFH vor 5 Jahren 2
Stimmen Sie @AFH zu - diese Frage macht nicht viel Sinn. Könnten Sie bitte den Kontext Ihres Problems erläutern? slhck vor 5 Jahren 0
Ich hatte die Idee, eine Arm-CPU zu emulieren, um verschiedene Programme auszuführen. Zunächst wollte ich die CPU emulieren und beispielsweise eine einfache, in C. Sry geschriebene Hallo-Welt für meine schlechte Erklärung ausführen Tailor vor 5 Jahren 0
Angesichts dessen macht die Antwort möglicherweise nicht viel Sinn. Möchten Sie testen, wie oder ob ein von Ihnen entwickeltes Programm für eine ARM-Plattform kompiliert und ausgeführt werden kann? (Bitte antworten Sie auf Personen mit @Benutzername, andernfalls erhalten Sie keine Benachrichtigung.) slhck vor 5 Jahren 1
Ja, das versuche ich zu tun Tailor vor 5 Jahren 0
Die einfache Antwort ist, dass Sie ein C-Programm kompilieren (und verknüpfen) müssen, bevor Sie es mit einem ARM-Emulator (oder einer beliebigen CPU für diese Angelegenheit) ausführen können. Sie können Ihr C-Programm auf dem Host (die vernünftigste Wahl) mit einer Cross-Toolchain oder mit dem ARM-Emulator nativ kompilieren, wenn ein Betriebssystem und eine Toolchain installiert ist. sawdust vor 5 Jahren 1

2 Antworten auf die Frage

1
slhck

Ihre Frage war, ob Sie eine bestimmte C-Datei auf einer anderen CPU-Architektur testen können als der Computer, an dem Sie gerade arbeiten. Beispielsweise haben Sie möglicherweise einen Windows-Computer mit einem Intel-Prozessor, möchten das Programm jedoch auf einer ARM-Plattform testen. Das kann natürlich gemacht werden.

Zu beachten ist, dass C-Code niemals direkt auf einer CPU ausgeführt wird. Es muss zuerst in Maschinencode übersetzt (kompiliert) werden, da unterschiedliche Plattformen unterschiedlichen Maschinencode erfordern, um dasselbe zu tun. Das macht ein Compiler.

Sie können einen Compiler anweisen, Ihren Code in eine andere Zielplattform zu kompilieren. Dies wird als Kreuzkompilierung bezeichnet . In diesem Blog-Beitrag wird beispielsweise beschrieben, wie Sie ein Hello World-Programm mithilfe des arm-linux-gnueabi-gccCompilers (den Sie unter Ubuntu herunterladen können apt install gcc-arm-linux-gnueabi) in ARM überkompilieren .

Ich sollte hinzufügen, dass solche Dinge unter Linux-Hosts etwas einfacher sind als Windows, aber das ist vielleicht eine persönliche Neigung.

Nachdem Sie Ihr Programm kreuzkompiliert haben, möchten Sie es vielleicht auf der Zielplattform testen. Dazu benötigen Sie natürlich einen CPU-Emulator, aber dieser Emulator allein reicht nicht aus, da Sie darüber hinaus ein Betriebssystem * benötigen, * das das kompilierte C-Programm laden und als Prozess ausführen kann. Die ARM Lab-VM erledigt dies für ARM. Es ist eine virtuelle Maschine, die eine ARM-Plattform auf jeder Hostplattform emuliert.

* Es sei denn, dieses Programm selbst ist "Bare-Metal", was bedeutet, dass es ohne Zwischenbetriebssystem läuft.

* "... weil Sie ein Betriebssystem benötigen ..." * - Sofern Sie nicht über ein eigenständiges Programm verfügen, auch bekannt als Standalone- oder Bare-Metal-Programm. sawdust vor 5 Jahren 1
0
LPChip

Die Antwort ist nein. Eine CPU versteht nur CPU-Anweisungen (Assembler-Sprache). Wenn Sie über eine C-Datei verfügen und diese ausführen möchten, benötigen Sie einen Interpreter, damit die CPU das Skript verstehen kann. Dies bedeutet, dass das Skript in eine binäre ausführbare Datei kompiliert wird, die eine Liste von Assembly-Anweisungen darstellt, die von der CPU verstanden werden.

Wenn Ihr CPU-Emulator jedoch über eine Schnittstelle und ein Betriebssystem verfügt, können Sie dieses Betriebssystem zum Ausführen eines Compilers verwenden. In diesem Fall können Sie eine C-Datei über den Compiler ausführen. Aber das Betriebssystem ist die GUI, die Sie vermeiden möchten, also ... das führt mich zurück zum ersten Absatz.

Das macht Sinn. Danke für Ihre Antwort, Sie haben mir sehr geholfen! Tailor vor 5 Jahren 0
Bitte. :) LPChip vor 5 Jahren 0
@LPChip Siehe den Kommentar des OP zu der Frage. Ich denke, sie versuchen vielleicht etwas anderes - ich bin mir auch nicht sicher, wovon Sie speziell mit "Ihrem CPU-Emulator" sprechen. Natürlich kann eine C-Datei niemals direkt ausgeführt werden, aber ich denke, es gibt hier einen praktischeren Anwendungsfall, den das OP anvisieren möchte. slhck vor 5 Jahren 0
@slhck, IMHO, LPChip hatten dem OP die technische Definition von 'Barebone' CPU vs. 'Stripdown' PC klargestellt. Aus diesem Grund stellte das OP diese Frage an erster Stelle. Ich würde auch ein Nein mit Nein beantworten. Aber die Erklärung hilft dem OP zu verstehen, dass er / sie das Programm in Assemblersprache / Hex zu seinem / ihrem Zweck anstelle des "normalen" c-Codes haben muss Compiler / Build / Run Setup. (: p._phidot_ vor 5 Jahren 1
* "CPU Anweisungen, Assembler-Sprache" * - Falsche Assembler-Sprache ist kein Maschinencode. * "eine binäre ausführbare Datei, die eine Liste von Montageanweisungen ist" * - Falsche Montageanweisungen sind kein Maschinencode. Die Assemblersprache verwendet Mnemonik, während der Maschinencode numerische Opcodes hat. Die Assembler-Sprache verfügt über Funktionen wie Beschriftungen, die richtig ausgewertet werden, wenn Code / Daten hinzugefügt / entfernt werden. Während der Maschinencode nur numerische Adressen hat, müssten diese bei einer Änderung des Codes manuell neu berechnet werden. sawdust vor 5 Jahren 0
* "Wenn Sie eine C-Datei haben und diese ausführen möchten, benötigen Sie einen ** Interpreter **, damit die CPU das ** Skript verstehen kann **" * - Ihre (unvorsichtige?) Verwendung von Wörtern, die auch verwendet werden bestimmte technische Bedeutungen haben, kann zu falschem Verständnis führen. * "Aber das Betriebssystem ist die GUI ..." * - Nicht jedes Betriebssystem hat oder benötigt eine GUI. sawdust vor 5 Jahren 1