Linux ファームウェア
Linux ファームウェアは、特定のハードウェアデバイスの一部または全体を機能させるために必要なファームウェアバイナリブロブを含み、Linux カーネルとまとめて頒布されているパッケージです。ハードウェア製造元の中には、ファームウェア自身をビルドするために必要なソースコードをリリースしていないところもあるため、これらのバイナリブロブはふつうはプロプライエタリです。
AMD と NVIDIA による現代的なグラフィックカードはほぼ確実に、ハードウェアを正しく動作させるためにバイナリブロブがロードされていることを要求します。
Broxton (Skylake ベースのマイクロアーキテクチャ) 以降、Intel CPU は追加の低電力アイドル状態 (DMC)、多様な並列グラフィックスエンジン上でのワークロードスケジューリング (GuC)、そして一部のメディア機能の負荷を CPU から GPU に退避させる (HuC) ために、バイナリブロブを必要とします。[1]
さらに、現代的な Intel Wi-Fi チップセットはほとんど必ずブロブを必要とします。[2]
インストール
セキュリティ上の理由から、実行中のカーネルにファームウェアをホットロードするのは避けられています。systemd のような現代的な init システムでは、ユーザ空間からファームウェアをロードすることはとてもおすすめできません。
カーネル
GPL の条項下では、ファームウェアファイルをバイナリカーネルイメージに含めることはできません。そのようなイメージが頒布された場合、GPL 違反につながるおそれがあります。sys-kernel/linux-firmware に由来するファームウェアファイルを含むカーネルを頒布する前に、法律家に相談するのが賢明です。
Linux カーネル内に特定のデバイスのためのファームウェアサポートを組み込む場合は、いくつか考慮すべき重要なオプションがあります (4.18 以降のカーネルについて):
- Firmware loading facility (CONFIG_FW_LOADER)
- このオプションは、in-tree モジュールはどれもユーザ空間ファームウェアロードのサポートを必要としないが、out-of-tree でビルドされたモジュールは必要とする、という場合のために提供されています。
- Build named firmware blobs into the kernel binary (CONFIG_EXTRA_FIRMWARE)
- このオプションは文字列で、カーネルに組み込むファームウェアファイルの名前を、スペース区切りで受け取ります。そうすると、これらのファイルは実行時にカーネルからアクセスできるようになるでしょう。
Device Drivers ---> Generic Driver Options ---> Firmware loader ---> -*- Firmware loading facility () Build named firmware blobs into the kernel binary # Optional: Enable compressed firmware support [*] Enable compressed firmware support [*] Enable XZ-compressed firmware support [*] Enable ZSTD-compressed firmware support
USE フラグ
USE flags for sys-kernel/linux-firmware Linux firmware files
+initramfs
Create and install initramfs for early microcode loading in /boot (only AMD for now)
+redistributable
Install also non-free (but redistributable) firmware files
bindist
Flag to enable or disable options for prebuilt (GRP) packages (eg. due to licensing issues)
compress-xz
Compress firmware using xz (app-arch/xz-utils) before installation
compress-zstd
Compress firmware using zstd (app-arch/zstd) before installation
deduplicate
Create symlinks for all firmware that is duplicate using rdfind
dist-kernel
Delegate microcode initramfs generation to sys-kernel/installkernel
savedconfig
Allows individual selection of firmware files
unknown-license
Install firmware files whose license is unknown
emerge
root #emerge --ask sys-kernel/linux-firmware選択可能: savedconfig
sys-kernel/linux-firmware を emerge すると、設定ファイルが /etc/portage/savedconfig/sys-kernel/linux-firmware-ddmmyyyy に作成されます。このファイルを編集して、不要な行をコメントアウトまたは削除することができます。ファイルを編集したら保存して、sys-kernel/linux-firmware を savedconfig USE フラグ付きで再 emerge してください:
root #echo sys-kernel/linux-firmware savedconfig >> /etc/portage/package.use/kernelroot #emerge --ask sys-kernel/linux-firmware選択可能: 圧縮
カーネル内に搭載されるファームウェアは、容量効率と読み込み速度向上 (展開処理時間を犠牲にして) を達成するために、圧縮することができます。さらなる情報については CONFIG_FW_LOADER_COMPRESS カーネルシンボルを参照してください。
sys-kernel/linux-firmware は、適切な USE フラグを介して、xz または zstd (Linux カーネル 5.19 以降[3] ) 圧縮をサポートしています。これらの圧縮フォーマットをサポートするためには、カーネル設定で CONFIG_FW_LOADER_COMPRESS_XZ や CONFIG_FW_LOADER_COMPRESS_ZSTD のオプションを含めるべきです。
トラブルシューティング
ロードされているファームウェアを検索する
どのファームウェアがロードされているか判断するには dmesg を利用できます:
root #dmesg | grep -i firmwareこのためには、Gentoo カーネル (バニラカーネルではなく) を使用していて、カーネルコンフィギュレーションで CONFIG_GENTOO_PRINT_FIRMWARE_INFO=y が設定されている必要があります。
削除
unmerge
root #emerge --ask --depclean --verbose sys-kernel/linux-firmware関連項目
- Fwupd — a daemon that provides a safe, reliable way of applying firmware updates on Linux.
- Kernel — Gentoo オペレーティングシステム (OS) の中心部分
- Iwlwifi — Intel の現行の無線チップのための無線ドライバです。
- Microcode — describes various ways to update a CPU's microcode in Gentoo.
- AMDGPU — AMD Radeon およびその他の GPU のためのオープンソースグラフィックスドライバです。
- Intel — Intel 810 により始まった Intel GMA オンボードグラフィックスカード、Intel 内蔵 GPU (iGPU)、および Intel Arc ディスクリートグラッフィクスカードのための、オープンソースのグラフィックスドライバです。