Yocto 不会将 libphp7.so 复制到 rootfs

Yocto doesn't copy libphp7.so to rootfs

为了在 Yocto 中添加 php apache2 模块,我创建了一个包含以下内容的文件 recipes-devtools/php/php_%.bbappend

PACKAGECONFIG = " mysql sqlite3 imap opcache openssl ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 pam', d)} apache2"

LIBS_pn-php =" -lpthread "
export LIBS
THREADS_pn-php = "pthread"
export THREADS

模块已构建,但文件 tmp-glibc/sysroots-components/cortexa7hf-neon-vfpv4/php/usr/lib/apache2/modules/libphp7.so 未复制到 rootfs (/usr/lib/apache2/modules/)。

  1. 为什么不部署文件?
  2. 作为临时解决方法(并学习如何处理 Yocto 的路径),我正在尝试使用 ROOTFS_POSTPROCESS_COMMAND 手动部署它。为了避免绝对路径,我应该使用什么变量在 tmp-glibc 输出目录下找到上面的文件?类似于:

    ${TMPDIR}/sysroots-components/cortexa7hf-neon-vfpv4/php/usr/lib/apache2/modules/libphp7.so

或者有更好的?

在 Yocto 中,文件(它们安装在 ${D} 中,可以手动安装在 do_install 中,也可以通过 make、cmake、autotools 等安装...在例如 do_compile) 中,当它们匹配正则表达式之一 (或 glob,对此不完全确定) 包含在 FILES_foo.

一个配方可以(通常确实)提供多个包。所以你会有多个 FILES_foo1 有自己的匹配路径。

在 Yocto 中,文件放在第一个包中,其中 FILE_foo 中的一个路径与文件匹配。 即使文件匹配其他包的路径,它也只会在一个包中,第一个。

FWIW,包是在配方中的 PACKAGES 变量中从最左到最右创建的。默认情况下,PACKAGES 变量是 ${PN}-src ${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN} (c.f. http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n292).

默认的 FILES_* 变量也在 bitbake.conf 中定义,c.f。 http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf。查找以 FILES_.

开头的所有内容

在那里,你可以看到默认情况下,FILES_${PN}${libdir}/lib*${SOLIBS}(c.f。http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n296) packaged. SOLIBS is, by default, .so.* (c.f. http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n280),这意味着只有点版本库被打包在 ${PN} 中(如果它们之前没有被另一个包匹配)。 另一方面,FILES_${PN}-dev${FILES_SOLIBSDEV} 默认为 ${base_libdir}/lib*${SOLIBSDEV} ${libdir}/lib*${SOLIBSDEV}SOLIBSDEV 依次默认为 .so(c.f。http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n313, http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n314 and http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n283). 请注意,库文件名应全部以 lib 开头,以便能够被默认匹配 FILES_*.

TL;DR:默认情况下,FILES_${PN}中的lib*.so.*FILES_${PN}-dev中的lib*.so

对于您的具体问题,您可以看到 ${libdir}/apache2 目录被打包在 php-modphp 中,感谢 FILES_${PN}-modphp (c.f. http://git.openembedded.org/meta-openembedded/tree/meta-oe/recipes-devtools/php/php.inc#n243).

所以你需要在你的图片中添加php-modphp(假设${PN}解析为php)能够将 lib 安装在您的 rootfs 中。