如何保存在 Yocto 存储库中完成的本地更改?
How can I save local changes that have been done in Yocto repository?
我目前正在开发一些 Linux 嵌入式系统,并使用 Yocto 为开发板构建 Linux 发行版。
我遵循了 Yocto 构建流程:
- 下载图层源
- 构建映像
- 将图像刷入开发板或生成 SDK。
一切正常。但是,我需要对 local.conf 添加一些更改,可能添加一些 *.bbapend 文件、systemd 服务等等。
所以,我想知道如何保存本地更改,以防万一我想设置一台新的构建机器或当前的构建机器被损坏。
我是否应该创建一个自定义图像或层来继承电路板制造商的所有内容并添加我需要的更改和功能?或者别的什么?
通常在使用 Yocto 处理自定义项目时,您可能需要以下内容:
首先,您需要创建自定义图层
bitbake-layers create-layer meta-custom
并添加:
bitbake-layers add-layer <path/to/meta-custom>
之后,这里有一些想法:
官方食谱修改:
当您必须修改其他官方层中存在的某些官方配方时,您需要在自定义层中创建一个 .bbappend
文件并在那里进行更改。
meta-official/recipes-example/example/example_1.0.bb
您的修改必须在以下条件下进行:
meta-custom/recipes-example/example/example_1.0.bbappend
或匹配该食谱的所有版本:
meta-custom/recipes-example/example/example_%.bbappend
发行版修改:
如果您在 local.conf
中更改了 DISTRO_FEATURES
,您可能需要在新的自定义层中创建一个新的发行版:
meta-custom/conf/distro/custom-distro.conf
在custom-distro.conf:
include
或 require
您当前使用的发行版
- 添加您的自定义配置
DISTRO_FEATURES
然后,在创建新版本时,设置(在local.conf
中):
DISTRO = "custom-distro"
发行版更改示例:
- Select 初始化管理器:例如
INIT_MANAGER = "systemd"
。
- 添加一些发行版功能
- 设置一些首选食谱版本
PREFERRED_VERSION_recipe = "x"
- 设置一些首选提供商
PREFERRED_PROVIDER_virtual/xx = "x"
机器修改:
如果您的开发板有永久硬件组件,默认情况下在 Yocto 中未激活,那么我建议也创建一个新的自定义机器:
meta-custom/conf/machine/custom-machine.conf
其中,include
或require
您当前的机器配置文件,您可以:
- Select 您的首选 virtual/kernel 供应商
- Select 您的首选 virtual/bootloader 供应商
- Select 您的自定义内核和引导加载程序设备树文件
- 等等
然后,设置它(在 local.conf
中):
MACHINE = "custom-machine"
图片修改:
这是最有可能的修改,它使用 IMAGE_INSTALL
向映像添加一些包,因此您可能需要创建自定义映像:
meta-custom/recipes-core/images/custom-image.bb
在那 require
或 include
其他图像中和:
- 添加包
IMAGE_INSTALL
注释
如果你有 bbappend
附加到官方 bbappend
那么你可以考虑让你的层比 meta-custom/conf/layer.conf
[=52= 中的官方层更优先]
如果您的新自定义层依赖于您的制造商层,那么您可能会考虑在层配置文件中使其依赖于它:
LAYERDEPENDS_meta-custom = "meta-official"
- 我推荐使用
kas
,您可以使用自定义层设置自动层配置并自动创建构建,这对于 DevOps 管道自动化也很有用。
这就是我现在能想到的:))
编辑
然后您可以为您的自定义图层创建一个自定义存储库。
如果您使用repo
为您的制造商提供的初始化,那么您可以使用这个想法:
您可以自定义制造商的清单文件以添加新的自定义存储库,如下所示:
为您的自定义 git 服务器添加 remote
块
<remote name="custom-git" fetch="ssh://git@gitlab.xxx/<group>/"/>
如果您的自定义图层在 git 服务器下,请直接删除 group
或设置它。
然后,将您的自定义图层添加为 project
:
<project path="<where/to/unpack>" name="<name/under/remote>" remote="custom-git" revision="<commit>" />
您可以查看更多 repo
详细信息 here。
最后,您只需将 repo
与您的自定义 repository/manifest:
一起使用
repo init -u <custom-git/manifest-project> -b <branch> -m custom-project.xml
repo sync
我目前正在开发一些 Linux 嵌入式系统,并使用 Yocto 为开发板构建 Linux 发行版。
我遵循了 Yocto 构建流程:
- 下载图层源
- 构建映像
- 将图像刷入开发板或生成 SDK。
一切正常。但是,我需要对 local.conf 添加一些更改,可能添加一些 *.bbapend 文件、systemd 服务等等。 所以,我想知道如何保存本地更改,以防万一我想设置一台新的构建机器或当前的构建机器被损坏。
我是否应该创建一个自定义图像或层来继承电路板制造商的所有内容并添加我需要的更改和功能?或者别的什么?
通常在使用 Yocto 处理自定义项目时,您可能需要以下内容:
首先,您需要创建自定义图层
bitbake-layers create-layer meta-custom
并添加:
bitbake-layers add-layer <path/to/meta-custom>
之后,这里有一些想法:
官方食谱修改:
当您必须修改其他官方层中存在的某些官方配方时,您需要在自定义层中创建一个 .bbappend
文件并在那里进行更改。
meta-official/recipes-example/example/example_1.0.bb
您的修改必须在以下条件下进行:
meta-custom/recipes-example/example/example_1.0.bbappend
或匹配该食谱的所有版本:
meta-custom/recipes-example/example/example_%.bbappend
发行版修改:
如果您在 local.conf
中更改了 DISTRO_FEATURES
,您可能需要在新的自定义层中创建一个新的发行版:
meta-custom/conf/distro/custom-distro.conf
在custom-distro.conf:
include
或require
您当前使用的发行版- 添加您的自定义配置
DISTRO_FEATURES
然后,在创建新版本时,设置(在local.conf
中):
DISTRO = "custom-distro"
发行版更改示例:
- Select 初始化管理器:例如
INIT_MANAGER = "systemd"
。 - 添加一些发行版功能
- 设置一些首选食谱版本
PREFERRED_VERSION_recipe = "x"
- 设置一些首选提供商
PREFERRED_PROVIDER_virtual/xx = "x"
机器修改:
如果您的开发板有永久硬件组件,默认情况下在 Yocto 中未激活,那么我建议也创建一个新的自定义机器:
meta-custom/conf/machine/custom-machine.conf
其中,include
或require
您当前的机器配置文件,您可以:
- Select 您的首选 virtual/kernel 供应商
- Select 您的首选 virtual/bootloader 供应商
- Select 您的自定义内核和引导加载程序设备树文件
- 等等
然后,设置它(在 local.conf
中):
MACHINE = "custom-machine"
图片修改:
这是最有可能的修改,它使用 IMAGE_INSTALL
向映像添加一些包,因此您可能需要创建自定义映像:
meta-custom/recipes-core/images/custom-image.bb
在那 require
或 include
其他图像中和:
- 添加包
IMAGE_INSTALL
注释
如果你有
bbappend
附加到官方bbappend
那么你可以考虑让你的层比meta-custom/conf/layer.conf
[=52= 中的官方层更优先]如果您的新自定义层依赖于您的制造商层,那么您可能会考虑在层配置文件中使其依赖于它:
LAYERDEPENDS_meta-custom = "meta-official"
- 我推荐使用
kas
,您可以使用自定义层设置自动层配置并自动创建构建,这对于 DevOps 管道自动化也很有用。
这就是我现在能想到的:))
编辑
然后您可以为您的自定义图层创建一个自定义存储库。
如果您使用repo
为您的制造商提供的初始化,那么您可以使用这个想法:
您可以自定义制造商的清单文件以添加新的自定义存储库,如下所示:
为您的自定义 git 服务器添加 remote
块
<remote name="custom-git" fetch="ssh://git@gitlab.xxx/<group>/"/>
如果您的自定义图层在 git 服务器下,请直接删除 group
或设置它。
然后,将您的自定义图层添加为 project
:
<project path="<where/to/unpack>" name="<name/under/remote>" remote="custom-git" revision="<commit>" />
您可以查看更多 repo
详细信息 here。
最后,您只需将 repo
与您的自定义 repository/manifest:
repo init -u <custom-git/manifest-project> -b <branch> -m custom-project.xml
repo sync