【问题标题】:Yocto doesn't copy libphp7.so to rootfsYocto 不会将 libphp7.so 复制到 rootfs
【发布时间】:2020-02-17 07:10:29
【问题描述】:

为了在 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

还是有更好的?

【问题讨论】:

  • 您是否检查过文件是否通过do_install 命令部署以及通过FILES_ 打包?
  • 也许添加 php_%.bbappend 类似 FILES_${PN} += "${libdir}/apache2" 的东西?试试oe-pkgdata-util list-pkg-files -p php看看文件打包在哪里

标签: php apache2 yocto


【解决方案1】:

在 Yocto 中,文件(在 ${D} 中手动安装或通过 make、cmake、autotools 等安装在 do_compile 中)当它们匹配正则表达式之一时被放入一个包中(或全局,不完全确定)包含在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)。 SOLIBS 默认为.so.*(参见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(参见http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n313http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n314http://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 中。

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 2019-06-03
    • 2018-06-28
    • 2017-08-04
    • 2019-01-27
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多