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

    文章

    3709

    浏览量

    215383
  • Linux
    +关注

    关注

    87

    文章

    10943

    浏览量

    206545
  • 服务器
    +关注

    关注

    12

    文章

    8017

    浏览量

    82212
收藏 人收藏

    评论

    相关推荐

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

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

    嵌入式学习步骤

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

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

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

    嵌入式软件开发常用工具有哪些?

    分享一些嵌入式软件开发常用工具。 1、Keil MDK:这是德国Keil公司开发的基于8051、9051、ARM7、ARM9系列微控制器的嵌入式软件开发工具,它提供了包括C编译器、
    发表于 11-10 11:03

    嵌入式软件设计和单片机软件设计的区别是什么?

    嵌入式软件设计和单片机软件设计目前的应用很多,这两者有什么区别? 嵌入式主要说的什么?结构是啥!
    发表于 11-10 07:46

    嵌入式软件与生态系统:为嵌入式开发者提供必要的组件

    Xilinx 提供两款工具来构建和部署嵌入式 Linux 解决方案。这些工具有 Xilinx 的 PetaLinux 和 Yocto 的开源项目。PetaLinux 为用户提供一个 GUI 来快速
    的头像 发表于 10-31 16:59 300次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>与生态系统:为<b class='flag-5'>嵌入式</b>开发者提供必要的组件

    什么是嵌入式Linux?

    Linux到底是什么呢? 嵌入式linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。简单来说,是除了电脑之外可以运行程序的设备,将CPU嵌入
    发表于 10-11 13:47

    从事嵌入式工作有哪些优势?

    随着物联网和人工智能的发展,嵌入式技术越来越值钱,学嵌入式的人也越来越多,现在开始入行嵌入式。根据一些权威部门统计,我国目前嵌入式软件人才缺
    发表于 10-08 15:05

    嵌入式软件好还是硬件好?

    架构,有一定的C语言基础,熟悉ARM、PROTEL设计软件,有四层板开发经验。 成为优秀的嵌入式硬件开发工程师需具备以下技能:由需求分析至总体方案、详细设计的规划能力;熟练运用设计工具、设计原理图
    发表于 09-18 15:31

    如何对嵌入式设备进行漏洞利用

    过去的几个月我一直在周游以指导人们如何对嵌入式设备进行漏洞利用,单单幻灯片已经不足以承载足够的信息,所以我将所有的都写下来以便与知识的消化。接下来的内容是 第一部分,介绍了一些嵌入式
    发表于 09-06 11:22 257次阅读
    如何对<b class='flag-5'>嵌入式</b>设备<b class='flag-5'>进行</b>漏洞<b class='flag-5'>利用</b>

    107使用ADS v1.2进行嵌入式软件开发

    当开始为嵌入式应用程序开发软件时,ADS的用户可能不知道他们的目标硬件的技术规格。目标外围设备、内存映射甚至处理器本身的细节可能是未知或未确定的。 为了在知道或考虑此类细节之前进行软件
    发表于 08-30 06:27

    如何在SystemReady IR兼容上部署Yocto硬件

    的补充。 Yocto项目(YP)是一个行业标准的开发工具,用于构建基于Linux的软件堆栈于嵌入式设备。YP提供了创建自定义解决方案的灵活性,但是大多数YP构建需要自定义工程才能在特定的硬件平台上运行
    发表于 08-02 07:45

    如何使用TensorFlow将神经网络模型部署到移动或嵌入式设备上

    有很多方法可以将经过训练的神经网络模型部署到移动或嵌入式设备上。不同的框架在各种平台上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如Android
    发表于 08-02 06:43

    【米尔MYD-JX8MMA7开发板-ARM+FPGA架构试用体验】 七、Yocto介绍资料整理

    的仿真. Yocto项目可以为多种设备生成映像. 通过Yocto项目开发出来的映像可以在一个QEMU模拟器中进行引导,开发环境可以作为一个开发嵌入式
    发表于 05-23 09:07

    成功开发嵌入式软件的技巧有哪些?

    嘿大家,我想开始讨论嵌入式软件开发并分享一些对我的工作有帮助的技巧。首先,清楚了解项目的要求和限制很重要。这包括诸如处理能力、内存和输入/输出能力之类的东西。此信息将有助于指导您的设计决策并确保软件
    发表于 03-31 08:28