2

簡単な hello world カーネル モジュールを作成しました。メイクファイルは私が以下のように書きました:

obj -m += hello.o

KDIR: /usr/src/linux-headers-3.2.0-21-generic-pae

all:
     $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

clean:
     rm -rf *.o *.ko *.mod.* *.symvers *.order

次に、make を使用してモジュールをコンパイルしました。それはうまくいきました。

そして、最近、カーネルが 3.2.0-24 にアップデートされたときに、再度「make」を実行しました (もちろん、KDIR でバージョンを 24 に変更しました)。しかし、次のエラーが発生しました。

make[1]: Entering directory `/usr/src/linux-headers-3.2.0-24-generic-pae'
make[2]: *** No rule to make target `arch/x86/tools/relocs.c', needed
by `arch/x86/tools/relocs'.  Stop.

確認したところ、relocs の実行ファイルが /arch/x86/tools/ にあることがわかりましたが、relocs.c はありませんでした。

モジュールを正常にコンパイルするには、どのように修正すればよいですか?

4

6 に答える 6

1

あなたが書いた hello-world モジュールのコードを共有してください。

relocs.c は、カーネル src 内の arch/x86/tools の下にあります。

マシンに linux-headers しかインストールされていないため、relocs.c ファイルが表示されない場合があります。カーネル src 全体をダウンロードする必要があります。

次の手順を実行します:

$ sudo apt-get update

$ sudo apt-get install linux-source.

試行として (カーネル src をダウンロードした後)、KDIR がカーネル ディレクトリ全体を指すように makefile を変更してから、モジュールをビルドできます。

于 2013-01-03T05:10:02.683 に答える
0

should be KDIR:=and not KDIR:AlsoSUBDIRS= は非推奨です。使用するM=$(PWD)

于 2012-12-24T11:20:46.807 に答える
0

私はあなたと同じ問題に遭遇しました.Makefileのビルドコマンドを置き換えることで修正しました.

make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
于 2013-12-18T03:43:29.360 に答える
0

問題は Makefile にあると思います。以前にこの問題に遭遇したことがあります。トレイル スペースを削除し、タブ \t に置き換える必要があります。これで問題ありません。この助けを願っています。

Makefile 構文である可能性があります。

于 2013-06-06T07:02:48.213 に答える
-1

make ファイルで、M=$(PWD) を M=$(shell pwd) に変更するだけです...

魅力のように動作します

于 2013-03-12T10:35:15.727 に答える