如何编写bitbake配方debs.bb并配置local.conf安装自定义deb包
没问题,我帮你梳理清楚怎么在Yocto里把本地的example.deb包集成到最终镜像里,分两部分说:
1. debs.bb 的具体内容
这个recipe的核心就是把本地deb解压安装到Yocto的目标根目录里,代码如下,我给你逐个解释每个部分的作用:
SUMMARY = "Pre-built example deb package installation" DESCRIPTION = "Recipe to unpack and install example.deb into the target image" LICENSE = "CLOSED" # 要是你的deb是开源的,替换成对应许可证,比如 GPLv2/MIT LIC_FILES_CHKSUM = "" # 闭源的话留空就行,开源的话填许可证文件的校验和 # 指定要加载的本地deb文件,files目录下的example.deb会自动被BitBake识别 SRC_URI = "file://example.deb" # 设置工作目录为默认的WORKDIR,方便后续操作 S = "${WORKDIR}" do_install() { # 使用dpkg的解压模式,把deb里的内容放到Yocto的目标安装目录${D} dpkg -x ${WORKDIR}/example.deb ${D} } # 告诉BitBake要把安装到${D}下的所有文件都包含到这个package里,防止漏文件 FILES_${PN} += "/"
这里重点说下do_install:用dpkg -x而不是直接安装,是因为Yocto的构建环境里不一定有完整的dpkg依赖链,解压是最稳妥的方式,能保证所有文件都被放到正确的位置。
2. local.conf 需要做的修改
要让这个package被打包进最终镜像,你需要在local.conf里做两个关键修改:
- 把你的package添加到镜像安装列表:
找到IMAGE_INSTALL相关的配置,用append的方式加上你的package名(默认就是recipe的文件名debs):
IMAGE_INSTALL:append = " debs"
注意前面的空格,避免和前面的包名连在一起导致识别错误。
- 处理依赖问题(可选但重要):
如果你的example.deb依赖其他系统库,而Yocto构建环境里没有对应的package,可能会触发构建错误。这时候你可以根据情况添加:- 要是允许空依赖(不推荐,尽量解决依赖):
ALLOW_EMPTY_${PN} = "1"- 要是遇到库文件相关的检查错误,可以跳过对应的 sanity 检查:
INSANE_SKIP:${PN} += "ldflags libdir dev-so"
另外补充一句:别忘了把你的meta-example层添加到bblayers.conf里,不然BitBake找不到这个recipe,添加方式如下:
BBLAYERS += "${TOPDIR}/meta-example"
内容的提问来源于stack exchange,提问作者Ankit Koirala
相关产品推荐
相关产品推荐

