Question

Je suis en train de traverser un module noyau compilation helloworld (2.6.x) pour l'architecture ARM sur mon intel hôte x86.

La chaîne d'outils de CodeSourcery pour ARM est situé à: / home / ravi / espace / faucon / bras-2009T3

La source du noyau est situé à: / home / ravi / espace de travail / faucon / linux-omapl1

Mon 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

Quand je lance make , la .ko produite est celle de ma machine hôte qui signifie que le makefile est Invoquer le compilateur natif au lieu de la croix compiler.What que je fais mal? Les binaires du compilateur croix sont sur mon chemin.

Était-ce utile?

La solution

La mise ARCH et CROSS_COMPILE dans le Makefile ne fonctionne pas. Vous devez les mettre sur la ligne de commande:

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

Autres conseils

Remplacer

  

ARCH = bras
  CROSS_COMPILE = bras-none-linux-gnueabi

par

  

export ARCH: = bras
  export CROSS_COMPILE: = bras-none-linux-gnueabi -

ce sera aussi le travail si vous ne voulez pas donner ces lignes de commande de paramètres à chaque fois.

Sidenote:. SUBDIRS= est dépréciée en faveur de M=

Pourriez-vous essayer, vous avez oublié d'ajouter ARCH et CROSS_COMPILE dans la valeur par défaut et propre

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

ajouter export à la fin de vos déclarations de variables Makefile les rendre disponibles à sous-couches. et ajouter le tableau de bord pour le préfixe CROSS_COMPILE comme Jaym indiqué et M au lieu de SUBDIRS comme user502515 réponse.

et il est généralement une bonne idée d'utiliser := plutôt que = dans un Makefile, de sorte que la seule variable s'interpolée une fois. vraiment n'a pas d'importance dans ce cas particulier cependant.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top