web-dev-qa-db-ja.com

クロスコンパイルLinuxカーネルモジュール

ARM linuxのカーネルモジュールをクロスコンパイルすることを検討しています。
ホストのカーネルバージョンは3.13.0-24genericですが、ターゲットのカーネルバージョンは3.10.17-r0です。

では、実際にダウンロードしてインストールする必要があるカーネルソースまたはヘッダーと、その場所を教えてください。 kernel.orgからlinux-3.10.17tar.bz2をダウンロードして解凍しました。ドライバにはMakefileがあり、このサイトによると、これらの行を追加してからmakeを実行する必要があります。

Arch=arm
CROSS_COMPILE=arm-poky-linux-gnueabi-gcc
KDIR := /lib/modules/'uname -r'/build

obj-m +=test5.o
all : 
    make -C ${KDIR}/build M=$(PWD) modules 

clean   : 
    make -C ${KDIR}/build M=$(PWD) clean 

しかし、uname -rを何に置き換える必要がありますか?これにより、ホストのカーネルバージョンがわかります。しかし、私のターゲットバージョンは異なります。 /lib/modules/3.6.9フォルダーはどこにありますか? CROSS_COMPILEとArchの両方が設定されています。

1
parvathy

Linuxカーネルモジュールをクロスコンパイルするには、Makefileがターゲットマシン(この場合は「KDIR」)上のLinuxカーネルを認識している必要があります。ターゲットマシンのLinuxカーネルが保存されているアドレスにKDIRを構成します。

Makefileが認識する必要がある2番目のことは、CROSS_COMPILERとArchです。 Makefileでこれらを構成する必要はありません。 makeを実行するときは、引数としてそれらを渡すだけです。

make CROSS_COMPILE=arm-poky-linux-gnueabi-  Arch=arm
2
DA_MASTERPIECE