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

クロスコンパイル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

Linuxカーネルモジュールをクロスコンパイルするには、Makefileがターゲットマシン(あなたの場合は「KDIR」)のLinuxカーネルを知る必要があります。ターゲットマシンのLinuxカーネルが格納されているアドレスでKDIRを設定します。

Makefile の 2 番目に注目すべき点は CROSS_COMPILER と ARCH です。 Makefileでこれを構成する必要はありません。実行時に引数として渡しますmake

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

関連情報