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

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

3天内不再提示

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

星星科技指导员 来源:嵌入式计算设计 作者:Max Krummenacher 2022-08-12 10:39 次阅读

开发应用程序并将其存储在设备的 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 清单中。

审核编辑:郭婷

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

    关注

    38

    文章

    4122

    浏览量

    217955
  • Linux
    +关注

    关注

    87

    文章

    11232

    浏览量

    208940
  • 服务器
    +关注

    关注

    12

    文章

    9028

    浏览量

    85196
收藏 人收藏

    评论

    相关推荐

    什么是嵌入式?一文读懂嵌入式主板

    在现代科技浪潮中,嵌入式技术已成为支撑各种智能设备和系统运行的核心力量。那么,究竟什么是嵌入式嵌入式系统,顾名思义,是将计算机的硬件和软件嵌入
    的头像 发表于 10-16 10:14 512次阅读

    嵌入式系统是什么?

    嵌入式系统是是一个功能完备、几乎不依赖其他外部装置就可以独立运行的系统。该系统包含软件和硬件,以应用为中心,以计算机为基础,能够根据需求灵活选取软硬件模块的专业计算机系统。 其中系统的软件部
    的头像 发表于 08-29 16:26 326次阅读

    嵌入式软件开发与AI整合

    嵌入式软件开发与AI整合是当前技术发展的重要趋势之一。随着人工智能技术的快速发展,嵌入式系统越来越多地集成了AI算法,以实现更复杂的智能功能。以下是关于嵌入式
    的头像 发表于 07-31 09:25 663次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>开发与AI整合

    深度学习算法在嵌入式平台上的部署

    随着人工智能技术的飞速发展,深度学习算法在各个领域的应用日益广泛。然而,将深度学习算法部署到资源受限的嵌入式平台上,仍然是一个具有挑战性的任务。本文将从嵌入式平台的特点、深度学习算法的优化、
    的头像 发表于 07-15 10:03 1194次阅读

    嵌入式软件工程师和硬件工程师的区别?

    、调试和测试嵌入式软件,以确保其功能正常,性能优良。 * 文档编写:包括编写用户手册、维护文档等。 * 维护和更新:对现有的嵌入式软件进行
    发表于 05-16 11:00

    米尔瑞米派Remi Pi Ubuntu系统移植指南

    1.概述Linux系统平台上有许多开源的系统构建框架,这些框架方便了开发者进行嵌入式系统的构建和定制化开发,目前比较常见的有Buildroot,Yocto,OpenEmbedded等等
    的头像 发表于 04-29 08:01 870次阅读
    米尔瑞米派Remi Pi Ubuntu系统移植指南

    嵌入式软件设计的原则分享

    嵌入式软件开发如果具有更好的阅读性、扩展性以及维护性,就需要考虑很多因素。今天给大家分享几个嵌入式软件设计的原则。
    发表于 02-25 10:54 658次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>设计的原则分享

    嵌入式软件开发应该掌握哪些知识?

    知识点学习 熟悉 Linux 的基本使用对于嵌入式软件开发至关重要。包括文件系统的管理、用户权限的控制、软件包管理等。嵌入式开发人员需要能够在 Linux 环境下
    发表于 02-19 11:23

    嵌入式学习步骤

    硬件组件。 (4).开发固件:编写嵌入式系统的固件,这是嵌入式系统的软件部分。固件负责控制硬件并执行特定任务。 (5).调试和测试:在将嵌入式系统
    发表于 02-02 15:24

    汽车嵌入式软件的技能要求

    如果你希望开始在汽车嵌入式软件领域的职业生涯,必须掌握符合行业需求的全面技能。下面是一个路线图,列出了需要学习的关键技术和技能。
    的头像 发表于 01-23 11:09 1595次阅读
    汽车<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>的技能要求

    嵌入式软件开发和软件开发的区别

    嵌入式软件开发和软件开发是两个不同的概念,它们在一些关键方面有着明显的区别。嵌入式软件开发是指开发嵌入
    的头像 发表于 01-22 15:27 2188次阅读

    基于功能安全的汽车嵌入式软件单元验证技术研究

    ,对满足功能安全ASIL等级的汽车嵌入式软件单元验证技术进行详细介绍,从而提高软件质量,减少软件安全隐患,对汽车
    的头像 发表于 01-07 11:27 1012次阅读
    基于功能安全的汽车<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>单元验证技术研究

    聊聊嵌入式软件分层

    今天以控制LED闪烁为例,聊聊嵌入式软件分层
    的头像 发表于 12-28 09:22 637次阅读

    嵌入式软件问题的分析与解决

    软件问题的分析与解决 嵌入式软件由于调试手段的限制、部署场景的多样化、软硬件问题混合在一起、外部环境因素的影响等因素,导致软件经常会遇到一些
    的头像 发表于 12-07 15:56 698次阅读

    嵌入式硬件和软件哪个好?

    嵌入式硬件和软件哪个好? 嵌入式软硬件工程师哪个更有前途呢?一起来看看。 嵌入式是分为软硬件工程师的,首先我们先来看看嵌入式硬件工程师吧!
    发表于 12-05 15:17