Compilação cruzada de um módulo do kernel
-
28-09-2019 - |
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.
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