新增软件包指导

配方(bb文件)是 Yocto 项目中的基本组件。Yocto 构建系统构建的每个软件组件都需要一个配方来定义组件;bbappend 文件是 bb 文件的补充,在 bb 文件之后解析。

新增软件包到镜像中需要软件包的源码和对应的 bb 文件。

主要过程

  1. 源码获取

源码通常在 src-openEuler 上获取,在 download_code.sh 脚本中增加下载相关代码的命令;如果 src-openEuler 上不存在对应源码,可以从官网获取后放在 SRC_DIR 目录(yocto-meta-openeuler同级目录)下。

例如,在 download_code.sh 脚本中增加下载 audit 源码:

...
download_code()
{
    ...
    update_code_repo src-openeuler/audit ${SRC_BRANCH}  //SRC_BRANCH为分支名
}
  1. 获取配方(bb文件)

先确认 yocto-poky 仓是否存在相应软件包的 bb 文件:

$ find yocto-poky -name <package>*.bb

如果没有找到则可以在 OpenEmbedded Layer 搜索,然后拷贝需要的文件(bb、补丁等)到 meta-openeuler 层。

  1. 适配配方

bbappend 文件作为 bb 文件的补充,开发者可以通过在 bbappend 文件中增加内容来对 bb 文件进行覆盖更改,而不用直接对 bb 文件进行更改。
开发者首先在 meta-openeuler 层 bb 文件对应的目录下创建 bbappend 文件,文件命名为 <package>_%.bbappend,Yocto 中 “%” 为通配符,这样命名能匹配任何一个找到的 bb 文件版本;下一步根据构建需求编写 bbappend 内容,并做好相应注释说明,大多数情况下编写的内容如下:
  • OPENEULER_REPO_NAME: src-openEuler 存储仓名称;

  • PV: 版本;

  • SRC_URI: 源码来源;

  • SRC_URI[md5sum/sha256sum]: 源码校验码;

  • S: 源码解压后目录。

OPENEULER_REPO_NAME = "仓库具体命名"
PV = "版本号"
SRC_URI_remove = "原源码链接"
SRC_URI_prepend = "file://源码包 \
"
SRC_URI[sha256sum] = "校验码" //执行 sha256sum 源码包
S = "${WORKDIR}/${BP}" //BP变量表示软件名-版本号,如果不符合则需要修改

举例:查看 meta-openeuler/recipes-support/libjitterentropy/libjitterentropy_%.bbappend 的编写。

优先构建未支持的依赖包,从下往上依次适配;查看依赖方法:

bitbake <package> -g  //此命令输出软件依赖到文件中
cat pn-buildlist
  1. 单包构建

$ bitbake <package>
  1. 加入镜像

单包构建完成后,将所需子包追加到包管理 bb 文件 RDEPNDNS 变量中(文件位于 meta-openeuler/recipes-core/packagegroups/packagegroup-xxx.bb)。例如:

RDEPENDS_${PN} += "audit"
  1. 构建镜像

openeuler-image-tiny 镜像中只包含了运行系统所需的最基本的包文件,构建所需时间较少;为了避免构建时间过长,推荐先将所需子包加入到 openeuler-image-tiny 镜像进行验证,验证通过后再加入到 openeuler-image 镜像中。

bitbake openeuler-image or openeuler-image-tiny

这时产生的镜像中已经包含了你所需的软件包。