要在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/
)。
作为临时的解决方法(并了解如何处理Yocto的路径),我尝试使用ROOTFS_POSTPROCESS_COMMAND
手动进行部署。为了避免绝对路径,我应该使用哪个变量在tmp-glibc
输出目录下查找上面的文件?像这样:
${TMPDIR}/sysroots-components/cortexa7hf-neon-vfpv4/php/usr/lib/apache2/modules/libphp7.so
还是有更好的东西?
答案 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中。