カーネルモジュールをクロスコンパイルします
-
28-09-2019 - |
質問
Intel X86ホストのアームアーキテクチャ用のHelloworldカーネル(2.6.x)モジュールを渡そうとしています。
ARM用のCodeSourceryツールチェーンは、次のようにあります。 /home/ravi/workspace/hawk/arm-2009q3
カーネルソースは次のようにあります。/home/ravi/workspace/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
走るとき 作る, 。クロスコンパイラのバイナリは私の道にあります。
解決
パッティング ARCH
と CROSS_COMPILE
MakeFileでは機能しません。あなたはそれらをコマンドラインに置く必要があります:
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
他のヒント
交換
Arch = ARM
cross_compile = arm-none-linux-gnueabi
に
エクスポートアーチ:=アーム
Export cross_compile:= arm-none-linux-gnueabi-
これは、毎回これらのパラメーターコマンドラインを提供したくない場合にも機能します。
サイドノート: SUBDIRS=
有利に非推奨されています M=
.
試してみてください、あなたはデフォルトにアーチと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
追加 export
MakeFileの変数宣言の最後に、それらをサブシェルで利用できるようにします。ダッシュをに追加します CROSS_COMPILE
接頭辞AS ジェイム 指摘された、そして M
それ以外の SUBDIRS
なので user502515 答えた。
そして、それは一般的に使用することをお勧めします :=
それよりも =
MakeFileでは、変数は一度だけ補間されます。しかし、この特定のケースでは本当に問題ではありません。
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