我的硬件所需的最小固件文件集是什么?

我的硬件所需的最小固件文件集是什么?

今天我得知我的发行版linux-unfree-firmware包大小为 491 Mb。我很确定我的硬件不需要所有这些文件。因此,我认为如果我只知道可以从那里排除哪些文件,我就可以减少磁盘使用量。

是否有任何官方文档,准确说明了哪些文件来自https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/每个设备/计算机型号都需要吗?也许我的计算机硬件的官方文档会说明这一点?有一个Linux 从头开始​​网页这提供了一些流行硬件的信息,但我想知道是否有更多的“官方”信息可用。

答案1

不幸的是,没有针对每一个硬件及其所需的固件文件的“官方”文档。但是,通过对 Linux 内核构建系统进行一些修改,可以准确地知道您的硬件需要哪些固件文件。

此外,即使您确实发现了硬件使用的固件文件,您最终也会得到一个不太短的文件列表,这些文件需要经常更新 - 在几乎每个版本(git 标签)之后https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/。这意味着您将无法直接从您很快将学习生成的列表中可靠地过滤出固件文件。

如果您仍然对此感兴趣,请按照以下步骤操作:

  1. 从以下位置下载最新版本的内核https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
  2. 跑步:make localmodconfig
    • 这将生成一个.config文件,其中包含根据当前内核的构建参数列表。
  3. 跑步make
    • 这将构建内核,因此可能需要一段时间。
    • 您可能需要安装一些依赖项才能完成构建。
    • 完成后make,您将得到一堆.ko文件,它们是内核模块文件。
  4. 运行这个命令:
find -name '*.ko' -exec modinfo {} \; | awk '$1 == "firmware:" { print $2}'

最后一个命令打印固件文件列表,这些文件可能会在您的发行版linux-unfree-firmware软件包中找到。这些是您的硬件所需的文件。

学分:https://lists.kernelnewbies.org/pipermail/kernelnewbies/2020-May/020818.html

答案2

对于这项任务,我喜欢中描述的详尽/内部方法这种方法
但是,当已经运行通用和模块化内核时,
按照您的建议使用 modinfo 缩小已安装的固件 blob 列表的范围,
这是一种快速而肮脏的方法:

lsmod | cut -d ' ' -f 1 | tr '_' '?' | xargs -I % find /lib/modules/ -name "%.*" | xargs -I % modinfo % | awk '$1 == "firmware:" { print $2}'

这:

  1. 列出加载的模块
    (请记住,此处省略了任何需要固件的内置内核模块)
  2. 提取第一列,并将名称中的“_”替换为单字符通配符,
    因为文件名通常会使用“-”
  3. 找到所述模块文件,并交给 modinfo
    来获取如您所建议的固件 blob 列表。

相关内容