Kreuzkompilierung von OCAML-Apps für ARM

8

Ich kompiliere einen Touchscreen-Treiber, der mit einer Ocaml-Kalibrierungsanwendung geliefert wird.

Ich versuche den Treiber und die Anwendung für ARM zu kompilieren, insbesondere das Beagleboard, auf dem Angström läuft.

Es geht so:

%Vor%

Ich stecke in diesem Relocations in generic ELF (EM: 3) Fehler fest.

Das Makefile sieht so aus:

%Vor%

As /usr/local/angstrom/arm/environment-setup belässt /usr/local/angstrom/arm/bin als erstes Element meines PATH, ich habe versucht, einige Programme durch die ARM-Versionen zu ersetzen

%Vor%

Nach dem Ersetzen von as kompilieren die Module jedoch nicht einmal

%Vor%

Ich bin mir ziemlich sicher, dass es ein sehr dummer Fehler sein muss, aber ich kann keine Dokumentation darüber finden, wie man das richtig macht. Weiß jemand, was scheitern könnte?

Der Quellcode des Treibers, den ich erstellen möchte, kann hier gefunden werden.

    
RazZziel 27.02.2012, 21:14
quelle

2 Antworten

7

ocaml unterstützt derzeit keine Cross-Kompilierung, und die Übergabe der -cc-Option führt nicht dazu, dass es sich auf magische Weise kompiliert. Es gibt einige Patches, die das ermöglichen, aber nichts Offizielles. Ich erinnere mich an Patched ocamlopt und es funktionierte ok für einfache Programme. Aber in diesem Fall müssen Sie auch alle abhängigen Bibliotheken kompilieren, und dies kann eine ziemliche Aufgabe sein.

Ich denke, Ihre beste Lösung ist entweder:

  • nativ in arm qemu erstellen (das ist ziemlich einfach, es gibt vordefinierte Debian-Images verfügbar )

  • erstellt eine Bytecode-Binärdatei der Kalibrierungsanwendung (Bytecode ist portierbar zwischen Architekturen, erfordert aber die gleiche Version von ocaml auf dem Ziel) und installiert die erforderlichen Stub-Bibliotheken (diejenigen, die C-Code für Bindungen zu gtk, cairo, usw.) am Arm (nativ oder aus Paketen)

ygrek 28.02.2012, 09:00
quelle
2

Es sieht so aus, als ob Sie nicht die gesamte Toolchain durch die Cross-Compilation Toolchain ersetzt haben. movl %eax,camlVersion ist eine typische x86-Anweisung und nicht etwas, das Sie in ARM-Code sehen würden. Ich erhalte normalerweise Ihre Fehler, wenn ich vergesse, zwischen verschiedenen Code für unterschiedliche Architekturen zu putzen.

    
Leo 28.02.2012 08:06
quelle