内核内置了哪些设备驱动程序?


14

我最近在硬件设备上安装了供应商提供的嵌入式linux。当我lsmod在设备命令行上运行时,响应为空。导致我相信这意味着该设备上运行的硬件的驱动程序已内置在内核中,而不是.ko文件。我的问题是:这个过程如何发生?

对流行硬件的支持是否在后续版本中逐渐集成到内核中,从而替代了.ko文件?.ko文件是否仅用于支持发行时不具有内核集成驱动程序支持的新硬件?以我的有限知识,我认为所有硬件驱动程序都是.ko文件的形式,但显然这是错误的。

我对整个过程感到有些困惑,并希望澄清一下,因为我觉得我可能会以错误的方式看待这种情况。


Answers:


10

通常,对内核加载至关重要的核心驱动程序内置在内核中,而其他硬件驱动程序等则作为模块或.ko文件构建。

该.ko模块通常在存储/lib上的目录的根分区。要使用其中任何一种,内核必须首先能够检测和访问底层存储设备,然后才能访问其文件系统。因此可以安全地假设没有内置SATA / SCSI和ext2 / 3/4支持的内核不会真正启动;)

您可以选择将大多数内置的内核驱动程序切换为模块形式。Ubuntu内核团队决定是否修改Linux内核团队的默认配置,并为您下载的原始内核映像包含/排除其他内置驱动程序。

如果您构建自己的内核,则可以执行以下操作:

在此处输入图片说明

  • 在上面的屏幕截图中,*表示内置驱动程序,而M表示模块。
  • 默认情况下,内置了对系统启动必不可少的环回设备支持。
  • 默认情况下,低速USB驱动程序(USB 1.0)也是内置的,允许您启动USB记忆棒,但是在这里我将其更改为模块。

谢谢,这很有帮助。我猜想,当我最终为自己重新构建内核时,我将对此有更好的了解。
— mathematician1975

3

编译内核时,您可以配置要安装的组件。不仅如此,您还可以选择是否将其内置到内核中或将其作为模块。

例如,许多人在/ boot分区上使用ext2文件系统。因此,内核必须能够在引导时读取ext2文件系统。为了做到这一点,ext2模块内置在内核本身中。

现在,想象一下可用模块的数量。将它们全部内置到您的内核中是没有意义的,对吗?这就是为什么您可以将它们构建为单独的.ko模块并随意加载它们的原因。


1
是的,您的最后一段是促使我提出诚实问题的原因。感谢您的回答
— mathematician

1

这些取决于您如何配置Linux内核的构建。

在编译过程中,通常可以:

  • 编译带有或不带有模块支持的内核(通常带有模块支持)
  • 直接将驱动程序作为模块或内置软件编译到内核中

了解什么是.ko文件,用于/programming/10476990/difference-between-o-and-ko-file

之所以会有一个空的输出,lsmod是因为您拥有一个整体内核。

列出所有模块(如果存在)的快速方法是运行此命令

find /lib/modules/*/ -type f -iname '*.ko' | less

注意使用less,您可以使用所需的每个寻呼机,也可以将输出重定向到所需的位置。


因此,在配置为没有模块支持的内核上(我的看来是这样),我将无法安装.ko文件形式的任何驱动程序以使用其他硬件?
— mathematician1975

是的,基本上,您必须从源代码重新编译它,如果要编辑和/或添加驱动程序,则必须重新生成它,也许只是使用相同的.config文件并根据需要对其进行修改。
— user827992 2012年

因此,为了做到这一点,我需要从供应商处获取内核源代码,并自行对.config文件进行正确的修改来进行编译,然后再安装其他驱动程序即可。
— mathematician1975

取决于,如果他使用的是香草内核(仅保留原始源代码),那么您只需要使用.config即可,并且您可以在您的PC上重现相同的内核,但是如果他使用的是香草内核+一些补丁或修改如果您需要这些额外的信息,则自定义Makefile也可以视为对标准工具链以及标准构建过程的任何其他修改的相关变量。
— user827992 2012年

我的经验是,出于速度和大小的原因,嵌入式Linux禁用了模块,并且此类设备的内核通常包含树外驱动程序,并且在某些随机员工的PC上构建,而没有源代码控制的好处。祝你好运。
— 斯蒂芬·韦伯

0

请参阅文件/ lib / modules / $(uname -r)/modules.builtin的内容

例如搜索特定的模块

grep <module> /lib/modules/$(uname -r)/modules.builtin

文档/kbuild/kbuild.txt

modules.builtin
--------------------------------------------------
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.

??? 不确定OP应该做什么。他应该在航站楼中运行第一行吗?这可能是答案,但是请您详细说明一下吗?
— 匿名

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.