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