如何知道我的系统上缺少哪些驱动程序?

如何知道我的系统上缺少哪些驱动程序?

当我在笔记本电脑上安装 Linux 时,它通常会立即安装所有驱动程序,但最近在执行部分操作时pacman -Syu显示的消息是:

...
  -> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: aic94xx
==> WARNING: Possibly missing firmware for module: wd719x
  -> Running build hook: [keyboard]
...

这让我思考,作为用户,我如何找出系统的哪些部分缺少驱动程序?我知道我可以使用lspci -v等来列出正在使用的驱动程序,但我特别询问那些没有安装固件/驱动程序的组件,例如上面的两个,以便我可以使用该信息来搜索如何解决这些问题。

答案1

模块可能缺少固件的警告。这意味着系统有一个模块,但其某些固件未安装,某些二进制 blob 或其他分发问题就是这种情况。

请注意此处 aic94xx 的驱动程序固件https://aur.archlinux.org/packages/aic94xx-firmware/没有开源许可证。因此,警告会提醒您,您安装的模块不存在固件,因此没有正确的方法来检测与其兼容的硬件。当您收到这些警告时,表明模块已安装,但当前系统可能有也可能没有使用它们的设备。

因为驱动程序实际上是模块的一部分,所以需要检查每个设备方案中使用的驱动程序类型。事实上,模块也可以相互依赖,并且内核本身存在一些“驱动程序”。

从技术上讲,总线设备会向内核通知新设备,并且这些设备会加载支持该设备的模块。然后,设备驱动程序使用总线以及设备的主要编号和次要编号在 DEVfs 中创建设备节点,但该系统有很大的局限性。在实践中,人们还希望自动加载模块作为事件和规则。 Udev 使用总线/设备名称的模块别名,然后根据需要加载模块并创建设备文件。

使用udevadm info -a /dev/<device file>将提供已加载的每个设备的信息。 SUBSYSTEMS= 正在使用的 Linux 的核心部分,DRIVERS= 正在使用的驱动程序。然后,udev 在“/lib/modules/ uname -r/modules.alias”中将这些字段中的所有名称用作别名。

正如您所看到的,不清楚哪些设备未加载,因为例如可以加载支持数百个设备(以别名形式)的模块,但仅为一个设备加载。

相关内容