Domanda

Sto provando a compilare in modo incrociato un modulo del kernel helloworld (2.6.x) per l'architettura ARM sul mio host Intel x86.

La catena di strumenti codesourcery per ARM si trova in: /home/ravi/workspace/hawk/arm-2009q3

Il sorgente del kernel si trova in:/home/ravi/workspace/hawk/linux-omapl1

Il mio file make:

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 corro Fare, il .ko prodotto è quello del mio computer host, il che significa che il makefile invoca il compilatore nativo anziché il compilatore incrociato. Cosa sto facendo di sbagliato?I binari del compilatore incrociato sono sul mio percorso.

È stato utile?

Soluzione

Mettere ARCH e CROSS_COMPILE nel Makefile non funziona. Hai bisogno di metterli sulla riga di comando:

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

Altri suggerimenti

Sostituire

  

ARCH = braccio
  CROSS_COMPILE = braccio-nessuno-linux-gnueabi

da

  

export ARCH: = braccio
  export CROSS_COMPILE: = braccio-nessuno-linux-gnueabi -

questo funziona anche se non si vuole dare a questi parametri da riga di comando ogni volta.

Nota a margine:. SUBDIRS= è deprecato in favore di M=

potresti provare, hai dimenticato di aggiungere ARCH e CROSS_COMPILE al valore predefinito e pulire

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

aggiungendo export alla fine delle vostre dichiarazioni di variabili Makefile li renderà disponibili per sottoshell. e aggiungere il trattino al prefisso CROSS_COMPILE come JayM sottolineato, e M invece di SUBDIRS come user502515 risposta.

ed è generalmente una buona idea usare := piuttosto che = in un Makefile, quindi la variabile unico viene interpolata una volta. in realtà non importa in questo caso particolare, però.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top