2016-08-19 6 views
0

Ich habe ein Videomodul und ich kompiliere mit arm-eabi-gcc Cross Compiler. Ich habe folgenden Befehl verwendet, um $ arm-eabi-gcc -O2 -DMODULE -D__KERNEL__ -W -Wall -isystem /lib/modules/ uname -r /build/include panel-xxxxxxx.c zu kompilieren.Kreuz kompilieren Modul mit Arm-eabi-gcc

Ich habe die folgenden Fehler

In file included from /lib/modules/3.13.0-32-generic/build/include/linux/types.h:5:0, 
      from /lib/modules/3.13.0-32-generic/build/include/linux/list.h:4, 
      from /lib/modules/3.13.0-32-generic/build/include/linux/module.h:9, 
      from panel-gis317.c:17: 
/lib/modules/3.13.0-32-generic/build/include/uapi/linux/types.h:4:23: fatal error: asm/types.h: No such file or directory 
compilation terminated. 

Und nach der Suche auf Google, fand ich, dass ich Hardware-Architektur muß angeben, aber ich konnte die richtige Nutzung zu verwenden arch mit gcc auf der Kommandozeile nicht gefunden.

Kann jemand bitte machen Sie mir das, was Flaggen kann ich verwenden Quer kompilieren eine .c Datei (Modul) auf der Kommandozeile geben, ohne Makefile

Hinweis verwendet: Ich tue dies insmod von .ko Modul zu tun auf die Hardware für Testzwecke.

BTW mit Hilfe von .o-Datei können wir wissen, welche cross-compiler die .c file

+1

'-02' sollte' -O2' sein –

+0

Ich bin verwirrt mit dem 'uname -r' Teil in Ihrer Compiler-Befehlszeile. Das entspricht der Kernel-Version des Hosts und nicht dem Ziel. - Sieht für mich falsch aus. Sie benötigen die Kernel-Include-Dateien des Ziels auf dem Host und schließen diese ein. – tofro

Antwort

2

mit dem Linux-Kernel-Architektur spezifisch sind in Bogen umfasst zu kompilieren verwendet wird // umfassen. Obwohl es wahrscheinlich nicht die korrekte Kompilierung sicherstellen wird, setzen Sie einfach ...

Versuchen Sie jedoch,/lib/modules/$ (uname -r)/build/arch/arm/include zu Ihrem Include-Pfad hinzuzufügen.

Hier ist eine einfache Anleitung für Ihren eigenen Kernel und Module für einen Pi2 auf Ihrem PC Aufbau: http://lostindetails.com/blog/post/Compiling-a-kernel-module-for-the-raspberry-pi-2

Sie nutzen den Make-Datei-Ansatz.

0

Der folgende Link Sie Cross-compiling of kernel module for ARM architecture

helfen

Dies hat auch ein Beispiel für die Make-Datei-Ansatz. Als eine Randnotiz, wenn Sie eine Idee über die Bedeutung der "asm/types.h" in Linux haben möchten, können Sie hier sehen, was alle Funktionen verwenden. http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html

Für mehr über Ihre out (.o) Datei verwenden Sie den Befehl „Datei“

„Datei outputfilename.o“ zu wissen Wenn Sie Kreuz sind die Datei korrekt Kompilieren und Sie werden mit einem 64-Bit-System als Host und dein Ziel ist 32 Bit, du kannst es hier verifizieren. Ihre kompilierte Ausgabe wird 32 Bit im richtigen Arbeitsfall sein.

0

Es gibt ein paar Dinge zu ändern, wie Sie ein Out-of-Core-Kernel-Modul erstellen.

Verwenden Sie zuerst das Kernel-Makefile, anstatt den Compiler direkt aufzurufen, um alle notwendigen CFLAGs zu erhalten.

Zweitens, geben Sie CROSS_COMPILE = arm-eabi- an, da andere binutils im Build benötigt werden.

Führen Sie den folgenden Befehl aus dem Verzeichnis Ihres Moduls Quellcode und Makefile enthält:

$ make CROSS_COMPILE=arm-eabi- -C <path_to_kernel_src> M=$PWD 

Das Makefile für ein Modul aus einer einzigen Quelldatei aus würde enthalten die folgende Zeile:

obj-m := panel-xxxxxxx.o 

Die makefile-Regeln des Kernels kbuild würden dafür sorgen, eine modinfo-Quelldatei zu erzeugen und diese in eine .ko-Modul-Binärdatei zu kompilieren und zu verknüpfen.

Weitere Details finden Sie unter .

Verwandte Themen