首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Yocto: do_rootfs失败是因为找不到我正在构建的包

Yocto: do_rootfs失败是因为找不到我正在构建的包
EN

Stack Overflow用户
提问于 2021-03-04 19:53:52
回答 1查看 876关注 0票数 0

尝试在我的目标Intel平台中添加一个新的包,并使用Yocto构建系统。新包是intel-cmt-cat,其源代码取自这里。在查看了示例之后,我创建了我的简单食谱文件:

代码语言:javascript
运行
复制
% cat intel-cmt-cat_4.1.0.bb
SUMMARY = "Short summary"
DESCRIPTION = "Short description."
LICENSE = "BSD"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c63eb1250e8724441150d665efe12012"

SRC_URI = "git://github.com/intel/intel-cmt-cat.git;protocol=https"
SRCREV = "30fadea5cb82ff99f56e46172c7d20fdb24b2338"
S = "${WORKDIR}/git"

没有什么奇怪的事情,而且应该可以工作,但是它失败了(我删除了冗长的dnf命令,使其简短):

代码语言:javascript
运行
复制
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
ERROR: myimage-1.0-r0 do_rootfs: Could not invoke dnf.

dnf -v --rpmverbosity=info -y -c dnf.conf package1 package2 ... intel-cmt-cat
...
repo: using cache for: oe-repo
not found other for:
not found modules for:
not found deltainfo for:
not found updateinfo for:
oe-repo: using metadata from Thu 04 Mar 2021 07:12:38 PM UTC.
No module defaults found
No match for argument: intel-cmt-cat
Error: Unable to find a match

...
ERROR: Function failed: do_rootfs

在我看来,do_rootfs()函数正在失败。我检查了build目录,可以看到源已经被获取和构建了。然而,后面的步骤失败了:正如您所看到的,它无法找到我的包(据我所知)。

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2021-03-08 22:33:40

在阅读了yoctoproject.org的手册之后,我想出了以下方法:

代码语言:javascript
运行
复制
SUMMARY = "Short summary"
DESCRIPTION = "Short description."
LICENSE = "BSD"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c63eb1250e8724441150d665efe12012"

SRC_URI = "git://github.com/intel/intel-cmt-cat.git;protocol=https"
SRCREV = "30fadea5cb82ff99f56e46172c7d20fdb24b2338"

S = "${WORKDIR}/git"
TARGET_CC_ARCH += "${LDFLAGS}"

do_compile() {
   oe_runmake PREFIX=/usr
}

do_install() {
   oe_runmake PREFIX=${D}/usr NOLDCONFIG=y install
   rm -rf ${D}/usr/man
   rm -rf ${D}/usr/include
}

INSANE_SKIP_${PN} += "already-stripped"
FILES_${PN} += "${libdir}/libpqos* ${bindir}/pqos* ${bindir}/rdtset"}

英特尔-cat不使用cmake,只是好的老make和Makefile.

我只依赖于包的LDFLAGS,并且不会在配方中传递任何内容,因此在构建过程中会导致错误:

精灵二进制没有GNU_HASH:..。

为了解决这个问题,添加TARGET_CC_ARCH指令。

当我想传递不同的oe_runmake值(默认值是/usr/ PREFIX )时,我显式地调用了NOLDCONFIG=y;接下来,在do_install中,我传递的是NOLDCONFIG=y,如果生成的二进制文件尚未被删除,它将不会调用ldconfig,最后跳过检查(通过指令INSANE_SKIP)。这是因为Makefile已经调用了install -s ...,而我不想修补Makefile等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66482099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档