Beaglebone (Linux、ARM) 用の外部モジュールをクロスコンパイルしようとしています。カーネル バージョンの問題を回避するために、カーネル tarball を取得し、ホスト マシン (x86) 上の CodeSourcery ツールチェーンを使用して ARM 用にクロスコンパイルしました。次に、まったく同じツールチェーンを使用して、まったく同じカーネル ソースに対して外部の hello-world モジュールをクロスコンパイルしました。この単純なメイクファイルを使用しました:
obj-m += hello-1.o
all:
make -C /home/***/****/linux-3.2.0-beaglebone-20120411.00
M=$(PWD) modules
clean:
make -C /home/***/****/linux-3.2.0-beaglebone-20120411.00 M=$(PWD) clean
ko-file をターゲットにコピーして insmod しようとすると、次のようになります: "insmod: error inserting 'hello-1.ko': -1 Invalid module format" (このグループや他の場所で学んだことから) 通常は競合するカーネルバージョンに起因し、実際にターゲットの uname -a は次のようになります。
Linux ビーグルボーン 3.2.18 #1 水 5 月 30 日 14:21:54 CEST 2012 armv7l GNU/Linux
一方 modinfo hello-1.ko は次のようになります:
srcversion: 140276773A3090F6F33891F 依存:
vermagic: 3.2.0+ mod_unload modversions ARMv5 p2v8
つまり、バージョン 3.2.18 対 3.2.0+ (なぜ + なのか?) と armv7l 対 ARMv5!
同じカーネルソース (おそらくいくつかの構成) に対してコンパイルしたにもかかわらず、異なるバージョンを取得する理由を誰かが知っていますか?
どんな提案でも大歓迎です!
最高、クリス