
私の状況:
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
手が汚れます…
すべて隠したようですが…
しかし、あなたのコンピュータに本当にこのモジュールが必要ですか?