如何列出内核支持的所有硬件

如何列出内核支持的所有硬件

我想查看正在使用的内核支持的所有硬件。例如,如果我有 3.8.xx 版本的 Linux 内核,我如何知道那里支持哪些硬件。lspcilshwlscpu和等工具dmidecode仅检查当前使用的硬件,并且尝试使用加载的模块来查找它lsmod也不方便。

我想要的是检查正在使用的内核实际支持的所有硬件,而不考虑我是否正在使用该硬件。

目前我想到了这样的事情:

  • 读取/lib/modules/3.8.0-5-generic/kernel/drivers并解析每个文件。
  • 下载内核的 git 源代码并通过 grep 获取有关此信息的信息。
  • 任何其他疯狂且漫长的做法。

还有其他更小的方法可以实现这一目标吗?

答案1

您可以调用modinfo所有可用的模块。这会打印模块的别名。该模块的一个别名e1000e是这个(还有很多别名):

pci:v00008086d00001559sv*sd*bc*sc*i*

这意味着应该为具有供应商 ID 的 PCI 设备加载它8086和设备 ID第1559章。 USB 设备的模式看起来类似。

答案2

我想要的是检查正在使用的内核实际支持的所有硬件,而不考虑我是否正在使用该硬件。

如果您有.config构建内核所用的文件,您可以下载源代码并运行make menuconfig,这将使您了解 A) 可以为哪些硬件配置内核(但请参阅笔记),以及 B) 您的内核实际配置的硬件。

制作菜单配置

所以要做到这一点:

  1. 下载源代码。您的发行版可能有一个软件包,或者您可以从内核.org;找到您的版本uname -r
  2. 找到.config适合您的内核的。如果您通过发行版获得了源代码,那么它有望被包含在内;您也许还可以在 /boot 中的某个位置找到它。更好的是:现在发行版内核通常是使用该/proc/config.gz功能构建的。如果存在,请将其复制出来,解压缩,重命名该文件.config并将其复制到内核源代码树的顶层。
  3. make menuconfig从源树的顶层内部运行。你将需要 ncurses发展软件包已安装 (ncurses-devncurses-devel) 并且您需要是 root。

在使用 menuconfig 时,除了更改文件内容之外.config,您不能做任何坏事,这并不重要(只是以后不要将自己与它混淆)。

笔记: 其实你看不到全部同时可能的硬件配置,因为根据在其他地方选择的内容,一个地方可能会出现不同的选项。内核配置有点迷宫。但是,您肯定会看到实际选择的所有内容(M意味着它是一个模块,*意味着它是内置的)。

答案3

我不相信你正在寻找的东西是可能的;例如,假设采用模块化内核,许多模块如果无法实际找到它们支持的硬件,则将无法初始化自身。所以他们会悄悄地流产。

自动解析内核源代码以查找硬件名称/版本/型号将是一项艰巨的任务。尽管有常见的子系统(例如串行、scsi、usb),但代码不一定统一。你很快就会明白这一点。

相关内容