yocto5.2开发任务手册-3 了解和创建层

此文为机器辅助翻译,仅供个人学习使用,如有翻译不当之处欢迎指正

原文链接:https://docs.yoctoproject.org/dev-manual/layers.html#

3 了解和创建层

OpenEmbedded 构建系统支持将元数据组织成多个层。层使你能够将不同类型的定制相互隔离。有关 Yocto 项目层模型的介绍性信息,请参阅《Yocto 项目概述和概念手册》中的 “Yocto 项目层模型” 一节。

3.1 创建您自己的层

[!NOTE]
使用 OpenEmbedded 构建系统创建自己的层非常容易,因为 Yocto 项目自带了能加快层创建速度的工具。本节介绍手动创建层的步骤,以便你能更好地理解。有关层创建工具的信息,请参阅《Yocto 项目板级支持包(BSP)开发者指南》中的 “使用 bitbake-layers 脚本创建新的 BSP 层” 部分,以及本手册后文 “使用 bitbake-layers 脚本创建通用层” 部分。

请按照以下一般步骤,在不使用工具的情况下创建自己的层:

1.检查现有层:在创建新层之前,你应确认是否已有其他人创建了包含你所需元数据的层。你可以查看 OpenEmbedded 元数据索引,获取可在 Yocto 项目中使用的 OpenEmbedded 社区层列表。你可能会找到与你需求相同或相近的层。

2.创建目录:为你的层创建目录。创建层时,确保在与 Yocto 项目源目录(例如克隆的 poky 存储库)无关的区域创建该目录。

虽然并非严格要求,但建议在目录名称前加上 “meta-” 字

meta-mylayer
meta-GUI_xyz
meta-mymachine

除极少数情况外,层的名称遵循以下形式:

meta-root_name

遵循此层命名约定,日后在工具、组件或变量 “假定” 你的层名称以 “meta-” 开头时,可为你省去麻烦。一个明显的例子是在配置文件中,如下一步所示,没有 “meta-” 字符串的层名称会被追加到配置中使用的几个变量中。

3.创建层配置文件:在新创建的层文件夹内,你需要创建一个 conf/layer.conf 文件。最简单的方法是选取一个现有的层配置文件,将其复制到你的层的 conf 目录中,然后根据需要进行修改。

Yocto 项目源存储库中的 meta-yocto-bsp/conf/layer.conf 文件展示了所需的语法。对于你的层,你需要将 “yoctobsp” 替换为你层的唯一标识符(例如,对于名为 “meta-machinexyz” 的层,可替换为 “machinexyz”):

    # We have a conf and classes directory, add to BBPATH
    BBPATH .= ":${LAYERDIR}"
    
    # We have recipes-* directories, add to BBFILES
    BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
                ${LAYERDIR}/recipes-*/*/*.bbappend"
    
    BBFILE_COLLECTIONS += "yoctobsp"
    BBFILE_PATTERN_yoctobsp = "^${LAYERDIR}/"
    BBFILE_PRIORITY_yoctobsp = "5"
    LAYERVERSION_yoctobsp = "4"
    LAYERSERIES_COMPAT_yoctobsp = "dunfell"

以下是对层配置文件的解释:

  • BBPATH:将层的根目录添加到 BitBake 的搜索路径中。通过使用 BBPATH 变量,BitBake 可以定位类文件(.bbclass)、配置文件以及通过 includerequire 语句包含的文件。在这些情况下,BitBake 会使用在 BBPATH 中找到的第一个匹配名称的文件。这与 PATH 变量用于定位二进制文件的方式类似。因此,建议在自定义层中使用唯一的类和配置文件名。

  • BBFILES:定义层中所有配方文件的位置。

  • BBFILE_COLLECTIONS: 通过一个唯一标识符来指定当前层,整个 OpenEmbedded 构建系统使用这个标识符来引用该层。在这个例子中,“yoctobsp” 这个标识符代表名为 “meta-yocto-bsp” 的容器层。

  • BBFILE_PATTERN: 在解析时会立即展开,用于指定层的目录。

  • BBFILE_PRIORITY: 当 OpenEmbedded 构建系统在不同层中找到同名配方时,为该层中的配方设置优先级。

  • LAYERVERSION中: 为层建立版本号。在使用 LAYERDEPENDS 变量时,可以用这个版本号指定该层的精确版本作为依赖项。

  • LAYER依赖: 列出该层所依赖的所有层(如果有的话)。

  • LAYERSERIES_COMPAT: 列出与当前层版本兼容的 Yocto 项目版本。这个变量是表明特定层是否为最新版本的一种有效方式。

[!NOTE]
层不一定只包含配方文件.bb 或追加文件.bbappend。通常,开发者使用 bitbake-layers create-layer 命令创建层。请参阅 “使用 bitbake-layers 脚本创建通用层”,该部分解释了 layer.conf 文件是如何从位于 meta/lib/bblayers/templates/layer.conf 的模板创建的。实际上,layer.conf 中设置的变量都不是强制的,除非存在 BBFILE_COLLECTIONS 变量。在这种情况下,还必须定义 LAYERSERIES_COMPATBBFILE_PATTERN 变量。

4.添加内容:根据层的类型添加相应内容。如果该层为某机器添加支持,就在层内的 conf/machine/ 文件中添加机器配置。如果该层添加发行版策略,就在层内的 conf/distro/ 文件中添加发行版配置。如果该层引入新配方,就将所需的配方放在层内的 recipes-* 子目录中。

[!NOTE]
有关符合 Yocto 项目规范层的层次结构说明,请参阅《Yocto 项目板级支持包(BSP)开发者指南》中的 “示例文件系统布局” 章节。

5.可选兼容性测试:如果您希望您的层或使用该层的应用程序有权使用 Yocto Project 兼容性标志,请执行申请兼容性的步骤。有关更多信息,请参见 “确保您的层与 Yocto Project 兼容” 部分。

3.2 创建层时的最佳实践

为了创建更易于维护且不会影响其他机器构建的层,您应考虑以下建议:

1.避免在配置中 “覆盖” 其他层的完整配方:换言之,不要将整个配方复制到您的层中再进行修改,而应使用追加文件(.bbappend)仅覆盖原始配方中需要修改的部分。

2.避免重复包含文件:对每个使用包含文件的配方使用追加文件(.bbappend)。或者,如果您引入需要包含文件的新配方,请使用相对于原始层目录的路径引用该文件。例如,使用 require recipes-core/package/file.inc 而非 require file.inc。如果需要覆盖包含文件,可能表明该文件所在层存在不足。此时,您应尝试解决该不足,而非直接覆盖包含文件。例如,您可以联系包含文件的维护者,添加可轻松覆盖所需部分的变量。

3.合理构建层结构:在追加文件中正确使用覆盖功能,并将机器特定文件放置在层内,可确保构建不会使用错误的元数据,从而避免对其他机器的构建产生负面影响。以下是一些示例:

  • 修改变量以支持不同机器:假设您有一个名为 meta-one 的层,用于支持构建机器 “one”。为此,您使用名为 base-files.bbappend 的追加文件,并通过修改 DEPENDS 变量创建对 “foo” 的依赖:

    DEPENDS = "foo"

    该依赖会在包含 meta-one 层的任何构建中生效。但您可能不希望所有机器都有此依赖

你可能感兴趣的:(数据库,java,服务器,linux)