wake-up-neo.com

Kreuzkompilieren eines Kernelmoduls

Ich versuche, ein helloworld-Kernel-Modul (2.6.x) für die ARM -Architektur auf meinem Intel x86-Host zu kompilieren.

Die Toolourcery-Toolkette für ARM befindet sich unter:/home/ravi/workspace/hawk/arm-2009q3

Die Kernel-Quelle befindet sich unter:/home/ravi/workspace/hawk/linux-omapl1

Mein Makefile:

Arch=arm
CROSS_COMPILE=arm-none-linux-gnueabi
obj-m := Hello.o
KDIR := /home/ravi/workspace/hawk/linux-omapl1
PWD := $(Shell pwd)
default:
          $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
          $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean

Wenn ich make starte, ist das erzeugte .ko das meines Host-Computers, was bedeutet, dass das Makefile den nativen Compiler anstelle des Cross-Compilers aufruft. Was mache ich falsch? Die Binärdateien des Cross-Compilers liegen auf meinem Weg.

29
itisravi

Das Einfügen von Arch und CROSS_COMPILE in das Makefile funktioniert nicht. Sie müssen sie in der Befehlszeile eingeben:

make Arch=arm CROSS_COMPILE=arm-none-linux-gnueabi-
32
JayM

Ersetzen

Bogen = Arm
CROSS_COMPILE = arm-none-linux-gnueabi 

durch 

export Arch: = Arm
export CROSS_COMPILE: = arm-none-linux-gnueabi-

dies funktioniert auch, wenn Sie diese Parameter-Befehlszeile nicht jedes Mal angeben möchten.

17
raj_gt1

Randbemerkung: SUBDIRS= ist zugunsten von M= veraltet.

6
user502515

wenn Sie es versuchen könnten, haben Sie vergessen, Arch und CROSS_COMPILE in die Standardeinstellungen und clean aufzunehmen

Arch=arm
COMPILER=arm-none-linux-gnueabi
obj-m := Hello.o
KERNELDIR := /home/ravi/workspace/hawk/linux-omapl1
PWD := $(Shell pwd)
default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) Arch=$(Arch) CROSS_COMPILE=$(COMPILER) modules

clean:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) Arch=$(Arch) clean
5
Albert Chen

wenn Sie am Ende Ihrer Makefile-Variablendeklarationen export hinzufügen, werden diese für Subshells verfügbar. und fügen Sie den Strich zu dem CROSS_COMPILE-Präfix hinzu, indem Sie JayM hervorheben, und M anstelle von SUBDIRS als user502515 Answer.

im Allgemeinen ist es eine gute Idee, := anstelle von = in einem Makefile zu verwenden, sodass die Variable nur einmal interpoliert wird. In diesem Fall spielt es aber keine Rolle.

Arch := arm
CROSS_COMPILE := arm-none-linux-gnueabi-
obj-m := Hello.o
KDIR := /home/ravi/workspace/hawk/linux-omapl1
PWD := $(Shell pwd)
export
default:
          $(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
          $(MAKE) -C $(KDIR) M=$(PWD) clean
0
jcomeau_ictx