33

Intel x86ホストでARMアーキテクチャ用のhelloworldカーネル(2.6.x)モジュールをクロスコンパイルしようとしています。

ARMのコードソースツールチェーンは次の場所にあります:/ home / ravi / worksheet / hawk / arm-2009q3

カーネルソースは次の場所にあります:/ home / ravi / worksheet / hawk / linux-omapl1

私の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

makeを実行すると、生成される.koはホストマシンの.koであり、これはmakefileがクロスコンパイラではなくネイティブコンパイラを呼び出していることを意味します。何が間違っているのでしょうか。クロスコンパイラのバイナリは私のパスにあります。

4

6 に答える 6

35

MakefileにとARCHを入れCROSS_COMPILEても機能しません。それらをコマンドラインに配置する必要があります。

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
于 2010-08-12T20:16:58.693 に答える
20

交換

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

export ARCH:= arm
export CROSS_COMPILE:= arm-none-linux-gnueabi-

これは、これらのパラメータコマンドラインを毎回指定したくない場合にも機能します。

于 2013-01-22T11:21:08.373 に答える
7

補足:SUBDIRS=を優先して非推奨になりましたM=

于 2010-11-21T13:49:17.740 に答える
5

試してみてください、ARCHとCROSS_COMPILEをデフォルトに追加してクリーンにするのを忘れました

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
于 2014-07-08T22:33:48.657 に答える
1

Makefile変数宣言の最後に追加するexportと、サブシェルで使用できるようになります。そして、 JayMが指摘したように、そしてuser502515が答えたように、CROSS_COMPILEプレフィックスにダッシュを追加します。MSUBDIRS

:=通常、Makefileではなく使用することをお勧めします=。そのため、変数は1回だけ補間されます。ただし、この特定のケースでは実際には問題ではありません。

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
于 2017-07-15T15:19:44.713 に答える
-1
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
于 2012-04-01T05:28:53.640 に答える