开发应用程序并将其存储在设备的 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 清单中。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !