【发布时间】:2021-09-02 14:28:43
【问题描述】:
我想尝试在 Yocto 中使用https://bell-sw.com/ 提供的 Liberica JDK。我没有看到它的食谱,所以我尝试创建自己的食谱。它只是拉下 32 位 arm 预编译的二进制文件并安装它们。这是我的.bb 文件。
LICENSE = "CLOSED"
SRC_URI += "\
https://download.bell-sw.com/java/11.0.11+9/bellsoft-jdk11.0.11+9-linux-arm32-vfp-hflt-full.tar.gz \
"
SRC_URI[sha1sum] = "973d357361fd2a9c328e37c93e6f546ee43ade5f"
S = "${WORKDIR}/jdk-11.0.11-full"
INSANE_SKIP_${PN} = "ldflags"
INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_SYSROOT_STRIP = "1"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
do_install() {
install -d ${D}/usr/share/java/
install -d ${D}/usr/lib/jvm/jdk-11.0.11-bellsoft
cp -r "${S}" ${D}/usr/lib/jvm/jdk-11.0.11-bellsoft
}
FILES_${PN} += "/"
do_package_qa[noexec] = "1"
EXCLUDE_FROM_SHLIBS = "1"
这会将其拉下并将其添加到我的图像中。但是,当我刷新映像并启动它时,java 二进制段错误。我觉得这很奇怪,所以我用相同的校验和手动在目标上下载了完全相同的 tarball 并将其解压缩,并且工作得很好。然后我diffed 这两个二进制文件并注意到它们有些不同!这让我想知道 yocto/bitbake 是否可以对预编译的二进制文件做些什么。
执行ls -l 表明二进制文件的大小也不同。这让我检查了工作区,看看文件在提取过程中是否发生了变化,而事实并非如此。
# Checking the workspace where I install the binary has the correct size
ls -l tmp/work/cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi/bellsoft-jdk/11.0.11-r0/image/usr/lib/jvm/jdk-11.0.11-bellsoft/jdk-11.0.11-full/bin/java | awk '{print $5}'
8120
# Checking on the target where the image is installed has the incorrect size
ls -l /usr/lib/jvm/jdk-11.0.11-bellsoft/jdk-11.0.11-full/bin/java | awk '{print $5}'
9788
有谁知道什么可能导致二进制更改?
【问题讨论】:
-
我还注意到 rpm 中的文件大小正确。只是在图像上有所不同。运行这个表明那个java应该是正确的......
rpm -qlvp ./tmp/deploy/rpm/cortexa7t2hf_neon_vfpv4/bellsoft-jdk-11.0.11-r0.cortexa7t2hf_neon_vfpv4.rpm -
另外有趣的是,在图像上,如果我检查 RPM 认为大小应该是什么 RPM 认为大小是正确的。即使它仍然与那里列出的大小不同。
rpm -qlv bellsoft-jdk8120 /usr/lib/jvm/jdk-11.0.11-bellsoft/jdk-11.0.11-full/bin/java
标签: java raspberry-pi yocto bitbake