La compilation croisée d'un module du noyau
-
28-09-2019 - |
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.
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