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

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

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

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

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

ティア!

答え1

私はカーネルソース、特に を読んでdrivers/base/firmware_class.c、次のことを発見しました。

CONFIG_FW_LOADER_USER_HELPER 

ファームウェアロードバリアントをアクティブにしますudev(明らかにudevが動作しているときにロード可能なモジュールにのみ使用可能)。しかし、韓国語これは時代遅れの方法のようです。

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

答え2

、、およびCONFIG_FIRMWARE_IN_KERNELカーネル設定オプションを使用して、ファームウェア イメージをカーネル自体に組み込むことができます。これは、実行時にユーザー空間からファームウェアを提供できない、または提供したくない場合に便利です (たとえば、問題のファームウェアがブート デバイスへのアクセスに必要であり、initrd を使用しない場合など)。CONFIG_EXTRA_FIRMWARE_DIRCONFIG_EXTRA_FIRMWARE

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

関連情報