在poky/build/tmp/work目录中编辑源代码是一种好习惯吗?因为如果我们不小心清理了,那么更改将被删除.
或者我们可以编辑"files"目录中的源代码以及配方文件,但由于大量文件,因此大多数代码都是压缩形式,因此我们需要再次解压缩和压缩以更改一行代码.
那么在yocto中编辑源代码的最佳方法是什么?
我已经创建了自己的配方来构建我的SW,它在构建期间需要本机perl(例如,调用perl脚本来生成代码).如果我将配方添加到图像并使用bitbake与图像构建配方,则没有问题.
现在我还想用一个填充SDK来构建SW,但是我发现当我生成填充SDK时,本机perl只包含一些模块而没有构建我的SW所需的模块.我发现了两种使用其他perl模块生成填充SDK的方法:
对于1,它是特定于图像的解决方案.对于2,它是一个全球解决方案.
现在我正在寻找特定配方的解决方案.有没有我可以在我的配方.bb文件中添加一些配置的解决方案,然后我为包含我的配方的任何图像构建填充SDK将包含这些额外的本机perl模块?
我最近开始构建基于Linux的嵌入式系统,这与我通常的嵌入式设备相去甚远,我可以完全控制所有内容.
作为其中的一部分,我正在研究Yocto/bitbake/OpenEmbedded构建系统.
我正在努力解决一件事,那就是分层概念,所以我试图弄清楚层使用/影响其他层的方式.
从我的理解至今,.bb配方文件使用require简单地包含另一个文件,类似于C的#include "myheader.h"这通常看起来本地.
甲.bbappend在"上"层将自动神奇地包括基础文件文件然后进行更改,排序的固有require.
相比之下,inherit关键字查找一个.bbclass在多,因为它所处的同样的方式类文件.bb的文件,并继承了所有从他们的detials(有点像#include <stdio.h>这又一般,看在系统区(A) ).
所以问题的第一部分是:我的理解是否正确?还是我太简单了?
然后我的问题的第二部分涉及BBEXTENDS根据我目前的理解使用.如果我们已经能够通过使用扩展配方require,那么在BBEXTENDS变量中列出所述配方的目的是什么?
(a)是的,我知道它们都完全依赖于标题的来源,我只是谈论它们的常用用法.
我正在努力用yocto构建一个自己的"embeeded linux".它基于SAMA5D3x-MB + SAMA5D3x-CM(RONETIX)和SAMA5D35.我有两个问题:
1.)更改设备树
我根据以下内容构建了一个图像:MACHINE ?? ="sama5d3xek"
在生成过程之后,我在deploy dir中找到了5D35的两个设备树文件:
因为主板是revD我使用zImage - 4.1 + git0 + 19291d7be4-r0-sama5d35ek-.dtb.
在此文件中,只定义了can0和i2c1.
我也喜欢使用can1和i2c0.为此我想我需要创建一个自己的dts文件并将其包含在内核构建过程中.
到目前为止,我将dts文件放在我的元测试配方中.想法如何将其复制/修补到内核中?
2.)更改内核配置
我用bitbake virtual/kernel -c menuconfig检查了内核
因为我没有使用SAMA5D2等,只有控制台我停用了这些内核配置.我将新的".config"保存到my-recipe目录中.我有一个类似的问题,如1 - 如何修补/复制到内核?
我是yocto和内核黑客的新手.知道怎么做吗?
我是一个非常懒惰的人.在处理硬件/软件项目时,软件会永久更改.在这个开发阶段,更改配方中的commit/reversion-tags非常讨厌.我希望Yocto获取最新的git提交.这可能/如何做到这一点?我的示例食谱:
SUMMARY = "my test"
SECTION = "test"
LICENSE = "CLOSED"
inherit cmake
SRCREV = "f9bdbd6c631f07e427c010086c7c26a95eb2924e"
SRC_URI = "gitsm://myGit/mytest;protocol=http;branch=develop"
S = "${WORKDIR}/git/"
Run Code Online (Sandbox Code Playgroud) 我需要foo在一个配方(foo-native)中安装一个本机脚本,调用它,然后在do_compile另一个(目标)配方的步骤中使用它- 调用它bar.
我的(最小)原生食谱
SRC_URI = "file://foo"
LICENSE = "CLOSED"
inherit native
BBCLASSEXTEND = "native"
S = "${WORKDIR}"
do_compile() {
:
}
do_install() {
install -d ${D}/usr/bin
install ${WORKDIR}/foo ${D}/usr/bin
}
Run Code Online (Sandbox Code Playgroud)
该脚本foo存在于一个目录中,该目录files位于配方旁边.即
foo/
??? files
? ??? foo
??? foo.bb
Run Code Online (Sandbox Code Playgroud)
我的目标食谱 bar
SRC_URI = ""
LICENSE = "CLOSED"
DEPENDS = "foo-native"
do_fetch[noexec] = "1"
do_configure[noexec] = "1"
do_compile() {
foo >myfile.json
}
do_install() {
install -d ${D}/etc
install ${WORKDIR}/myfile.json …Run Code Online (Sandbox Code Playgroud) 使用 Yocto 项目为 iMX6 开发板构建 linux,我想更改用于构建 u-boot-imx(iMX 开发板的 u-boot)的 .config - 例如将自动启动延迟更改为 1 秒作为例子。
我可以编辑配置(例如找到构建目录并运行 make menuconfig),但是当我运行 bitbake 来重建映像时,它会再次使用默认值覆盖 .config。xxx_defconfig 文件很多,不知道用的是哪个。
我按照本指南使用 Yocto 项目进行内核配置。我对 .config 文件进行了更改,并将其复制到我的图层并重命名为“defconfig”。我用u-boot-imx_2017.03.bbappend创建了一个新层来扩展u-boot-imx_2017.03.bb(u-boot-imx 的配方)。
这是我的u-boot-imx_2017.03.bbappend
FILESEXTRAPATHS_prepend := "${THISDIR}:"
SRC_URI += "file://defconfig"
Run Code Online (Sandbox Code Playgroud)
我还将它添加到 layer.conf 中的“BBFILES”
我重建 u-boot 如下:
bitbake -f -D u-boot-imx -c compile
Run Code Online (Sandbox Code Playgroud)
当我这样做时,构建目录中的 .config 文件将恢复为默认配置(不是我更改的版本),并且生成的 u-boot 二进制文件没有更改(启动延迟仍为 3 秒)。
我认为我的图层正在被处理,因为我在输出中看到了这一点:
DEBUG: Appending .bbappend file /home/bob/yocto/morty/sources/meta-mylayer/imx/meta-bsp/recipes-bsp/u-boot/u-boot-imx_2017.03.bbappend to /home/bob/yocto/morty/sources/meta-fsl-bsp-release/imx/meta-bsp/recipes-bsp/u-boot/u-boot-imx_2017.03.bb
Run Code Online (Sandbox Code Playgroud)
我看不到任何调试输出说有错误(例如,找不到我的 defconfig 文件)。
如何使用 Yocto 对 u-boot 配置进行这种更改?
===== 编辑 =====
我按照下面 …
我正在尝试为 Yocto 中的自定义库创建一个配方。我目前收到此错误:
ERROR: ... do_package: QA Issue: pot-plugin: Files/directories were installed but not shipped in any package:
/usr/lib/qt5/plugins/mediaservice/a.so.1.0
/usr/lib/qt5/plugins/mediaservice/a.so.1
Please set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install.
Run Code Online (Sandbox Code Playgroud)
我已经设置了这些,FILES_${PN}但在这种情况下,Yocto 抱怨那些符号链接太多,并且不属于该包。实际上,正确的做法是将它们也从 sysroot 本身中删除。因此,我尝试定义该do_install步骤,但在创建包之前找不到如何删除这些步骤。我做了类似的事情:
do_install {
rm <some_path>/a.so.1.0
rm <some_path>/a.so.1
}
Run Code Online (Sandbox Code Playgroud)
但我找不到正确的使用路径。有人可以解释这是否是解决问题的正确方法,如果是,我应该使用什么路径在安装这些文件之后和创建包之前删除这些文件?谢谢!
有没有办法root在AWS CodeBuild上删除用户?我们正在构建一个 Yocto 项目,如果我们是 root(Bitbake 健全性检查),该项目在 CodeBuild 上失败。
我们绝望的方法也不起作用:
...
build:
commands:
- chmod -R 777 $(pwd)/ && chown -R builder $(pwd)/ && su -c "$(pwd)/make.sh" -s /bin/bash builder
...
Run Code Online (Sandbox Code Playgroud)
失败:
bash: /codebuild/output/src624711770/src/.../make.sh: Permission denied
Run Code Online (Sandbox Code Playgroud)
知道我们如何以非 root 身份运行它吗?
我正在使用 Yocto v2.4.1 和 BitBake v1.36.0。我想从我自定义生成的 Linux 映像中删除 qemu 和 qemu-native(所有与 qemu 相关的东西)。
我怎样才能做到这一点 ?
谢谢
bitbake ×10
yocto ×10
openembedded ×3
linux ×2
embedded ×1
git ×1
linux-kernel ×1
qemu ×1
recipe ×1
yocto-recipe ×1