我想替换Yocto中的默认包。具体来说,我想替换 OpenSSL。
我用过IMAGE_INSTALL_remove
,我加了PREFERRED_PROVIDER_virtual/openssl=<my version>
。但是由于某种原因,原始的 openssl 不断被其他配方构建和使用。
如何让我的 openssl 构建成为所有系统的默认提供程序?
好吧,Yocto 中确实没有全球范围内的 SSL 提供程序选择。
您必须查看哪些食谱拖入 openssl,并检查它们是否支持切换到 gnutls(或您想要使用的任何内容)。
如果我们看一下 curl_7.37.1.bb:
PACKAGECONFIG ??= "${@bb.utils.contains("DISTRO_FEATURES", "ipv6", "ipv6", "", d)} gnutls zlib"
PACKAGECONFIG_class-native = "ipv6 ssl zlib"
PACKAGECONFIG_class-nativesdk = "ipv6 ssl zlib"
PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
PACKAGECONFIG[ssl] = "--with-ssl,--without-ssl,openssl"
PACKAGECONFIG[gnutls] = "--with-gnutls=${STAGING_LIBDIR}/../,--without-gnutls,gnutls"
PACKAGECONFIG[zlib] = "--with-zlib=${STAGING_LIBDIR}/../,--without-zlib,zlib"
您会看到 curl 同时支持 gnutls 和 openssl。在这种特殊情况下,默认使用 gnutls 进行目标构建,而 openssl 用于本机(主机)构建。这可以从代码片段的前三行中确定。
因此,如果您想更改 curl 以将 openssl 用于您的目标构建,您应该在第一行替换gnutls
为。ssl
PACKAGECONFIG ??= "......"
相当多的食谱得到了这种支持,尽管它们之间的默认值有所不同。因此,您必须准确检查图像中的哪些食谱拖入 openssl,并重新配置它们(如果可能)。