Yocto不会将libphp7.so复制到rootfs

时间:2019-10-21 08:04:17

标签: php apache2 yocto

要在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

还是有更好的东西?

1 个答案:

答案 0 :(得分:2)

在Yocto中,文件(在${D}中手动安装,或者在{{1}中通过make,cmake,自动工具等安装在{{1} }})当它们与正则表达式之一匹配时被放入包装中(或全局变量,对此不完全确定)包含在do_install中。

一个食谱可以(而且通常确实)提供多个软件包。因此,您将有多个do_compile及其自己的匹配路径。

在Yocto中,文件放置在第一个包中,其中其FILES_foo中的一个路径与该文件匹配。 即使文件与其他程序包的路径匹配,也永远只在一个程序包中,第一个程序包。

FWIW,软件包是在食谱中的FILES_foo1 变量中从最左侧到最右侧创建的。默认情况下,PACKAGES变量为FILE_foo(参见http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n292)。

默认PACKAGES变量也在c.f中的bitbake.conf中定义。 http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf。寻找以${PN}-src ${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}开头的所有内容。

在其中,您可以看到默认情况下FILES_*已打包FILES_(参见http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n296)。 FILES_${PN}默认为${libdir}/lib*${SOLIBS}(参见http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n280),表示SOLIBS包中仅打包了点版本的库(如果它们之前没有与其他软件包匹配)。 另一方面,.so.*${PN}打包为默认值FILES_${PN}-dev,其中${FILES_SOLIBSDEV}依次打包为默认值${base_libdir}/lib*${SOLIBSDEV} ${libdir}/lib*${SOLIBSDEV}(参见http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n313,{{3 }}和http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n314)。 请注意,库文件名都应以SOLIBSDEV开头,以便能够与默认.so匹配。

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

对于您的特定问题,由于lib*.so(参见http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n283),您可以看到FILES_${PN}-dev目录打包在${libdir}/apache2中。

因此,您需要在映像中添加php-modphp(假设php-modphp解析为php),以便将lib安装在rootfs中。