Pergunta

Estou tentando compilar um módulo helloworld kernel (2.6.x) para arquitetura ARM em meu host Intel x86.

A cadeia de ferramentas de codesourcery para ARM está localizada em: /home/ravi/workspace/hawk/arm-2009q3

A fonte do kernel está localizada em:/home/ravi/workspace/hawk/linux-omapl1

Meu 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

Quando eu corro fazer, o .ko produzido é o da minha máquina host, o que significa que o makefile está invocando o compilador nativo em vez do compilador cruzado.Os binários do compilador cruzado estão no meu caminho.

Foi útil?

Solução

Colocando ARCH e CROSS_COMPILE No Makefile não funciona. Você precisa colocá -los na linha de comando:

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

Outras dicas

Substituir

Arch = braço
Cross_compile = ARM-none-linux-gnueaBi

por

arco de exportação: = braço
Exportar Cross_compile: = Arm-None-Linux-Gnueabi-

Isso também funcionará se você não quiser fornecer essas linhas de comando de parâmetro a cada vez.

Nota: SUBDIRS= é preterido a favor de M=.

Você poderia tentar, esqueceu de adicionar arch e cruz_compile no padrão e limpo

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

adicionando export no final de suas declarações de variáveis ​​​​Makefile as disponibilizarão para subshells.e adicione o traço ao CROSS_COMPILE prefixo como JayM apontou, e M em vez de SUBDIRS como usuário502515 respondidas.

e geralmente é uma boa ideia usar := em vez de = em um Makefile, então a variável só é interpolada uma vez.realmente não importa neste caso específico.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top