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/
)。
- 为什么不部署文件?
作为临时解决方法(并学习如何处理 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 中。
为了在 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
或者有更好的?
在 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 中。