Linux カーネル ドライバー (カーネル オブジェクト KO) をソース コードで提供し、ターゲット コンピューター上でビルドしてインストールするのが一般的な方法です。たとえば、NVIDIA ディスプレイ ドライバーや Oracle VirtualBox ゲスト アドオン ドライバーは、この方法でインストールされます。また、システム更新を通じて新しいバージョンのカーネル (適切なヘッダー付き) を受け取ることも一般的です。この場合、KO を再構築して再インストールする必要があります。そうしないと、更新後にデバイスが動作しなくなります。
製品インストールの起動スクリプトに、起動のたびに KO を作成してインストールする手順を追加します。ユーザーはオプトアウトを選択することもできますが、その場合は KO を手動でビルドしてインストールする必要があります。デバイス ドライバーは USB デバイスと通信します。
関連詳細:
実際の再構築は、新しいカーネルがインストールされたときに 1 回だけ実行されます。これは、make が既に存在し最新のファイルを再構築しようとしないためです。
ドライバーの再構築には約 2 秒かかり、通常の起動中にビルドをスキップするには数ミリ秒かかります (カーネルの更新後ではありません)。
万が一ビルドが失敗した場合でも、システムがクラッシュしたり不安定になったりすることはありません。ただし、ハードウェア デバイスは動作しません。
一部のディストリビューションでは、フックを登録して、カーネルの更新などの特定のイベントでアクションを実行できます。ただし、ほとんどのディストリビューションで統一された方法で動作するものを実装しようとしています。インストーラーは、スクリプト + tar またはスクリプト + rpm です。残念ながら、このリリースでは、すべてのディストリビューション (Debian スタイルなど) のネイティブ パッケージを準備する余裕がありません。
質問:
これは受け入れられる解決策でしょうか? そうでない場合、その理由は何ですか?
このアプローチに伴う潜在的なリスクは何ですか?
起動時に make を実行する正しい/推奨される場所はどこですか? rc.local ですか、それとも init.d の下のスクリプトですか、それとも他の場所ですか? 目標は、同じ方法を使用してほとんどのディストリビューションで動作させることです (可能な場合)。
答え1
この正解は昨日 ServerFault で Rosco によって提供されました。
はい、ただし、スクリプトが正常に返されることを確認できるように、スクリプトを手動で実行する方法を明確に説明したハウツーを追加する必要があります。CentOS の VirtualBox の場合、/etc/init.d に vboxdrv というスクリプトが追加されます。
/etc/init.d/vboxdrv {start|stop|stop_vms|restart|force-reload|status|setup}
これは明らかです。スクリプトを開始/停止してそのステータスを取得できるので、展開する前に新しいカーネルでスクリプトをチェックできる限り、再起動時に問題が発生するリスクは最小限に抑えられます。これ以上の標準はありません。私にとっては完璧です。
コンパイル プロセスがシステム的に失敗し、モジュールが利用できません。これは悲惨なことですか? そうは思いません。スクリプトがマシンをハングさせず、/var/log/mymodule にコンパイル失敗の完全なログが記録されている限り、これ以上のことはありません。
1. を参照してください - CentOS/RHEL/Fedora の場合)、vboxdrv は /etc/init.d/vboxdrv から実行され、ディストリビューション名をチェックし、それに応じていくつかのスクリプトをソースします。デーモンに関する詳細情報が必要な場合は、まず /etc/init.d をチェックします。これで十分です。