打印
[STM32H7]

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

[复制链接]
273|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
呈兴|  楼主 | 2025-2-27 03:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


如何编写自定义的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[md5sum] = "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 文件,按照它的格式修改就能创建自己的软件包。

使用特权

评论回复
5
帛灿灿| | 2025-3-7 07:50 | 只看该作者
你试过 devtool add 吗?它可以帮助你快速创建一个 BitBake 配方,适合新手上手。

使用特权

评论回复
6
童雨竹| | 2025-3-7 07:51 | 只看该作者
你的软件是从源码编译,还是只是要安装预编译的二进制文件?不同情况写 recipe 的方法也不同。

使用特权

评论回复
7
万图| | 2025-3-7 07:52 | 只看该作者
在 recipes-mysoftware 目录下新建 mysoftware.bb,然后定义 SRC_URI 和 do_install() 就能打包了。

使用特权

评论回复
8
Wordsworth| | 2025-3-7 07:54 | 只看该作者
你需要把自定义软件包加入到 IMAGE_INSTALL_append 里,才能确保它出现在最终的镜像中。

使用特权

评论回复
9
Bblythe| | 2025-3-7 07:56 | 只看该作者
你遇到过编译失败的问题吗?可以用 bitbake -c fetch 和 bitbake -c compile 逐步调试。

使用特权

评论回复
10
Pulitzer| | 2025-3-7 07:57 | 只看该作者
如果你的软件包依赖其他库,记得在 .bb 里用 DEPENDS 指定,否则编译可能会缺少依赖。

使用特权

评论回复
11
Uriah| | 2025-3-7 07:59 | 只看该作者
你是在哪个 layer 里添加配方的?推荐创建一个 meta-mycustomlayer,避免直接修改官方 layer。

使用特权

评论回复
12
Clyde011| | 2025-3-7 08:01 | 只看该作者
Yocto 里有很多现成的类(class)可以用,比如 cmake.bbclass,这样你的 recipe 代码会更简洁。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

147

帖子

0

粉丝