Pregunta

Estoy intentando cruzar un módulo del kernel de compilación holamundo (2.6.x) para la arquitectura ARM en mi host Intel x86.

La herramienta de la cadena CodeSourcery para ARM se encuentra en: / home / Ravi / espacio de trabajo / halcón / brazo-2009q3

El código fuente del núcleo se encuentra en: / home / Ravi / espacio de trabajo / halcón / 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 corro make , la .ko producido es el de mi máquina host que significa el makefile invoca el compilador nativo en lugar de la cruz compiler.What estoy haciendo mal? binarios del compilador cruzado están en mi camino.

¿Fue útil?

Solución

Poner ARCH y CROSS_COMPILE en el Makefile no funciona. Es necesario para ponerlos en la línea de comandos:

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

Otros consejos

Reemplazar

  

ARCH = brazo
  CROSS_COMPILE = brazo-ninguno-linux-gnueabi

por

  

ARCH exportación: =
brazo   exportación CROSS_COMPILE: = brazo-ninguno-linux-gnueabi -

Esto también trabajo si no quiere dar a estos parámetros de línea de comandos cada vez.

Nota al margen:. SUBDIRS= está en desuso en favor de M=

¿podría tratar, se le olvidó añadir ARCH y CROSS_COMPILE en el defecto y limpia

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

export añadiendo al final de sus declaraciones de variables Makefile los pondrá a disposición de subniveles. y añadir el guión para el prefijo CROSS_COMPILE como Jaym señalado, y M en lugar de SUBDIRS como user502515 contestado.

y por lo general es una buena idea para su uso en lugar de := = en un Makefile, por lo que la variable sólo 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
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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top