什么是 u-Boot dtb 文件以及如何使用它 (BeagleBoard xM)?

Jer*_*emy 14 linux boot bootloader beagleboard

我正在尝试为 BeagleBoard xM (Rev. C) 构建自定义 Linux。我做了很多 C/C++,但我是从头开始构建和安装 Linux 的初学者。

我使用了 Yocto Project 构建工具 ( https://www.yoctoproject.org/ ),它看起来很有前景——它为 u-Boot 引导加载程序、Linux 内核和根文件系统构建了文件。

此页面提供了使用 Yocto 生成的文件设置 micro SD 卡的说明。但是,图像文件包含一个“.dtb”文件,该文件在设置说明中未提及。

这个文件和板子硬件有关系吗?各种网站都提到加载 dtd 文件(可能在 uEnv.txt 中?),但我没有找到任何详细信息。

我使用上面的说明用MLO和u-boot.img设置了启动分区,并用uEnv.txt搞砸了一点。我还使用根文件系统设置了第二个分区。

我能够启动和登录(通过串行端口控制台),但看起来大部分板硬件 - 例如视频和所有 USB 设备,包括以太网 - 都无法正常工作。这可能是因为我没有使用 .dtb 文件吗?

有人可以解释 dtb 以及如何在 Beagle 板上使用它吗?谢谢!

Jer*_*emy 15

在我弄清楚要搜索的内容后,回答我自己的问题。“dtb”文件包含一个设备树 Blob(或二进制)(这里有很好的描述)。这是将有关板卡的硬件信息传递给 Linux 内核的新(更)方法。

它可以加载到内存中,并通过 u-Boot 传递给内核。

以下是我使用的 u-Boot 命令:

setenv bootargs 'console=tty0 console=ttyO2,115200n8 root=/dev/mmcblk0p2 rootwait rootfstype=ext4 rw'
fatload mmc 0:1 0x80300000 zImage
fatload mmc 0:1 0x815f0000 beagle-xm.dtb
bootz 0x80300000 - 0x815f0000
Run Code Online (Sandbox Code Playgroud)

zImage 是内核,beagle-xm.dtb 是设备树 blob。我通过在 uEnv.txt 中设置一个“uenvcmd=...”变量来自动化启动过程(上面有上面的内容),但它有点难看,而且可能有更好的方法。

请注意,这会启动,并说它加载了设备树。但是,我仍然没有 USB 设备或视频(据我所知)。但是,我怀疑这可能是一个不同的问题。

  • _这是将有关板卡的硬件信息传递给 Linux 内核的新方式。_ 以前没有将硬件信息传递给内核的方法。相反,内核必须静态地包含所有信息,因此会有一个特定于板的 C 文件来列出所有这些映射。从内核的角度来看,这是一场维护噩梦。 (3认同)