私のラップトップが実際にどのファームウェアを使用しているかを確認する方法を探しています(たとえば、ハードウェアをサポートするバイナリブロブ)。
私のディストリビューションarchlinuxでバイナリブロブをバンドルするパッケージは次のとおりです。
core/linux-firmware
(パッケージサイズ〜180MiB、〜2500 Blobファイルにインストールされている〜730MiB)
とにかく、私のラップトップはこれらのファイルのほんの一部しか使用していないようです。問題は、これを決定する方法を見つけることです。一部のオンライン検索では、単に針のみをgrep
交換することを提案しています(dmesg
firmware
https://wiki.gentoo.org/wiki/Linux_firmware#Searching_for_loaded_firmware)。これはいくつかの洞察を提供しているようですが、これが最善/唯一/正しいアプローチであるかどうかはわかりません。私の考えでは
- 「ファームウェア」という単語は、
dmesg
実際のバイナリブロブとは無関係のコンテキストで出力に表示されます。 - ファームウェアのロード情報を表示するとき、さまざまなカーネルソースコードセクションの統合出力はありません(わかりません)。
[root@thinkbox ~]# dmesg -iファームウェア| [0.111955] Spectre V2: ファームウェア呼び出しに対して制限付き推測を有効にする [0.161877] ACPI:[ファームウェアエラー]:BIOS_OSI(Linux)クエリが無視されました。 [10.440450]プラットフォームRegulator.0:Regulatory.dbの直接ファームウェアロードがエラー-2のために失敗しました。 [10.493359]i915 0000:00:02.0:[drm] DMC ファームウェアのロード完了 i915/skl_dmc_ver1_27.bin(v1.27) [10.581810] iwlwifi 0000:04:00.0: ロードされたファームウェアバージョン 36.ca7b901d.0 8000C-36.ucode op_mode iwlmvm [10.766097] Bluetooth:hci0:ファームウェアリビジョン0.0ビルド10週41 2018 [11.947004] psmouse serio2:トラックポイント:IBM TrackPointファームウェア:0x0e、ボタン:3/3 [4855.262357] Bluetooth:hci0:最小ファームウェアバージョン2014年10月1週 [4855.268828] Bluetooth: hci0: デバイスファームウェア発見: intel/ibt-11-5.sfi [4857.277466] Bluetooth:hci0:ファームウェアのダウンロードが完了するのを待っています [4857.278204] bluetooth: hci0: 1962276 usecsにロードされたファームウェア [4857.297293] Bluetooth:hci0:ファームウェアリビジョン0.0ビルド10週41 2018 [20995.531309] Bluetooth:hci0:最小ファームウェアバージョン1 2014年10月10日 [20995.531314] Bluetooth: hci0: デバイスファームウェア発見: intel/ibt-11-5.sfi [20997.352132] Bluetooth:hci0:ファームウェアのダウンロードが完了するのを待っています [20997.352924] Bluetooth: hci0: 1778914 usecsにロードされたファームウェア [20997.370079] Bluetooth:hci0:ファームウェアリビジョン0.0バージョン2018-10-41 [22827.736960] Bluetooth:hci0:最小ファームウェアバージョン1 2014年10月1日 [22827.737757] Bluetooth: hci0: デバイスファームウェア発見: intel/ibt-11-5.sfi [22829.202536] Bluetooth:hci0:ファームウェアのダウンロードが完了するのを待っています [22829.202753] Bluetooth: hci0: ファームウェアがロードされました 1430656 usecs [22829.219920] Bluetooth:hci0:ファームウェアリビジョン0.0バージョン10 2018年41駐車
編集:出力スクリーンショットをテキストコピーに置き換えました。
答え1
これはおそらくそれを見つける最も最悪の方法であり、最も簡単な方法です:
sudo mv /lib/firmware /lib/firmware.bak
- 再起動
dmesg
見つからないファームウェアファイルを確認してください。sudo mv /lib/firmware.bak /lib/firmware
- egを作成し
/lib/firmware.needed
、そのディレクトリにファイルをコピーします/lib/firmware
(必要なディレクトリ構造を維持しながら)。 - その後、パッケージを削除して
mv /lib/firmware.needed /lib/firmware
。
これで準備ができました。
この操作を自動的に実行する魔法のコマンドはありません。ちょうど使用を考えることができますinotifywait -r /lib/firmware
初期開始して出力を記録する間、これははるかに複雑になります。使用している場合initrd
(そしてほとんどの人が使用している場合)、より複雑です。
@MarcusMüllerは、試してみるとてもきれいなアイデアを提供します。ルートファイルシステムのオプションを有効にして再起動し、atime
次のコマンドを実行します。
find /lib/firmware -atime -1
理論的には、これは過去24時間にアクセスされたすべてのファイルを表示し、必要な/lib/firmware
すべてのファームウェアファイルを含める必要があります。
答え2
AFAIK、標準の Linux カーネルを使用して /lib/firmware を最後に更新してから少なくとも 2 日が経過した場合は、再起動して以下を実行する方が簡単です。
find /lib/firmware -atime 2
たとえば、ファームウェアが必要なスキャナがあり、最近開かれていない場合、上記のコマンドはそのファームウェアを一覧表示しません。
このコマンドは、Linuxカーネルのデフォルト値が「lazyatime、relatime」に設定されているために機能します。これは、(a)ファイルが最後に変更または変更された後に最初にファイルにアクセスした場合、または(b)ファイルに長時間アクセスした場合を意味します。 10分を超えると、24時間で初めて「atime」が更新されます。このコマンドは、「man find」で説明されている丸めの理由を達成するために「-atime 2」を使用します。カーネルがファームウェアを再ロードするには、再起動が必要です。
うまくいかない場合は、「/etc/fstab」を更新して、rootfsの「noatime」と同様のマウントオプションを、ほとんどすべてのユースケースに最適な「lazyatime」に置き換えてください。