J'essaie de compiler un module du noyau helloworld (2.6.x) pour l'architecture ARM sur mon hôte Intel x86.
La chaîne d'outils Codesourcery pour ARM se trouve à l'adresse suivante:/home/ravi/workspace/hawk/arm-2009q3
La source du noyau est située à l’adresse:/home/ravi/espace de travail/hawk/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
Lorsque je lance make , le fichier .ko produit est celui de ma machine hôte, ce qui signifie que le fichier make appelle le compilateur natif au lieu du compilateur croisé. Qu'est-ce que je me trompe? Les binaires du compilateur croisé sont sur mon chemin.
Mettre Arch
et CROSS_COMPILE
dans le Makefile ne fonctionne pas. Vous devez les mettre en ligne de commande:
make Arch=arm CROSS_COMPILE=arm-none-linux-gnueabi-
Remplacer
Arc = bras
CROSS_COMPILE = arm-none-linux-gnueabi
par
exportation Arch: = bras
export CROSS_COMPILE: = arm-none-linux-gnueabi-
cela fonctionnera également si vous ne voulez pas donner ces paramètres à la ligne de commande à chaque fois.
Note: SUBDIRS=
est déconseillé au profit de M=
.
pourriez-vous essayer, vous avez oublié d'ajouter Arch et CROSS_COMPILE dans le paramètre par défaut et le nettoyage
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 variable Makefile les rendra disponibles aux sous-shell. et ajoutez le tiret au préfixe CROSS_COMPILE
en tant que JayM a été souligné, et M
au lieu de SUBDIRS
en tant que user502515 répondu.
et c'est généralement une bonne idée d'utiliser :=
plutôt que =
dans un Makefile, afin que la variable ne soit interpolée qu'une seule fois. n'a vraiment 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