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

如果我将内核驱动程序作为module构build,那么可以在运行时用insmod或modprobe手动将其插入到内核中,我很清楚。 但下面关于设备树的说法正确吗?

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

Solutions Collecting From Web of "内置的内核驱动还需要设备树吗?"

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

这是一个关于平台总线的简短文章,以及如何在设备树之前使用的东西: https : //www.codeproject.com/tips/1080177/linux-platform-device-driver 。 设备树因子在内核代码中硬编码,使得代码更加便携。

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

你可以配置然后编译并使用一个完全静态的内核 ,内置所有有用的驱动程序(所以没有模块 ,也没有initrd )。 你将设置CONFIG_MODULES=n ,你不会在内核的.config文件中使用m ,你将设置你所需要的特定硬件和系统的所有东西(比如文件系统)。 另请参阅这个未解答的问题。 我想很多使用Linux的嵌入式系统都有这样编译的内核,不使用任何initrd。

你可以在没有设备树的情况下使用驱动程序(内置的或者已经加载的模块),因为你可以将设备转到任何地方的文件路径。

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

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

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

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

还请看OSDEV ,以及那里提到的爱好操作系统。 或者进入FreeBSD等….他们不使用(或至少可以配置,以避免)任何设备树AFAIK。

我可能可以在我的电脑上启动一个1995年的Linux发行版(至少如果我有一个软盘单元的话) – 至少是最近为我的硬件量身定做的全静态内核 – 并且它可以在没有任何设备树的情况下工作不存在)。

阅读操作系统:三个简单的部分 (免费下载)。