無効なモジュール形式エラー

無効なモジュール形式エラー

makeコマンドの後にコマンドを呼び出してsudo insmod example1.koパスワードを入力すると、次のエラーが発生します insmod error: could not insert module example1.ko: Invalid module format。私のUbuntuバージョンは5.8.0-44-generic、example1.koバージョンはです5.8.0-38-generic。たぶん、このバージョンは私のバージョンと同じでなければなりませんか? Makefileをからに/lib/modules/($ shell uname -r)/build 変更しようとしましたが、/lib/modules/5.8.0.-38-generic/build まだ同じエラーが発生します。この問題を解決する方法がわかりません。

dmesgコマンドを使用して問題に関する詳細情報を検索したところ、いくつかのエラーが見つかりました。

example1: version magic '5.8.0-38-generic SMP mod_unload' should be '5.8.0-44-generic SMP mod_unload'

同じ問題と2つのエラーがある6行がありますFailed to send host log message

私のMakefileは次のようになります。

obj-m := example1.o

default:
  make -C /lib/modules/5.8.0-44-generic/build M=$(PWD) modules
clean
  make -C /lib/modules/5.8.0-44-generic/build M=$(PWD) clean

走ったmake clean ; makeけど何も効かなかった。

答え1

この質問に対するコメントを通して、ここにまとめる解決策が生まれました。

OPはLinuxカーネルモジュールを構築しようとしました。間違ったバージョンのカーネルソース(つまり、実行中のカーネルとは異なるカーネルソースバージョン)用にビルドしました。これはバッファのログに表示されますdmesg

問題を解決するには、モジュールをロードするカーネルに対応するカーネルソースコードを指す必要があります。コマンドラインからこれを明示的に実行できます。

$ make -C <path_to_kernel_src> M=$PWD

またはMakefile同じ機能を持つものを作成します。

正しいカーネルソースに対してビルドを試みる前に、以前のビルドの既存の成果物をすべてクリーンアップする必要があります。

関連情報