web-dev-qa-db-ja.com

Linuxは組み込みドライバーモジュールのファームウェアをどのようにロードしますか

ファームウェアサブシステムがudevdを使用して、作成されたsysfsの「データ」エントリにファームウェアをコピーすることを学びました。

しかし、udevdがまだ開始されていない組み込みドライバーモジュールの場合、これはどのように機能しますか?

3.14カーネルを使用しています。

TIA!

7
steffenp

カーネルソース、特に_drivers/base/firmware_class.c_を読んだところ、

_CONFIG_FW_LOADER_USER_HELPER 
_

udevファームウェアロードバリアントをアクティブにします(明らかに、udevが実行されている場合、ロード可能なモジュールでのみ使用できます)。しかし [〜#〜] lkml [〜#〜] で述べたように、これは古いメソッドのようです。

さらに、組み込みモジュールに必要なファームウェアは、正確にはfw_get_filesystem_firmware()からkernel_read()を介してinitramfsからロードされます。

1
steffenp

カーネル構成オプションCONFIG_FIRMWARE_IN_KERNELCONFIG_EXTRA_FIRMWARE_DIR、およびCONFIG_EXTRA_FIRMWAREを使用して、ファームウェアイメージをカーネル自体に組み込むことができます。これは、実行時にユーザースペースからファームウェアを提供できない、または提供したくない場合(たとえば、問題のファームウェアがブートデバイスにアクセスするために必要であり、initrdを使用したくない場合)に役立ちます。 )。

ファームウェアの読み込みに使用できるオプションの詳細な説明は次のとおりです。 https://wiki.tizen.org/wiki/Usage_and_Mechanism_of_kernel_function_%22request_firmware()%22#Load_firmware_from_kernel_image

0
Grodriguez