ドライバーのインストール: モジュール: x86/モジュール: 誤った再配置ターゲットをスキップ

ドライバーのインストール: モジュール: x86/モジュール: 誤った再配置ターゲットをスキップ

私の状況:

Fedoraを実行する事前構築されたカーネルをインストールして実行しました。 can-devドライバモジュールに依存するmcp251xおよびmcp25xfdドライバモジュールをインストールしようとしているので、そのモジュールもインストールする必要があります。明らかに、このモジュールのソースコードはそのバージョンのカーネルソースに存在しますが、私の推測では、カーネルのコンパイル中に.configファイルを介して「アクティブ」になっていないようです。したがって、これはポストドライバモジュールをインストールしようとします。

私はこんなことをしたことがないので、もっと簡単な方法があれば指導お願いします。

私が試したこと:

まず、/lib/modules ディレクトリに移動し、3 つのモジュールがすでに存在し、インストール可能であることを確認します。そのうちの1つが見つかりました:can-dev.ko.xz

だからインストールします:

$ sudo insmod can-dev.ko.xz

それはすべてです。エラーメッセージはありません。他の2つのモジュールでは、ソースコードとmakefileが表示されますが、「make」を呼び出すと「ターゲットなし」というメッセージのみが表示され、ビルドに失敗します。

次に uname -a を使ってバージョンを確認しました。

Linux fedora 5.11.3-300.fc34.x86_64

だから私は5.11.3のソースコードをダウンロードしようとしました。https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/refs/tags

現在のコンパイラのバージョンを確認してください。

$ gcc --version
$ gcc (GCC) 11.0.0 20210210 (Red Hat 11.0.0-0) 

カーネルの構築に使用されたgccのバージョンと同じであることを確認しました。

$ cat /proc/version
$ gcc (GCC) 11.0.0 20210210 (Red Hat 11.0.0-0)

だから明らかに、ドライバフォルダに行ってmakefileがあっても「make」を呼び出すことはできません。ドライバ makefile とカーネル makefile はともに絡み合っているので、カーネルソースルートに移動して Makefile を変更します。

EXTRAVERSION = -300.fc34.x86_64

これにより、モジュールの「vermagic」文字列が現在インストールされているオペレーティングシステムのバージョンと互換性があります。

次に、カーネルソースのルートディレクトリから次を呼び出します。

$ make oldconfig

これで .config ファイルが生成されます。 .configファイルを手動で編集して、次の行を追加しました。

CONFIG_CAN_MCP251X=m
CONFIG_CAN_MCP251XFD=m

これはカーネルにMCP251xとMCP251xfdをモジュールとしてビルドするように指示します(デフォルトはまったくビルドしません)。

それから私は電話します

$ make prepare

次に、ビルドしたい特定のドライバディレクトリ(CコードとMakefileが含まれています)にCDを移動し、次のコマンドを呼び出します。

$ make -C ~/linux-5.11.3 M=`pwd` modules

現在のディレクトリにカーネルモジュールのみが構築されていることを示すいくつかの特殊パラメータを使用してkernel-source-root Makefileを呼び出します。これは動作し、mcp251xfd.koとmcp251x.koファイルを生成します。

次のモジュールをインストールしようとしています。

$ sudo insmod mcp251x.ko
$ sudo insmod mcp251xfd.ko

ただし、どちらも次のエラーメッセージを返します。

insmod: ERROR: could not insert module mcp251xfd.ko: Invalid module format

そして電話してください

$ dmesg

返品:

module: x86/modules: Skipping invalid relocation target, existing value is nonzero for type 1, loc 00000000abe7d4fb, val ffffffffc10b3a77

私がチェックする唯一のことは、マジックナンバーがuname -r numberと一致するかどうかです。

$ uname -r
5.11.3-300.fc34.x86_64

モジュールを確認してください。

$ modinfo mcp251xfd.ko
vermagic: 5.11.3-300.fc34.x86_64

それで、何をすべきか、このドライバをインストールしようとしているのかわかりません。

ベストアンサー1

このカーネルはディストリビューションlinux-5.11.3が提供するカーネルとは異なる5.11.3-300.fc34ため-300.fc34、大きな違いがあります。 RHアップデートが追加されました。

Fedora 34に見えるカーネルソースをダウンロードするには、yumを使用してください。

ディレクトリを変更して/usr/src/<source dir>から、make oldconfig && make menuconfigまたはmake oldconfig && make xconfig検索を実行するNetworking Support->CAN bus subsystem support->CAN device drivers->CAN SPI Interfacesと、リストされているデバイスを見つけて選択します。

これが完了すると実行でき、make modules modules_install && depmod -aカーネルモジュールは/lib/modules

ただし、カーネルモジュールの署名が正しくあると、まだ読み込まれない可能性があります。

その場合、1つのオプションはカーネルを完全に再構築してインストールすることです。

もう1つの方法は、次のカーネルアップデートでこれらのモジュールを有効にするようにRHに要求することです。

あるいは、独自のCA証明書とコード署名証明書を生成して新しいモジュールに署名した後、親証明書をUEFI DBにロードすることもできます。

UEFI が次のように構成されていないことを確認できます。secure boot

手が汚れます…

すべて隠したようですが…

しかし、あなたのコンピュータに本当にこのモジュールが必要ですか?

おすすめ記事