GNU/Linux >> Linux の 問題 >  >> Linux

すべてのカーネル リリースと互換性があるように Linux カーネル モジュールをビルドするにはどうすればよいですか?

要するに :あなたはほとんど 比較的幅広いバージョンのカーネルにロードできる便利なカーネル モジュールを作成できます。

CONFIG_MODVERSIONS でコンパイルされたカーネルに対してモジュールをビルドする場合 (あなたの場合のように)カーネルからエクスポートされたすべてのシンボルについて、このシンボルのCRCはモジュールのファイルに保存されます。 CRC はある種の コントロール サム 、特に、関数のパラメーターに使用される型のレイアウトを考慮します。たとえば、架空の struct A のレイアウトの場合 2 つのカーネルで異なり、関数 f(struct A *a) の CRC これらのカーネルでも異なります。

モジュールが実行中のカーネルにロードされると、モジュール内のすべての関数の CRC がカーネルの CRC と比較されます。それらが異なる場合、カーネルはモジュールのロードを拒否します。このメカニズムの詳細については、カーネルのドキュメント (Documentation/kbuild/modules.txt) を参照してください。

したがって、モジュールを 2 つの異なるカーネルにロード可能にするには、両方のカーネルでパラメーターが同じレイアウトを持つ関数のみに制限されます。特に struct module 型のレイアウトの場合 両方のカーネルに対して単一のモジュールをロードすることはできません。

複数のカーネルに適したドライバーを提供するには、いくつかの方法があります。最も簡単な方法は、ドライバーの情報源を提供することです それらを dkms に追加します .このように、実行中のカーネルにドライバーがビルドされていない場合、ドライバーは自動的にコンパイルされます


Linux
  1. rpmパッケージをビルドする方法

  2. Linuxで.rbで終わるすべてのファイルを見つける方法は?

  3. Linuxでpipを使用してすべてのユーザーにモジュールをインストールするには?

  1. 例を使用してLinuxでRmmodコマンドを使用する方法

  2. Linux –どのモジュールがカーネルを汚染しているかを判断する方法は?

  3. Linux – Linuxの汚染されたカーネル?

  1. Linux –カーネルモジュールを適切にリロードする方法は?

  2. Linuxで777権限を持つすべてのファイル/フォルダを見つける方法は?

  3. 簡単な例で独自の Linux カーネル モジュールを作成する方法