为什么在引导加载程序和内核源代码中都需要设备树结构(DTS)文件?

时间:2015-06-08 14:06:02

标签: linux-kernel arm embedded-linux u-boot device-tree

  

U-Boot等不实现Open Firmware API的Bootloader应该以平面设备树的二进制形式传递给内核 - LinuxFDTBlob

为什么DTS文件也存在于内核中?这不是多余的吗?

例如,U-boot源代码有以下文件:
arch/arm/dts/tegra124-jetson-tk1.dts

此文件也可以在Linux源代码下找到:
arch/arm/boot/dts/tegra124-jetson-tk1.dts

虽然内核版本是U-boot版本的4倍,但我想知道这种冗余背后的原因。我认为维护人员和开发人员都很难维护和使用

3 个答案:

答案 0 :(得分:5)

以下是Artlessnoise评论的答案:

u-boot源使用u-boot DTB,而Linux在内核启动时使用Linux DTB。 u-boot版本是一个精简版本,因为没有多少外围设备需要启动。你总是使用Linux的内核版本,即u-boot将这个版本传递给Linux(以及加载bzImage或vmlinux)。

许多u-boot驱动程序几乎与Linux相同。显然,你可以为所有u-boot驱动程序创建相同的参数;大多数是Linux驱动程序的副本,其中断由轮询例程替换。使用相同的开放固件接口可以使它们更接近匹配。

答案 1 :(得分:3)

  1. UBoot和Linux内核是两个不同的项目。因此,他们需要不同的副本来管理他们的单独项目。
  2. Linux内核也可以与其他引导加载程序一起启动。还有其他方法可以将DTB传递给linux内核,例如。内核映像可以附加需要使用的DTB。
  3. 由于上述原因,复制DTS副本是有意义的。

答案 2 :(得分:0)

Uboot有单独的DTS文件,可以在uboot defconfig中设置为CONFIG_DEFAULT_DEVICE_TREE。此DTS文件是使用uboot映像构建的,这意味着它是uboot映像的一部分。 uboot DTS文件的语法与Linux内核DTS文件相同。 Linux DTS文件被编译成DTB文件并单独用于解析Linux内核的硬件配置。 Linux DTB映像与Linux内核映像分开刷新。