2

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!

同じカーネルソース (おそらくいくつかの構成) に対してコンパイルしたにもかかわらず、異なるバージョンを取得する理由を誰かが知っていますか?

どんな提案でも大歓迎です!

最高、クリス

4

1 に答える 1

1

答えは、ビーグル ボードでコンパイルしたカーネルを実行する必要があるということです。

「+」は、ソース ツリーを変更したことを意味します。

最後に、正しい defconfig を使用していることを確認してください。「make beagle_defconfig」が機能するはずです。

于 2012-07-19T10:00:21.220 に答える