Yocto Project添加Raspberry Pi Zero W自定义层报Nothing PROVIDES错误如何解决
错误根因
当前报错是因为bitbake命令入参不符合规则:bitbake后接的参数为需要构建的目标名称(支持recipe名、镜像名、虚拟目标名),你传入了自定义层的相对路径../meta-rpi0W_inc-test-v3,bitbake无法识别该路径为合法构建目标,因此抛出Nothing PROVIDES错误。
排查解决步骤
- 第一步:确认自定义层已加入构建配置
检查构建目录下conf/bblayers.conf文件,确认已经添加了你的自定义层的路径,示例配置如下:
只有加入BBLAYERS ?= " \ /your/path/to/poky/meta \ /your/path/to/poky/meta-poky \ /your/path/to/poky/meta-yocto-bsp \ /your/path/to/meta-raspberrypi \ /your/path/to/meta-rpi0W_inc-test-v3 \ "BBLAYERS的层才会被bitbake索引加载。 - 第二步:执行正确的构建命令
如果要测试自定义wpasupplicant配置是否生效,执行:
如果要构建完整的树莓派镜像,执行对应镜像目标的构建命令,比如常用的基础镜像:bitbake wpa-supplicantbitbake core-image-base
额外配置修正
你当前编写的自定义recipe存在多处错误,即使解决当前报错,后续也会构建失败/不生效,需要同步修改:
- 变量引用符号错误:Yocto中所有变量引用需使用
${}而非$(),你代码中的$(THISDIR)、$(WORKDIR)都需要修改为${THISDIR}、${WORKDIR}。 - FILESEXTRAPATHS配置错误:要优先加载你的自定义配置文件,需使用
prepend而非append,且路径末尾需要加冒号做分隔:FILESEXTRAPATHS_PREPEND := "${THISDIR}/files:" - do_install逻辑错误:你当前的逻辑仅将配置文件复制到构建临时目录,并没有安装到目标根文件系统的/etc路径下,修改为:
do_install(){ install -d ${D}${sysconfdir} install -m 0644 ${WORKDIR}/wpa_supplicant.conf-sane ${D}${sysconfdir}/wpa_supplicant.conf } - 最佳实践优化:不需要创建独立的wpasupplicant recipe,应该使用
.bbappend附加配置到官方的wpa_supplicant配方,避免冲突:将你的wpasupplicant_0.1.bb改名为wpa-supplicant_%.bbappend,放在recipes-connectivity/wpa-supplicant/目录下(和官方meta层的wpa_supplicant recipe路径保持一致)即可直接生效。
内容的提问来源于stack exchange,提问作者user8888824
相关产品推荐
相关产品推荐

