Frage

Ich versuche Kompilierung zu überqueren ein Hello World-Kernel (2.6.x) Modul für ARM-Architektur auf meiner Intel-x86-Host.

Die CodeSourcery Werkzeugkette für ARM befindet sich unter: / home / Ravi / Arbeitsbereich / Falke / Arm-2009q3

Die Kernel-Quelle befindet sich unter: / home / Ravi / Arbeitsbereich / Falke / linux-omapl1

Meine 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 laufe make , erzeugt die .ko ist, dass meiner Host-Maschine, die die Make-Datei bedeutet, wird die native Compiler Aufruf statt das Kreuz compiler.What mache ich falsch? Der Cross-Compiler der Binärdateien sind in meinem Weg.

War es hilfreich?

Lösung

Putting ARCH und CROSS_COMPILE im Makefile funktioniert nicht. Sie müssen sie auf der Kommandozeile eingegeben werden:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

Andere Tipps

Ersetzen

  

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

durch

  

export ARCH: = Arm
  Export CROSS_COMPILE: = arm-none-linux-gnueabi -

Dies wird auch funktionieren, wenn Sie nicht wollen, dass diese Parameter Befehlszeile jedes Mal geben.

Nebenbei bemerkt:. SUBDIRS= wird zugunsten M= veraltet

Sie könnten versuchen, vergessen Sie ARCH und CROSS_COMPILE in den Standard und sauber

hinzufügen
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

Hinzufügen export am Ende Ihres Makefiles Variablendeklarationen werden sie Subshells zur Verfügung stellen. und fügen Sie den Strich zum CROSS_COMPILE Präfix wie JayM wies darauf hin, und M statt SUBDIRS wie user502515 beantwortet.

und es ist generell eine gute Idee, um den Einsatz := statt = in einem Makefile, so dass nur die Variablen einmal interpoliert werden. wirklich spielt keine Rolle, in diesem speziellen Fall aber.

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
MODULES := hola_kern.o

#guest architecture
ARCH := arm

CROSS_COMPILE := arm-linux-gnueabi-
obj-m := $(MODULES)

#path of the arm compiled kernel
ROOTDIR := /home/aldo/c/proyectos/prefixa/work/kernels/linux-omap-5f0a6e2

MAKEARCH := $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE)

all: modules
modules:
    $(MAKEARCH) -C $(ROOTDIR) M=${shell pwd} modules

clean:
    $(MAKEARCH) -C $(ROOTDIR) M=${shell pwd} clean
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top