私は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