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の両方が設定されています。
Linuxカーネルモジュールをクロスコンパイルするには、Makefileがターゲットマシン(この場合は「KDIR」)上のLinuxカーネルを認識している必要があります。ターゲットマシンのLinuxカーネルが保存されているアドレスにKDIRを構成します。
Makefileが認識する必要がある2番目のことは、CROSS_COMPILERとArchです。 Makefileでこれらを構成する必要はありません。 make
を実行するときは、引数としてそれらを渡すだけです。
make CROSS_COMPILE=arm-poky-linux-gnueabi- Arch=arm