Directory 如何编写yocto/bitbake配方将目录复制到目标根文件系统

Directory 如何编写yocto/bitbake配方将目录复制到目标根文件系统,directory,copy,yocto,bitbake,recipe,Directory,Copy,Yocto,Bitbake,Recipe,我有一个“二进制”(即不需要编译)文件的目录,只想将它们安装到我的目标根文件系统中 我看过好几篇文章,似乎都不适合我 此配方所需的功能是: myRecipe/myFiles/-->myRootFs/dir/to/install 我目前的尝试是: SRC_URI += "file://myDir" do_install() { install -d ${D}/path/to/dir/on/fs install -m ${WORKDIR}/myDir ${D}/

我有一个“二进制”(即不需要编译)文件的目录,只想将它们安装到我的目标根文件系统中

我看过好几篇文章,似乎都不适合我

此配方所需的功能是:

myRecipe/myFiles/-->myRootFs/dir/to/install

我目前的尝试是:

SRC_URI += "file://myDir"

do_install() {
         install -d ${D}/path/to/dir/on/fs
         install -m ${WORKDIR}/myDir ${D}/path/to/dir/on/fs
}

总的来说,我不能抱怨Yocto文档,它真的很好!就是找不到这样的例子

只需将这些文件复制到目标rootfs中即可。如果它们没有安装在标准位置,不要忘记包装

SRC_URI += "file://myDir"

do_install() {
    install -d ${D}/path/to/dir/on/fs
    cp -r ${WORKDIR}/myDir ${D}/path/to/dir/on/fs
}
FILES_${PN} += "/path/to/dir/on/fs"

对于这样的配方文件夹:

.
├── files
│   ├── a.txt
│   ├── b.c
│   └── Makefile
└── myrecipe.bb
您可以使用以下方法将其安装到rootfs的特定文件夹中:

SRC_URI = " file://*"
do_install() {
    install -d ${WORKDIR}/my/dir/on/rootfs
    install -m 0755 ${S}/* ${WORKDIR}/my/dir/on/rootfs/*
}
FILES_${PN} = "/my/dir/on/rootfs/* "

我认为它不适合你,因为你忘了在“install-m”之后添加模式值

请参阅安装命令的手册页:


请注意,使用简单的递归复制,最终会出现主机污染警告,因此需要使用以下参数进行复制:

do_install() {
     [...]
     cp --preserve=mode,timestamps -R ${S}${anydir}/Data/* ${D}${anyotherdir}/Data
     [...]
}

与poky中的其他方法一样,或者只是按照官方的方法来避免所有权和权限方面的问题。

有关这方面的一个好例子,请参见psplash_git.bb->do_install_appendor将这一行“install-m${WORKDIR}/myDir${D}/path/to/dir/on/fs”修改为“install-m${WORKDIR}/myDir/*${D}/path/to/on/fs”可能的副本似乎复制了目录,但其中没有任何文件或其他目录。我假设我必须明确地陈述所有这些。有没有一个明智的、快速的方法来做到这一点?当然有。这就是为什么我使用
cp-r
进行递归复制。我使用了cp-r,它将“myDir”目录复制到FS,但没有它的任何内容…好的。请尝试
cp-r${WORKDIR}/myDir/*${D}/path/to/dir/on/fs
。真奇怪。我来看看。你确定
myDir
不是空的吗?按照其他用户的建议使用
cp
install-m
有什么区别?我刚刚添加了一个指向文档的直接链接。我的建议是使用always install,除非您需要一些递归复制。这几乎是唯一正确的答案,线程本身就是一个副本
do_install() {
     [...]
     cp --preserve=mode,timestamps -R ${S}${anydir}/Data/* ${D}${anyotherdir}/Data
     [...]
}