web-dev-qa-db-fra.com

Cross compilation d'un module de noyau

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.

29
itisravi

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-
32
JayM

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.

17
raj_gt1

Note: SUBDIRS= est déconseillé au profit de M=.

6
user502515

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
5
Albert Chen

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
0
jcomeau_ictx