私はUbuntuの下でカスタムカーネルをコンパイルしています。カーネルがどこでファームウェアを探すべきかわからないという問題が発生しています。 Ubuntu 8.04の下では、ファームウェアはドライバモジュールと同じ方法でカーネルバージョンに結びついています。私は応じ2.6.24-24-ジェネリックUbuntuのカーネルをコンパイルLinuxカーネルはドライバのファームウェアを探す場所をどのように知っていますか?
/lib/firmware/2.6.24-24-generic
:たとえば、カーネル2.6.24-24-一般的な店舗でのカーネルモジュール:
/lib/modules/2.6.24-24-generic
とでそのファームウェア「Alternate Build Method: The Old-Fashioned Debian Way」適切なモジュールディレクトリがあり、私のIntelワイヤレスカード(ipw2200モジュール)などのファームウェアが必要なものを除き、すべてのデバイスが機能します。
カーネルログはipw2200ファームウェアをロードしようとすると、ファームウェアのローディングを制御するカーネル・サブシステムがそれを見つけることができないことを例えば示す:
:ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection
ipw2200: ipw2200-bss.fw request_firmware failed: Reason -2
errnoに-base.hは、これを定義します
#define ENOENT 2 /* No such file or directory */
(ENOENTを返す関数は、その前にマイナスを置きます。)
私はカーネルの名前が指摘/ libに/ファームウェアでシンボリックリンクを作成してみましたしかし2.6.24-24ジェネリックディレクトリにも同じエラーが発生しました。このファームウェアは、インテルが提供し、Ubuntuによってパックされた非GPLです。私はそれが特定のカーネルバージョンとの実際のつながりを持っているとは思わない。 cmp
は、さまざまなディレクトリのバージョンが同一であることを示しています。
カーネルはどのようにファームウェアを探すべきかを知っていますか?
更新
私は、しかし、それはもはやUbuntuは/etc/hotplug.d
を排除しているように動作し、もはや/usr/lib/hotplug/firmware
にそのファームウェアを格納し、私がいる正確な問題にthis solutionは認められませんでした。
アップデート2
いくつかのより多くの研究は、いくつかのより多くの答えを上げ。 udev
のバージョン92まで、プログラムfirmware_helper
がファームウェアのロード方法でした。 udev
93で始まるこのプログラムは、私が知る限り同じ機能を提供するfirmware.shという名前のスクリプトに置き換えられました。両方とも、ファームウェアパスを/lib/firmware
にハードコードします。 Ubuntuはまだ/lib/udev/firmware_helper
バイナリを使用しているようです。
ファームウェアファイルの名前は、環境変数$FIRMWARE
のfirmware_helper
に渡され、/lib/firmware
のパスに連結され、ファームウェアのロードに使用されます。
ファームウェアをロードするために、実際の要求は、システムコールを介してドライバ(私の場合はipw2200)によって構成されています。どこか$FIRMWARE
環境変数を見てrequest_firmware
とfirmware_helper
を呼び出すドライバーの間で今
request_firmware(..., "ipw2200-bss.fw", ...);
、カーネルパッケージ名がファームウェア名の前に追加されています。
誰がやっているのですか?
誰かがこの質問を閉じるために投票した理由を説明するコメントを追加できますか?フィードバックに感謝します。 –
「serverfault.comに所属している」ため、投票の投票が行われています。それはプログラミングに関するものではなく、むしろ管理に関するものであるため、これは両方のサイトの使命に関する記述と一致しています。 – ephemient
フィードバックいただきありがとうございます。カスタムカーネルを構築しようとしているときに問題が発生していたので、これをプログラミングの問題と考えていました。なぜ私はいくつかの良い推測があると思うが、誰かがこれをプログラミング関連ではないと考える理由を知りたいのですが。 –