YOCTO(dunfell)安装预编译二进制文件的正确方法



我正试图为我的RaspberryPI3设备构建一个自定义的Yocto映像。实际上,我需要安装NodeJS 6.10.3版本(我需要这个特定的版本(,但我在";meta-nodejs";回购似乎已经破裂。(不能直接从meta nodejs安装,它会给我一些错误,比如"env-python:env命令找不到"(。因此,在我直接在Yocto操作系统上进行测试后,我决定使用ARMV7L的预编译版本(https://nodejs.org/dist/v6.10.3/node-v6.10.3-linux-armv7l.tar.gz(。我做了我的定制食谱;bitbaked";直接在我的图像上没有任何错误,但二进制似乎有一些问题。

root@yocto:~# node --version
Segmentation fault

我将这个文件与原始文件进行了比较,发现yocto的rootfs上的文件是";剥离的";

root@yocto:~# file /usr/bin/node
/usr/bin/node: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.26, BuildID[sha1]=cbdb85ab56e5b0f7c31aeb0671fd9b6ae5984f81, stripped
root@yocto:~# file /opt/node-v6.10.3-linux-armv7l/bin/node
/opt/node-v6.10.3-linux-armv7l/bin/node: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.26, BuildID[sha1]=cbdb85ab56e5b0f7c31aeb0671fd9b6ae5984f81, with debug_info, not stripped

所以我试着";播放";我的食谱添加了

INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INHIBIT_PACKAGE_STRIP = "1"

但我仍然会犯同样的错误。

我的食谱:

DESCRIPTION = "nodeJS Evented I/O for V8 JavaScript"
HOMEPAGE = "http://nodejs.org"
LICENSE = "MIT & BSD-2-Clause & BSD-3-Clause & ISC & AFL-2.0 & Apache-2.0 & OpenSSL & Zlib & Artistic-2.0 & (BSD-3-Clause | GPLv2)"
LIC_FILES_CHKSUM = "file://LICENSE;md5=41a3a0ccf7f515cac3377389dd8faac8"

RDEPENDS_${PN} += "bash"
SRC_URI = " https://nodejs.org/dist/v6.10.3/node-v6.10.3-linux-armv7l.tar.gz"
SRC_URI[sha256sum] = "c36f0713fcf397a6b278b61f4c1511938f7ad1e5385c31e530d074ce83163426"
S = "${WORKDIR}/node-v${PV}-linux-armv7l"
do_install_append() {
install -d ${D}/usr/
cp -rf ${S}/* ${D}/usr/
}
FILES_${PN} += "/usr/*"
INSANE_SKIP_${PN} += "already-stripped"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INHIBIT_PACKAGE_STRIP = "1"

感谢用户"RP";来自#Yocto IRC频道:所产生的图像中的二进制被";预链接";conf/local.conf中的选项:

USER_CLASSES ?= "buildstats image-mklibs image-prelink"

在去除";图像预链接";再对图像进行位烘焙,一切都很好。

相关内容

最新更新