我正在尝试为 BeagleBoard xM (Rev. C) 构建自定义 Linux。我使用过很多 C/C++,但在从头构建和安装 Linux 方面还是个新手。
我使用了 Yocto Project 构建设备(https://www.yoctoproject.org/) 看起来很有希望——它为 u-Boot 引导加载程序、Linux 内核和根文件系统构建了文件。
这一页给出了使用 Yocto 生成的文件设置微型 SD 卡的说明。但是,图像文件包含一个“.dtb”文件,而设置说明中未提及该文件。
这个文件和主板硬件有关系吗?很多网站都提到加载 dtd 文件(可能在 uEnv.txt 中?)但我没有找到任何详细信息。
我使用上述说明设置了带有 MLO 和 u-boot.img 的启动分区,并对 uEnv.txt 进行了一些改动。我还设置了带有根文件系统的第二个分区。
我能够启动并登录(通过串行端口控制台),但看起来大多数主板硬件(例如视频和所有 USB 设备,包括以太网)都无法正常工作。这可能是因为我没有使用 .dtb 文件吗?
有人能解释一下 dtb 以及如何在 beagle 板上使用它吗?谢谢!
答案1
在我弄清楚要搜索什么之后,回答我自己的问题。“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
zImage 是内核,beagle-xm.dtb 是设备树 blob。我通过在 uEnv.txt 中设置“uenvcmd=...”变量(其中包含上述内容)来自动化启动过程,但这有点丑陋,可能有更好的方法。
请注意,此操作已启动,并显示已成功加载设备树。但是,我仍然没有 USB 设备或视频(据我所知)。不过,我怀疑这可能是另一个问题。
答案2
请注意,有 2 个 dtb。u-boot dtb 和 kernel dtb。它们是两个不同的东西。U-boot 板 dts/dtb 并非总是使用,也不是强制性的,顺便说一下,在 u-boot 中,您可以使用“u-boot”dtb 将其嵌入到 u-boot 中或将其连接到 u-boot。
答案3
我在 beaglebone black 上使用 Ubuntu 14.04,所以我的设置可能有点不同,但以下是我加载自定义 dtb 的方式:
在 uEnv.txt 中,添加一行:dtb=name-of-desired.dtb
搜索地点应符合规定这里。对我来说,其中/boot/dtbs/linux-kernel/
linux-kernel 是加载版本的名称。