makefile cross-compiling embedded-linux kernel-module linux-toolchain

makefile - Compilación cruzada de un módulo del kernel



cross-compiling embedded-linux (6)

Estoy tratando de compilar de forma cruzada un módulo del núcleo de helloworld (2.6.x) para la arquitectura ARM en mi host Intel x86.

La cadena de herramientas de código para ARM se encuentra en: / home / ravi / workspace / hawk / arm-2009q3

La fuente del núcleo se encuentra en: / home / ravi / workspace / hawk / linux-omapl1

Mi 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

Cuando ejecuto make , el .ko producido es el de mi máquina host, lo que significa que el makefile está invocando el compilador nativo en lugar del compilador cruzado. ¿Qué estoy haciendo mal? Los binarios del compilador cruzado están en mi camino.


¿Podría intentarlo? Olvidó agregar ARCH y CROSS_COMPILE en el valor predeterminado y limpiar

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


Poner ARCH y CROSS_COMPILE en el Makefile no funciona. Necesitas ponerlos en la línea de comando:

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


Reemplazar

ARCO = brazo
CROSS_COMPILE = arm-none-linux-gnueabi

por

ARCO DE EXPORTACIÓN: = brazo
exportar CROSS_COMPILE: = arm-none-linux-gnueabi-

esto también funcionará si no desea dar a estos parámetros la línea de comando cada vez.


agregar export al final de sus declaraciones de variables Makefile las pondrá a disposición de subshells. y agregue el guión al prefijo CROSS_COMPILE como señaló , y M lugar de SUBDIRS como respondió.

y generalmente es una buena idea usar := lugar de = en un Makefile, por lo que la variable solo se interpola una vez. Realmente no importa en este caso particular sin embargo.

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


SUBDIRS= : SUBDIRS= está en desuso a favor de M= .


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