内置内核驱动程序还需要设备树吗?

时间:2017-10-03 07:40:12

标签: linux linux-kernel kernel linux-device-driver device-tree

如果我将内核驱动程序构建为module,可以在运行时使用insmod或modprobe手动将其插入内核,我很清楚。但是关于设备树的以下陈述是正确的吗?

  1. 如果我将内核驱动程序构建为module,它将在启动时自动插入内核,具体取决于它是否在设备树中列出
  2. 如果我将内核驱动程序构建为built-in,则无论设备树如何,它都将在引导时自动插入内核

2 个答案:

答案 0 :(得分:5)

内置内核驱动程序还需要设备树吗?是。设备树的概念与驱动程序是内置驱动程序还是编译为模块正交。设备树包含有关硬件的信息。平台总线将该信息传递给相关的驱动程序。

这是一篇关于平台总线的简短文章,以及设备树之前的情况:https://www.codeproject.com/tips/1080177/linux-platform-device-driver。设备树将硬件信息与其他内容代码中的硬编码相关联,使代码更具可移植性。

答案 1 :(得分:-2)

2,没有插入步骤;内置驱动程序是静态内核的一部分(并且没有它不属于它的那一刻)

您可以configure编译并使用内置所有有用驱动程序的完全静态内核(所以没有模块没有{{ 3}} 的)。您将设置CONFIG_MODULES=n,您永远不会在内核m文件中使用.config,并且您将设置y特定硬件所需的所有内容系统(例如文件系统)。另请参阅initrd未回答的问题。我想许多使用Linux的嵌入式系统都有这样编译的内核,不使用任何initrd。

您可以在没有this的情况下使用驱动程序(内置驱动程序或已加载的模块),因为您可以将设备device tree放到任何位置的文件路径中。

请参阅mknod(2)并注意旧的Linux系统没有。设备树主要是一个有用的便利(改进超过https://www.devicetree.org/udev)。你可以完全避免它:你可以在没有任何设备树的情况下运行一个完全静态的内核,在一个填充了块和字符设备的根文件系统上,比如1995年的Linux发行版。因此,即使在今天,内置内核驱动程序也不需要任何设备树

请注意,旧的Unix系统(例如20世纪80年代中期的SunOS3,或20世纪90年代的Linux 1.x内核)没有任何类似的东西。那时你只是用适当的驱动程序静态地重新链接内核然后使用devfsd:字符设备或块设备(它们的驱动程序是内核的内置部分)。大多数驱动程序代码都进行了一些初始化,探测了相关硬件的存在(这确实减慢了启动过程)。

顺便说一句,你的问题取决于内核的加载方式,硬件加载方式以及加载内核的固件。例如,您可以使用嵌入在其固件(ROM中)中的Linux内核来构建硬件。

也许最近的UEFI最近的一些硬件需要一个设备树。 AFAIK,BIOS不需要任何。您可以配置和编译静态内核和一个甚至不使用任何设备树的特殊init程序,并使用很少的预先存在的设备文件。当然,你需要一些提供它们的根文件系统。

另请参阅device files,并了解那里提到的业余爱好者操作系统。或者进入FreeBSD等......它们不使用(或者至少可以配置以避免)任何设备树AFAIK。

我可能可以在我的PC上启动1995 Linux发行版(至少如果我有一个软盘单元) - 至少使用最近为我的硬件定制的完全静态内核 - 它可以在没有任何设备树的情况下工作(在那时候不存在了。)

阅读OSDEV(可免费下载)。

相关问题