0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用Yocto/OpenEmbedded进行嵌入式软件部署

星星科技指导员 来源:嵌入式计算设计 作者:Max Krummenacher 2022-06-22 14:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

开发应用程序并将其存储在设备的 ROM 上不再是当前嵌入式设备上的简单部署过程。

一旦你的应用程序为下一个测试/发布周期做好了准备,你仍然需要将它与你的操作系统重新集成,调整配置文件,启用你的东西的自动启动等等,并将它打包成一个允许更新的表单设备。

本文概述了如何在 Yocto/OpenEmbedded 的帮助下为基于嵌入式 Linux 的设备自动化这种集成,从而使该过程更不容易出错、更可重复,并使用您使用的每个组件的定义明确的版本。

您的硬件供应商很有可能已经将 Yocto/OpenEmbedded 用于其 Linux BSP。无需按原样使用该通用 BSP,只需将您的应用程序集成到 Yocto/OpenEmbedded 构建过程中,并完全自动构建您完成的可交付成果。

Yocto/OpenEmbedded

Yocto和OpenEmbedded共同构成了一个构建框架,它可以从源代码创建内核映像、根文件系统映像和可安装包。

该框架使用元信息(称为配方)在目标设备的 x86/x86_64 Linux 构建主机上下载/编译/部署软件包。

食谱被分成几层。层聚合用于分发的配方、不同 CPU/SBC/模块供应商的 BSP 功能、基础系统、特定领域的软件等。许多可用的层和配方可以通过这个网络界面找到。

要充分利用本文,需要对 Yocto/OpenEmbedded 有基本的了解。该项目带有出色的文档,请参阅上面的链接或直接进入手册。

最重要的是,我可以推荐Otavio Salvador 和 Daiana Anolini 的书来帮助你快速入门。

设置 Yocto/Openembedded

在本文中,我们将使用Toradex Colibri T30 计算机模块。按照设置说明进行操作。

查找并执行 SoC 或模块供应商提供的说明以进行初始设置。

然后通过构建已经提供的目标之一来测试您的安装,以确保在我们开始摆弄之前安装工作正常。

为了节省一些时间,构建一个简单的图像。不要忘记,在进行任何 bitbake 操作之前,您必须获取一个脚本来设置环境。在我们的例子中:

oe-core》 。 export

build》 bitbake -k core-image-base

构建将需要一些时间,然后您希望收到一条最终消息:“注意:任务摘要:尝试了 1806 个任务,其中 23 个不需要重新运行并且全部成功。”

现在我们准备好为我们的产品需求定制构建。

创建包含应用程序和图像配方的层

这在此处进行了详细解释。请注意,下面描述的层也可以在这里下载。

我们在 stuff/ 中添加一个新层,它将保存我们应用程序的配方和对图像配方的修改。让我们调用新层元产品:

stuff》 git init meta-product

stuff》 mkdir -p meta-product/conf

meta-product》 cat conf/layer.conf

BBPATH 。= “:null{systemd_unitdir}/system/ null{sysconfdir}/systemd/system/

+ install -m 0644 ${WORKDIR}/fb-draw.service null{systemd_unitdir}/system

+ ln -s /dev/null null{sysconfdir}/systemd/system/getty@tty1.service

}

+

+NATIVE_SYSTEMD_SUPPORT = ”1“

+SYSTEMD_PACKAGES = ”${PN}“

+SYSTEMD_SERVICE_${PN} = ”fb-draw.service“

修改图像

现在我们有了构建应用程序的配方,我们必须将其添加到映像中已部署包的列表中。还添加了一些其他东西以使生成的图像更可用,SSH 服务器和 connman 网络管理器添加了一些网络功能。

默认情况下,映像会构建根文件系统以及引导加载程序和内核的二进制文件。一些 BSP 提供了额外的逻辑来简化对目标硬件的部署。例如,基于飞思卡尔的 SoC 的 meta-fsl-arm BSP 构建了一个 SD 卡映像文件,目标可以从该文件直接启动。使用 Toradex BSP,您可以构建一个 tarball,其中包含将镜像部署到模块上的所有工具和数据。

meta-fsl-arm 部署助手通过 classes/image_types_fsl.bbclass 实现,并包含在机器配置文件中。无需在映像中执行任何操作即可使该功能到位。

为了使用 Toradex BSP 的部署功能,镜像配方必须定义变量 IMAGE_NAME 并包含 recipes/images/trdx-image-fstype.inc:

meta-product》 cat recipes-core/images/product-image.bb:

SUMMARY = ”A console-image for our fb-test product.“

IMAGE_FEATURES += ”ssh-server-openssh“

IMAGE_INSTALL += ”fb-draw“

IMAGE_INSTALL += ”connman connman-systemd connman-plugin-loopback connman-plugin-ethernet

LICENSE = ”MIT“

#create the deployment directory-tree

PV = ”V1.0“

IMAGE_NAME = ”${MACHINE}_product“

require recipes/images/trdx-image-fstype.inc

inherit core-image

调整 U-Boot 和 Linux 内核

当我们直接在应用程序中使用帧缓冲区时,我们需要从内核配置中删除帧缓冲区控制台,否则内核将继续在屏幕区域显示光标。

(或者只定义 vt.global_cursor_default=0 内核启动参数,参见http://developer.toradex.com/knowledge-base/splash-screen-linux)

此外,为了练习,我们将更改 U-Boot 环境以删除内核控制台输出到帧缓冲区控制台以及更改显示分辨率。

可以通过提供与配方具有相同基本名称但扩展名为 bbappend 的文件来更改配方。原始文件的内容将附加在 bbappend 文件中的内容。通过这种机制,我们可以注入一个用于更改内核和 U-Boot 源的补丁文件:

meta-product》 cat recipes-kernel/linux/linux-toradex_git.bbappend

FILESEXTRAPATHS_prepend := ”${THISDIR}/${PN}:“

SRC_URI += ”file://defconfig-product.patch“

meta-product》 cat recipes-kernel/linux/linux-toradex/defconfig-product.patch

diff --git a/arch/arm/configs/colibri_t30_defconfig b/arch/arm/configs/colibri_t30_defconfig

index 050351d..e1ef222 100644

--- a/arch/arm/configs/colibri_t30_defconfig

+++ b/arch/arm/configs/colibri_t30_defconfig

@@ -253,7 +253,6 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y

# CONFIG_BACKLIGHT_GENERIC is not set

CONFIG_BACKLIGHT_PWM=y

CONFIG_BACKLIGHT_TEGRA_PWM=y

-CONFIG_FRAMEBUFFER_CONSOLE=y

CONFIG_LOGO=y

CONFIG_SOUND=y

CONFIG_SND=y

meta-product》 cat recipes-bsp/u-boot/u-boot-toradex_git.bbappend

FILESEXTRAPATHS_prepend := ”${THISDIR}/${PN}:“

SRC_URI_T30 += ”file://u-boot-product.patch“

meta-product》 cat recipes-bsp/u-boot/u-boot-toradex/u-boot-product.patch

diff --git a/include/configs/colibri_t30.h b/include/configs/colibri_t30.h

index ffcf88f..b5d889e 100644

--- a/include/configs/colibri_t30.h

+++ b/include/configs/colibri_t30.h

@@ -185,12 +185,12 @@

NFS_BOOTCMD \

SD_BOOTCMD \

”setup=setenv setupargs asix_mac=${ethaddr} “ \

- ”consoleblank=0 no_console_suspend=1 console=tty1 “ \

+ ”consoleblank=0 no_console_suspend=1 “ \

”console=${console},${baudrate}n8 debug_uartport=lsport,0 “ \

”${memargs}\0“ \

”setupdate=load mmc 1:1 ${kernel_addr_r} flash_mmc.img “ \

”&& source ${kernel_addr_r}\0“ \

USB_BOOTCMD \

- ”vidargs=video=tegrafb0:640x480-16@60\0“

+ ”vidargs=video=tegrafb0:800x600-16@60\0“

#endif /* __CONFIG_H */

现在我们准备好构建我们的图像:

oe-core》 。 export

build》 bitbake product-image

该图像可以在 build/out-eglibc/deploy/images/colibri-t30/colibri-t30_productV1.0_20141128.tar.bz2 中找到。

下一步

只需稍加努力,我们就可以利用供应商提供的 Yocto/OpenEmbedded 元数据来创建定制的 Linux 映像,其中包含部署产品软件所需的所有组件。

该过程确保使用定义良好的第三方版本以及我们自己的组件自动创建我们的图像,并简化了通过部署清单手动将图像从几个不同来源抓取的点点滴滴组合在一起的容易出错的过程。

更进一步,可以将元产品层合并到初始的 Yocto/OpenEmbedded 设置过程中,例如在我们的案例中将其添加到 repo 清单中。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5186

    文章

    20156

    浏览量

    328977
  • 源代码
    +关注

    关注

    96

    文章

    2953

    浏览量

    69667
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32嵌入式软件开发的必备知识

    设计的原则和方法,能够设计出高效、可维护的软件系统。 了解嵌入式系统的实时性要求,能够设计出满足实时性要求的软件系统。 8、 测试与验证 掌握单元测试、集成测试和系统测试的方法和技术,能够对
    发表于 11-28 07:48

    嵌入式软件测试与专业测试工具的必要性深度解析

    嵌入式系统作为控制、监视或辅助装置运行的专用计算机系统,其软件测试面临着独特的挑战和严格的要求。专业测试工具在嵌入式软件开发过程中发挥着不可替代的作用,是确保系统可靠性和安全性的关键保
    发表于 09-28 17:42

    RT-Thread 2025嵌入式软件大赛重磅来袭

    为激发开发者潜能、促进技术交流,RT-Thread 正式启动2025年度嵌入式软件大赛! 本赛道为嵌入式软件大赛,聚焦嵌入式
    的头像 发表于 09-22 16:40 3261次阅读
    RT-Thread 2025<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>大赛重磅来袭

    RT-Thread 2025嵌入式软件大赛重磅来袭

    为激发开发者潜能、促进技术交流,RT-Thread正式启动2025年度嵌入式软件大赛!本赛道为嵌入式软件大赛,聚焦嵌入式
    的头像 发表于 09-20 10:06 1296次阅读
    RT-Thread 2025<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>大赛重磅来袭

    新一代嵌入式开发平台 AMD嵌入式软件和工具2025.1版现已推出

    AMD 2025.1 版嵌入式软件和工具是面向新一代嵌入式系统开发而打造的综合平台,全面加速概念构想到部署落地。 2025.1 版嵌入式
    的头像 发表于 08-20 09:15 3637次阅读

    AMD 2025.1版嵌入式软件和工具的新增功能

    AMD 2025.1 版嵌入式软件和工具是面向新一代嵌入式系统开发而打造的综合平台,全面加速概念构想到部署落地。
    的头像 发表于 08-15 15:32 1042次阅读

    【「Yocto项目实战教程:高效定制嵌入式Linux系统」阅读体验】+基础概念学习理解

    软件包的依赖关系、编译选项、配置参数等。掌握元数据的使用方法对于定制和优化嵌入式 Linux 系统至关重要。 BitBake BitBake 是 Yocto 项目的构建工具。通过学习这部分内容,我深入
    发表于 08-04 22:29

    【新书速递】Yocto项目实战教程:高效定制嵌入式Linux系统

    论坛>>社区活动专版标题名称必须包含【「Yocto项目实战教程:高效定制嵌入式Linux系统」阅读体验】+自拟标题立即扫码参与活动注意事项
    的头像 发表于 05-27 08:05 1450次阅读
    【新书速递】<b class='flag-5'>Yocto</b>项目实战教程:高效定制<b class='flag-5'>嵌入式</b>Linux系统

    飞凌嵌入式ElfBoard ELF 1板卡-Uboot

    上节中讲到U-Boot是BootLoader的一种,U-Boot全称为Universal Boot Loader,即通用的BootLoader,所谓通用就是指它适用于多种嵌入式平台,包括不同CPU
    发表于 05-22 10:44

    【书籍评测活动NO.61】Yocto项目实战教程:高效定制嵌入式Linux系统

    扩展、自动化的构建工具集 。它采用模块化架构、分层构建体系和软件栈管理机制,使开发者能够高效定制、优化和维护嵌入式 Linux 系统,可提高开发效率并降低适配成本。 Yocto 项目已成为定制
    发表于 05-21 10:00

    嵌入式软件行业增长驱动因素

    嵌入式软件在物联网应用中至关重要,因为它管理设备操作、控制传感器、支持连接并确保数据安全。例如,在智能家居中,恒温器、安全摄像头和灯光等设备使用嵌入式系统独立运行,并通过云平台或本地网络与其他智能
    的头像 发表于 05-09 11:26 669次阅读

    嵌入式软件单元测试的必要性、核心方法及工具深度解析

    一、为什么嵌入式软件必须重视单元测试? ‌嵌入式系统的特殊性‌ 在汽车 ECU、医疗设备控制器等场景中,软件直接操控硬件,‌单比特错误可能导致刹车失灵或呼吸机故障‌。不同于 PC 
    的头像 发表于 03-21 14:53 975次阅读

    嵌入式机器学习的应用特性与软件开发环境

    作者:DigiKey Editor 在许多嵌入式系统中,必须采用嵌入式机器学习(Embedded Machine Learning)技术,这是指将机器学习模型部署在资源受限的设备(如微控制器、物联网
    的头像 发表于 01-25 17:05 1220次阅读
    <b class='flag-5'>嵌入式</b>机器学习的应用特性与<b class='flag-5'>软件</b>开发环境

    如何提高嵌入式代码质量?

    的错误和改进点,提高代码的可读性和健壮性。 4. 版本控制:使用版本控制系统如Git,可以追踪代码变更并轻松进行团队协作,确保每个版本都是可控和可重现的。 优化性能和资源利用率 在嵌入式系统中
    发表于 01-15 10:48

    如何使用 RISC-V 进行嵌入式开发

    RISC-V是一种开源的指令集架构(ISA),它允许任何人设计、制造和销售基于RISC-V的处理器,这为嵌入式开发提供了极大的灵活性和创新空间。以下是使用RISC-V进行嵌入式开发的基本步骤: 一
    的头像 发表于 12-11 17:32 2754次阅读