呈兴 发表于 2025-2-27 03:00

如何在Yocto中添加自定义软件包?



如何编写自定义的BitBake配方(recipe)?

如何将自定义软件包集成到镜像中?

yangjiaxu 发表于 2025-3-6 15:22

本帖最后由 yangjiaxu 于 2025-3-6 15:23 编辑

我在网上找到了一点点资料,您看看是否能解决你的问题:
编写自定义的BitBake配方(recipe)并将自定义软件包集成到镜像中是Yocto项目开发中的常见任务。以下是详细的步骤和指导:

1. 编写自定义BitBake配方(Recipe)
BitBake配方是一个以.bb为后缀的文件,用于定义如何构建和安装软件包。

(1)创建配方文件
在Yocto项目的meta-custom层(或自定义层)中创建配方文件。

文件路径示例:meta-custom/recipes-custom/mysoftware/mysoftware_1.0.bb。

(2)配方文件的基本结构
一个典型的BitBake配方文件包含以下部分:

bitbake
复制
# 配方的基本信息
DESCRIPTION = "My custom software package"
LICENSE = "MIT"# 软件包的许可证
LIC_FILES_CHKSUM = "file://LICENSE;md5=..."# 许可证文件的校验和

# 源代码的获取方式
SRC_URI = "git://github.com/username/mysoftware.git;branch=main"
SRCREV = "commit_hash"# 指定具体的提交哈希

# 源代码的目录
S = "${WORKDIR}/git"

# 依赖项
DEPENDS = "dependency1 dependency2"

# 构建和安装步骤
do_compile() {
    oe_runmake# 调用Makefile编译
}

do_install() {
    install -d ${D}${bindir}# 创建安装目录
    install -m 0755 ${S}/mysoftware ${D}${bindir}/# 安装可执行文件
}
(3)关键字段说明
DESCRIPTION:软件包的描述。

LICENSE:软件包的许可证类型。

SRC_URI:源代码的获取方式(如Git、HTTP、本地文件等)。

SRCREV:Git提交哈希,用于指定具体的代码版本。

S:源代码解压后的目录。

DEPENDS:软件包的依赖项。

do_compile:编译步骤。

do_install:安装步骤。

(4)示例:从本地文件构建
如果软件包是本地文件,可以使用以下配置:

bitbake
复制
SRC_URI = "file://mysoftware-1.0.tar.gz"
SRC_URI = "checksum_value"# 文件的MD5校验和
2. 将自定义软件包集成到镜像中
(1)修改镜像配方
打开目标镜像的配方文件(如core-image-minimal.bb)。

在IMAGE_INSTALL变量中添加自定义软件包:

bitbake
复制
IMAGE_INSTALL += "mysoftware"
(2)创建自定义镜像配方
如果需要创建自定义镜像,可以在meta-custom层中创建一个新的镜像配方文件。

示例:meta-custom/recipes-core/images/custom-image.bb。

bitbake
复制
SUMMARY = "Custom image with mysoftware"
LICENSE = "MIT"

inherit core-image

IMAGE_INSTALL += "mysoftware"
(3)构建镜像
在Yocto项目根目录下运行以下命令,构建包含自定义软件包的镜像:

bash
复制
bitbake custom-image
3. 调试和验证
(1)检查构建日志
如果构建失败,查看日志文件(位于tmp/work/目录下)以定位问题。

(2)验证软件包
使用以下命令检查生成的软件包是否包含在镜像中:

bash
复制
bitbake -g custom-image
cat pn-buildlist | grep mysoftware
(3)测试镜像
将生成的镜像烧录到目标设备,验证自定义软件包是否正常工作。

4. 常见问题及解决方法
(1)构建失败
原因:依赖项缺失或配置错误。

解决方法:

检查DEPENDS字段,确保所有依赖项已正确列出。

查看构建日志,定位具体错误。

(2)软件包未包含在镜像中
原因:IMAGE_INSTALL未正确配置。

解决方法:

确保在镜像配方中添加了自定义软件包。

检查软件包的配方文件是否正确。

(3)许可证校验失败
原因:许可证文件的校验和不匹配。

解决方法:

更新LIC_FILES_CHKSUM字段,确保与许可证文件的实际校验和一致。

5. 总结
编写BitBake配方:定义软件包的源代码、依赖项、编译和安装步骤。

集成到镜像:通过修改镜像配方或创建自定义镜像配方,将软件包添加到镜像中。

调试和验证:检查构建日志,验证软件包是否包含在镜像中。

公羊子丹 发表于 2025-3-7 07:47

你是想添加一个已有的软件包,还是自己编写一个新的应用?Yocto 里可以用 .bb 文件来定义配方。

周半梅 发表于 2025-3-7 07:48

你可以参考 meta-st-stm32mp 里的示例 .bb 文件,按照它的格式修改就能创建自己的软件包。

帛灿灿 发表于 2025-3-7 07:50

你试过 devtool add 吗?它可以帮助你快速创建一个 BitBake 配方,适合新手上手。

童雨竹 发表于 2025-3-7 07:51

你的软件是从源码编译,还是只是要安装预编译的二进制文件?不同情况写 recipe 的方法也不同。

万图 发表于 2025-3-7 07:52

在 recipes-mysoftware 目录下新建 mysoftware.bb,然后定义 SRC_URI 和 do_install() 就能打包了。

Wordsworth 发表于 2025-3-7 07:54

你需要把自定义软件包加入到 IMAGE_INSTALL_append 里,才能确保它出现在最终的镜像中。

Bblythe 发表于 2025-3-7 07:56

你遇到过编译失败的问题吗?可以用 bitbake -c fetch 和 bitbake -c compile 逐步调试。

Pulitzer 发表于 2025-3-7 07:57

如果你的软件包依赖其他库,记得在 .bb 里用 DEPENDS 指定,否则编译可能会缺少依赖。

Uriah 发表于 2025-3-7 07:59

你是在哪个 layer 里添加配方的?推荐创建一个 meta-mycustomlayer,避免直接修改官方 layer。

Clyde011 发表于 2025-3-7 08:01

Yocto 里有很多现成的类(class)可以用,比如 cmake.bbclass,这样你的 recipe 代码会更简洁。

西洲 发表于 2025-4-19 01:33

在 Yocto 项目中,BitBake 配方是构建软件包的核心文件,定义了如何获取、编译、打包和安装软件

风凉 发表于 2025-4-19 02:34

一般来说可以找到目标镜像的配方文件(如 core-image-minimal.bb 或自定义镜像配方)

白马过平川 发表于 2025-4-19 03:37

可以使用 IMAGE_INSTALL 变量添加自定义软件包

捧一束彼岸花 发表于 2025-4-19 04:43

生成的镜像文件通常位于 tmp/deploy/images/<machine>/ 目录下。将镜像烧录到目标设备,启动后验证软件包是否正确安装

失物招領 发表于 2025-4-19 05:34

如果源代码托管在 Git 仓库中,可以使用指定 SRC_URI来操作

她已醉 发表于 2025-4-19 06:56

我知道的是如果软件包依赖于其他库,可以使用 DEPENDS 变量

将爱藏于深海 发表于 2025-4-19 07:34

一般来说,可以通过修改 do_install() 函数,将文件安装到其他目录

春日负喧 发表于 2025-4-19 08:23

如果软件包遵循标准的 Autotools 或 CMake 构建系统,可以使用 inherit 简化配方
页: [1]
查看完整版本: 如何在Yocto中添加自定义软件包?