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
|
Enable subslot rebuilds on Distribution Kernel upgrades |
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/kernel
root #
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 を利用できます:
user $
dmesg | grep -i firmware
削除
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 — オペレーティングシステムの中核
- Iwlwifi — Intel の現行の無線チップのための無線ドライバです。
- Microcode — describes various ways to update a CPU's microcode in Gentoo.
- AMDGPU — AMD Radeon およびその他の GPU のためのオープンソースグラフィックスドライバです。
- Intel — Intel 810 により始まった Intel GMA オンボードグラフィックスカードおよび Intel Arc ディスクリートグラッフィクスカードのための、オープンソースのグラフィックスドライバです。