无法使用 Yocto 生成适用于 Windows 的 SDK

Posted

技术标签:

【中文标题】无法使用 Yocto 生成适用于 Windows 的 SDK【英文标题】:Can't generate SDK for Windows with Yocto 【发布时间】:2018-04-16 08:19:03 【问题描述】:

我已经为飞思卡尔 imx6qpsabreai 板和 SDK 构建了一个 Linux 映像,其中包含在 Linux 上运行良好的工具链。

现在我想支持 Windows 上的开发,并关注 this 的帖子

已将oe meta-mingw 下载到sources/meta-openembedded/meta-mingw 在我的项目中将 SDKMACHINE=x86_64-mingw32 添加到 local.conf

但是,我无法以这种方式构建新的 SDK。

~/yocto/fsl-community-bsp/build_fsl_framebuffer$ bitbake fsl-image-machine-test -c populate_sdk
Loading cache: 100% |###############################################################################################################################################################################| Time: 0:00:00
Loaded 2 entries from dependency cache.
ERROR: /home/slavskaya/yocto/fsl-community-bsp/sources/meta-openembedded/meta-mingw/recipes-support/libiconv/libiconv_1.14.bb: Error executing a python function in <code>:                        | ETA:  --:--:--

The stack trace of python calls that resulted in this exception/failure was:
File: '<code>', lineno: 13, function: <module>
     0009:__anon_35__home_slavskaya_yocto_fsl_community_bsp_sources_poky_meta_classes_devshell_bbclass(d)
     0010:__anon_106__home_slavskaya_yocto_fsl_community_bsp_sources_poky_meta_classes_sstate_bbclass(d)
     0011:__anon_45__home_slavskaya_yocto_fsl_community_bsp_sources_poky_meta_classes_blacklist_bbclass(d)
     0012:__anon_158__home_slavskaya_yocto_fsl_community_bsp_sources_poky_meta_classes_siteinfo_bbclass(d)
 *** 0013:__anon_31__home_slavskaya_yocto_fsl_community_bsp_sources_meta_openembedded_meta_mingw_recipes_support_libiconv_libiconv_1_14_bb(d)
File: '/home/slavskaya/yocto/fsl-community-bsp/sources/meta-openembedded/meta-mingw/recipes-support/libiconv/libiconv_1.14.bb', lineno: 28, function: __anon_31__home_slavskaya_yocto_fsl_community_bsp_sources_meta_openembedded_meta_mingw_recipes_support_libiconv_libiconv_1_14_bb
     0024:inherit autotools pkgconfig gettext
     0025:
     0026:python __anonymous() 
     0027:    if d.getVar("TARGET_OS") != "linux":
 *** 0028:        return
     0029:    if d.getVar("TCLIBC") == "glibc":
     0030:        raise bb.parse.SkipPackage("libiconv is provided for use with uClibc only - glibc already provides iconv")
     0031:
     0032:
Exception: TypeError: getVar() missing 1 required positional argument: 'expand'

ERROR: Failed to parse recipe: /home/slavskaya/yocto/fsl-community-bsp/sources/meta-openembedded/meta-mingw/recipes-support/libiconv/libiconv_1.14.bb

Summary: There were 2 ERROR messages shown, returning a non-zero exit code.

另外,我不是一个经验丰富的 C/C++ 程序员,但从我的角度来看,mingw 不包含用于 arm 架构的编译器,所以也许我无法让 arm 工具链在 Windows 上使用?

【问题讨论】:

【参考方案1】:

meta-mingw 构建从 Linux 到 Windows (mingw) 的交叉编译。然后,它使用此交叉编译器构建从 (mingw) 到目标 SDK 环境的标准工具链。您使用的是正确的图层,但有不同的问题。

看来您正在使用期待更新的 bitbake 语义的层 (meta-mingw):

 0027:    if d.getVar("TARGET_OS") != "linux":

*** 0028:返回 异常:TypeError:getVar() 缺少 1 个必需的位置参数:'expand'

Bitbake 过去需要 'd.getVar' 的两个参数,现在只需要一个(第二个是可选的)。

我建议您确定您正在使用的 oe-core/poky 版本并获取匹配版本的 meta-mingw。 (可能就像检查正确的分支一样简单。)

【讨论】:

非常感谢您解释此错误消息,我在使用 morty yocto 分支时检查了 meta-mingw master 分支。

以上是关于无法使用 Yocto 生成适用于 Windows 的 SDK的主要内容,如果未能解决你的问题,请参考以下文章

无法弄清楚如何使用适用于 Linux 和 composer 的 Windows 子系统运行 box\Spout

适用于 Windows 7 的 Git 无法从 github 克隆存储库

适用于 Windows 的 ClickHouse MYSQL 驱动程序无法正常工作

NamedPipeServerStream无法在Windows 10上运行(适用于Windows 7)

适用于 Windows 8.1 的 Nvidia GeForce 驱动程序无法在 Windows 10 上运行 [关闭]

无法在适用于 Windows 的 Python 3.7 上安装 win32core