【问题标题】:Why some embedded board need device tree and some don't?为什么有些嵌入式板需要设备树而有些不需要?
【发布时间】:2014-08-25 14:14:43
【问题描述】:
这可能是一个非常基本的问题,但我真的很困惑。
有些板在启动过程中不需要设备树 dtb 文件,如 beagleboard,而有些板在启动过程中应该有 dtb 文件,如 Zynq。
这个假设正确吗?
同样,在启动过程中。引导加载程序何时获取 dtb 文件并加载它?
有任何了解整个过程的参考吗?
【问题讨论】:
标签:
linux
linux-kernel
embedded-linux
boot
device-tree
【解决方案1】:
Linux 正在慢慢转向设备树。这一切都始于 PowerPC,而现在 ARM 拥有了它。与使用 ARM 中的 ATAGS 相比,它是一种更好的传递系统信息的方法。
由于您提到了 Xilinx 的 Zynq,引导加载程序 (u-boot) 被分配了从非易失性内存区域(在本例中为 SD 卡)读取内核和设备树的任务。内核和设备树被传递给引导命令。
您应该read more 了解 Zynq 和 u-boot 以了解它。找到“设备树”子部分。
【解决方案2】:
传统上,您必须为每个电路板编写一个“电路板文件”(用 C 语言)来描述电路板上的哪些组件以及它们如何连接。也就是程序描述。
使用设备树,您可以使用声明性方法来描述硬件并让内核调用适当的设备注册函数。
因此,对于较旧的板,如果板文件可用(在 Beagleboard 的情况下为arch/arm/mach-omap2/board-omap3beagle.c),则不需要设备树。但是如果没有板文件和设备树,内核就无法知道它运行在哪种类型的硬件上。
设备树 blob (dtb) 由引导加载程序加载到 RAM 中,然后引导加载程序通过预定寄存器通知内核该位置。