URL 的提取程序失败:'file://dropbear.default'。无法从任何来源获取 URL

Fetcher failure for URL: 'file://dropbear.default'. Unable to fetch URL from any source

我正在尝试覆盖 dropbear.default

图层如下所示: meta/recipes-core/dropbear

    ├── dropbear
    │   ├── 0001-urandom-xauth-changes-to-options.h.patch
    │   ├── 0005-dropbear-enable-pam.patch
    │   ├── 0006-dropbear-configuration-file.patch
    │   ├── dropbear
    │   ├── dropbear.default
    │   ├── dropbear-disable-weak-ciphers.patch
    │   ├── dropbearkey.service
    │   ├── dropbear@.service
    │   ├── dropbear.socket
    │   └── init
    ├── dropbear_2020.81.bb
    ├── dropbear_%.bbappend
    ├── dropbear.inc
    └── files
        ├── 0007-patch1.patch
        └── 0008-patch2.patch
    └──$MACHINE folder name
        ├──dropbear.default   -------> this one I want to use to replace the old one from the /dropbear/dropbear.default above

我创建了一个 dropbear_%.bbappend

在那个 dropbear_%.bbappend 文件中我有

FILESEXTRAPATHS_prepend_myfolder := "${THISDIR}/${PN}:${THISDIR}/${MACHINE}:${THISDIR}/files:" -----> 这应该是

${THISDIR}/${MACHINE}:${THISDIR}/文件:"

我仍然遇到同样的错误

将 bbappend 与它要附加到的 bb 配方放在同一目录中是很不寻常的,但是不管你的船漂浮在何处 :) 在那种情况下,这种不寻常的情况实际上是问题的一部分。

我不确定 _myfolderFILESEXTRAPATHS_prepend_myfolder 中代表什么?如果 myfolder 不是 OVERRIDES 变量(或其他隐式值,例如 class-targetvirtclass- 等)的一部分,那么它将不起作用。我很确定你实际上应该从 FILESEXTRAPATHS_prepend 中删除它。 c.f。 https://docs.yoctoproject.org/ref-manual/variables.html#term-OVERRIDES

考虑到当前的目录布局,您的 bbappend 中的 FILESEXTRAPATHS_prepend 将扩展为:

./dropbear:./${MACHINE}:./files:

Yocto 将在 SRC_URI 中搜索文件的路径将从最左到最右搜索,c.f。 https://docs.yoctoproject.org/ref-manual/variables.html#term-FILESPATH(虽然 IMO 我可以给你,但措辞不明确)。

所以从技术上讲,您是在告诉 Yocto 在 dropbear 目录中搜索 dropbear.default,然后是 ${MACHINE} 目录,然后是 files。这已经是原始配方所使用的,所以总而言之,您的 bbappend 对您要覆盖的文件是空操作。

要解决此问题,可以:

  • 将你的 bbappend 移动到另一个目录(并且可能是层,因为我很确定你没有提交和推送到原始 dropbear 配方所在的层的权利?然后是 dropbear.default 文件将从与您的 bbappend 同一级别的 dropbear${MACHINE}files 目录中获取。(因为 FILESEXTRAPATHS(和 FILESPATH)中的路径是绝对的,它会找到你想要的文件),
  • 从您的 FILESEXTRAPATHS_prepend 中删除 ${THISDIR}/${PN}(即 ./dropbear)或将其放在您放置要覆盖的文件的目录之后,
  • 将以机器 (${MACHINE}) 命名的子目录直接放在 ./dropbear 中,因为在 FILESPATH 中指定的目录(因此,FILESEXTRAPATHS)会自动扩展为 FILESOVERRIDES 其中包含机器名称。基本上,假设 FILESPATH 设置为 dirA:dirBdirA/poky(如果 poky 是您的发行版)将首先被搜索,然后是 dirB/poky,然后是 dirA/machinedirB/machinedirA 最后是 dirB。因此,通过在 ./dropbear 中有一个以您的机器命名的子目录,Yocto 将在 ./dropbear 之前自动搜索它。 c.f。 https://docs.yoctoproject.org/ref-manual/variables.html#term-FILESPATH

您可以通过从 ${WORKDIR}/temp 读取 log.do_fetch 日志文件来检查搜索了哪些目录以及搜索顺序,${WORKDIR} 可能会以类似 [=51] 的形式结束=].

您可以检查变量的值以及这些值是如何由 运行 bitbake dropbear -e 构建的历史记录。由于它可以输出数百万行,因此您通常将其通过管道传输到 lessmore,将其重定向到文件或通过管道传输到 grep -e "^VARTOCHECK=".