Yoto本机内部版本在64位系统上32位的某些配方

问题描述 投票:0回答:1

我正在尝试在yocto中将某些本机软件包构建为32位(实际上是在64位Linux上为2.6.1)。我的目标根本不使用multilib。假设我正在构建配方a,它需要(所有构建时,都静态链接)包b以及zliblibcrypto。通过将-m32添加到gcc调用中,我设法将a和b构建为32位,并且链接/运行正常。但是,构建系统对此一无所知,并将所有内容置于work/x86_64-linux下。

我必须使用预构建的32位zlib和libcrypto库才能正常工作,因为yocto在让我(DEPENDS_class-native = "b-native zlib-native openssl-native")时当然会尝试为我提供64位版本的zlib和libcrypto,从而导致链接器错误。希望yocto在正确的体系结构中为我构建它们。

我已经尝试过TARGET_ARCHBUILD_ARCH,但它根本无法将其更改为32位,或者给出了找不到的错误。 quilt为32位(要应用补丁,可以/应该使用64位被子来完成)。

特定错误有很多前缀

WARNING: a-native-1_0.4-r0 do_prepare_recipe_sysroot: 
Manifest /yoctoroot/work/sstate-control/manifest-i586-quilt-native.populate_sysroot 
not found in i586 (variant '')?
....
WARNING: a-native-1_0.4-r0 do_prepare_recipe_sysroot: 
Manifest /yoctoroot/work/sstate-control/manifest-i586-openssl-native.populate_sysroot 
not found in i586 (variant '')?
....
ERROR: a-native-1_0.4-r0 do_patch: 
Command Error: 'quilt --quiltrc /yoctoroot/work/i586-linux/a-native/1_0.4-r0/recipe-sysroot-native/etc/quiltrc push' 
exited with 0  Output:    /bin/sh: quilt: command not found
ERROR: a-native-1_0.4-r0 do_patch: Function failed: patch_do_patch
ERROR: Logfile of failure stored in: ...

添加时

BUILD_ARCH_native = "i586"
BUILD_ARCH_class-native = "i586"
TARGET_ARCH_native = "x86"
TARGET_ARCH_class-native = "x86"

对a和b复制。

软件包a和b不仅是纯本地的,它们还针对目标而构建,并使用BBCLASSEXTEND = "native"启用本地构建;理想情况下,解决方案不应破坏目标构建,也不应破坏生态系统中的所有其他本地事物。

之所以我要它们全部为32位,是因为包a和b进行了混合指针/整数算法,当这些数据类型的大小不匹配时,该算法会中断;如果我不必更改这些来源,我将不胜感激。我问得太多了吗?

提前感谢您的任何想法和指示!

yocto bitbake
1个回答
0
投票

我知道了,但是感觉并不比使用预构建的二进制文件好得多,并且如果存在两个以上的依赖关系,这似乎是不可行的。

我在a和b配方中添加了以下几行(嗯,BBCLASSEXTEND已经存在:]

BUILD_ARCH_class-native = "i586"
TARGET_ARCH_class-native = "x86"
PATCHTOOL_class-native = "patch"
BBCLASSEXTEND = "native"

这将使被子错误消失,并将它们放入i586-linux目录而不是x86_64-linux

对于zlib和openssl,我将原始配方复制为zlib32bitxyz-nativeopenssl32bitxyz-native到自己的一层(包括补丁文件等)中,并添加了以下几行:

BUILD_ARCH = "i586"
TARGET_ARCH = "x86"
PATCHTOOL = "patch"
inherit native
BP = "openssl-${PV}" # or zlib

以及在某些地方分别用${PN}openssl代替zlib

让他们建立32位是openssl的基础,它确实起作用。

对于zlib,事情始于没有找到xz来解压缩下载的档案的过程。我在hosttools目录中手动添加了指向/usr/bin/xz的链接。

此外,我进行了调整

do_configure() {
    CFLAGS="-m32" ./configure --prefix=${WORKDIR}/recipe-sysroot-native/usr --libdir=${WORKDIR}/recipe-sysroot-native/usr/lib --uname=GNU
}

这将使构建版本变为32位并删除未使用的共享内容。

然后,在配方a中,本机依赖项现在读取为

DEPENDS_class-native += "b-native openssl32bitxyz-native zlib32bitxyz-native"

并且所有构建和链接都可以(但是带有很多警告,请参阅问题),并且显示为32位。

如果这让您感到震惊,请随时以正确的方式指导我。

编辑:什么不起作用

我想了一晚,为什么不在仅包含层的图层中简单地使用zlib_%.bbappendopenssl_%.bbappend

BUILD_ARCH_class-native = "i586"
TARGET_ARCH_class-native = "x86"
PATCHTOOL_class-native = "patch"
BBCLASSEXTEND = "native nativesdk"

加上,对于zlib,如上do_configure_class-native,然后替换为配方aDEPENDS_class-native + =“ b-native zlib-native openssl-native”

对于a,确实有效!!但是,它破坏了[[nearly所有其他本机信息,例如do_configure中来自kmod_native

| checking for zlib... no | configure: error: Package requirements (zlib) were not met: | | No package 'zlib' found | | Consider adjusting the PKG_CONFIG_PATH environment variable if you | installed software in a non-standard prefix. | | Alternatively, you may set the environment variables zlib_CFLAGS | and zlib_LIBS to avoid the need to call pkg-config. | See the pkg-config man page for more details. | NOTE: The following config.log files may provide further information. | NOTE: /media/hegny/1.42.6-5592/yo419/tisdk_workdir-external-arm-toolchain/work/x86_64-linux/kmod-native/25+gitAUTOINC+aca4eca103-r0/build/config.log | ERROR: configure failed | WARNING: /media/hegny/1.42.6-5592/yo419/tisdk_workdir-external-arm-toolchain/work/x86_64-linux/kmod-native/25+gitAUTOINC+aca4eca103-r0/temp/run.do_configure.28023:1 exit 1 from 'exit 1' | ERROR: Function failed: do_configure (log file is located at /media/hegny/1.42.6-5592/yo419/tisdk_workdir-external-arm-toolchain/work/x86_64-linux/kmod-native/25+gitAUTOINC+aca4eca103-r0/temp/log.do_configure.28023) ERROR: Task (/media/hegny/1.42.6-5592/yo419/tisdk/sources/oe-core/meta/recipes-kernel/kmod/kmod-native_git.bb:do_configure) failed with exit code '1'

没有像本地multilib这样简单吗?

© www.soinside.com 2019 - 2024. All rights reserved.