Yocto Kirkstone为Beaglebone Black添加自定义设备树的问题
解决Beaglebone Yocto Kirkstone自定义设备树集成问题
1. 修复自定义设备树配方,确保dtb安装到/boot
你之前的配方能编译dtb,但未正确配置安装路径,导致添加到镜像时出错。修改配方如下:
inherit devicetree allarch FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI = "file://mycustom.dts;subdir=git/overlays" S = "${WORKDIR}/git/overlays" COMPATIBLE_MACHINE = ".*beaglebone.*" # 指定包包含的文件路径 FILES_${PN} = "/boot/mycustom.dtb" # 确保编译后的dtb复制到目标根文件系统的/boot目录 do_install:append() { install -d ${D}/boot install -m 0644 ${B}/mycustom.dtb ${D}/boot/ }
关键说明:
- 添加
inherit allarch:设备树文件不属于特定硬件架构,避免包架构不匹配问题 - 明确
FILES_${PN}:告知BitBake该包的安装文件,生成的包会包含/boot/mycustom.dtb,解决添加镜像时的"找不到匹配包"错误 do_install:append:确保编译好的dtb被正确复制到目标路径
2. 自动修改extlinux.conf添加DEVICETREE配置
无需补丁内核或U-Boot,有两种简便方式实现:
方法一:自定义extlinux.conf模板覆盖原配置
- 创建配方
meta-yourlayer/recipes-bsp/extlinux/extlinux-conf-custom.bb:
SUMMARY = "Custom extlinux.conf for Beaglebone" DESCRIPTION = "Adds custom DEVICETREE entry to extlinux.conf" PR = "r1" inherit allarch DEPENDS += "extlinux-conf" SRC_URI = "file://extlinux.conf.in" S = "${WORKDIR}" do_install() { install -d ${D}${sysconfdir}/extlinux install -m 0644 ${WORKDIR}/extlinux.conf.in ${D}${sysconfdir}/extlinux/extlinux.conf } RDEPENDS:${PN} = "extlinux-conf" FILES_${PN} = "${sysconfdir}/extlinux/extlinux.conf"
- 创建模板文件
meta-yourlayer/recipes-bsp/extlinux/files/extlinux.conf.in:
default Yocto label Yocto kernel /zImage DEVICETREE /mycustom.dtb fdtdir / append root=PARTUUID=f8fbccd5-02 rootwait console=ttyS0,115200
- 在
local.conf中添加:
IMAGE_INSTALL:append = " extlinux-conf-custom"
构建时会用自定义配置覆盖原extlinux.conf。
方法二:通过postinst脚本动态修改
在自定义设备树配方中添加内嵌postinst脚本,在根文件系统生成后自动修改配置:
# 保留原配方内容,新增以下部分 pkg_postinst:${PN}() { if [ -n "$D" ]; then EXT_CONF="$D/boot/extlinux/extlinux.conf" else EXT_CONF="/boot/extlinux/extlinux.conf" fi # 检查DEVICETREE行是否存在,不存在则插入到kernel行之后 if ! grep -q "DEVICETREE /mycustom.dtb" $EXT_CONF; then sed -i '/kernel \/zImage/a \ DEVICETREE \/mycustom.dtb' $EXT_CONF fi }
3. 验证构建
- 确保自定义配方所在layer已添加到
bblayers.conf - 在
local.conf中添加:IMAGE_INSTALL:append = " mycustom"(替换为你的配方名称) - 重新构建镜像:
bitbake core-image
构建完成后,检查镜像内的/boot目录是否存在mycustom.dtb,以及/boot/extlinux/extlinux.conf是否包含DEVICETREE /mycustom.dtb行。
内容的提问来源于stack exchange,提问作者Katu
相关产品推荐
相关产品推荐

