2013-01-09 25 views
5

私のx86 ubuntu LinuxでARMカーネルモジュールをクロスコンパイルしたい。 私はカーネルソースをダウンロードしました(ターゲットARMマシンはこのlinuxバージョンを実行しているので、Linux 2.6.26です)。 と私はapt-get'edアームクロスコンパイラ。ご覧のように。x86のARMのためのLinuxカーネルモジュールのクロスコンパイルubuntu

[email protected]:/var/www/module_test# arm-linux-gnueabi- 
arm-linux-gnueabi-addr2line arm-linux-gnueabi-cpp-4.5 
arm-linux-gnueabi-gcov-4.5 arm-linux-gnueabi-ld.gold 
arm-linux-gnueabi-ranlib  arm-linux-gnueabi-strip 
arm-linux-gnueabi-ar   arm-linux-gnueabi-elfedit 
arm-linux-gnueabi-gprof  arm-linux-gnueabi-nm 
arm-linux-gnueabi-readelf arm-linux-gnueabi-as 
arm-linux-gnueabi-gcc  arm-linux-gnueabi-ld 
arm-linux-gnueabi-objcopy arm-linux-gnueabi-size  
arm-linux-gnueabi-c++filt arm-linux-gnueabi-gcc-4.5 
arm-linux-gnueabi-ld.bfd  arm-linux-gnueabi-objdump 
arm-linux-gnueabi-strings 

以下の(私のx86マシン用)(hello_module.ko) コンパイル私のカーネルモジュール用のMakefileであり、これは正常に動作します。

obj-m += hello_module.o 
KDIR := /lib/modules/$(shell uname -r)/build 
#PWD:=$(shell pwd) 

all: 
     $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules 

clean: 
     rm -rf *.o *.ko *.mod.* .c* .t* 

今、私は、ARM用のLinux 2.6.26のカーネルモジュールをコンパイル横断するために、Makefileの 働いて私の元に変更するものはありますか?

とは何ですか?linux sourceとlinux header sourceの違いは何ですか? 私はいくつかのカーネルのものをコンパイルするたびにこれらを見たことがありますが、まだそれは得られません。

あなたhello_moduleに移動する前に、私はカーネルのソースを構築することをお勧めしたい...

+0

http://raspberrypi.stackexchange.com/questions/192/how-do-i-cross-compile-the-kernel-on-a-ubuntu-host –

答えて

3

を私はいくつかの記事をGoogleで検索しているが、それは文句を言わないのに役立ちます。コンパイラのインストールが正常に行われたことを確認します。

export CROSS_COMPILE=arm-linux-gnueabi- 

export ARCH=arm 

また、PATHがクロスツールチェーンのインストール時に更新する必要があるので、ツールが作る実行から見つけることができます:

多くの場合、ツールチェーンの問題は、これらを必要に遡ります。 CodeSourceryのインストールはそれを行うことができますが、PATHの更新はログアウト/ログイン後にのみ有効です。

上記のコンソール出力をどのように取得したかはわかりません。問題が残っている場合、私はこれらのようなことをし、結果をコメントとして投稿することをお勧めします。

printenv | grep PATH 

whereis arm-linux-gnueabi-gcc 

which arm-linux-gnueabi-gcc 
+0

きれいに作る '忘れてはなりません。 make ' - ' 'はあなたのプラットフォームのデフォルト設定です。これは特にソースツリーがネイティブカーネルを構築するために使用された場合に必要です。 – marko