開發(fā)應(yīng)用程序并將其存儲(chǔ)在設(shè)備的 ROM 上不再是當(dāng)前嵌入式設(shè)備上的簡(jiǎn)單部署過程。
一旦你的應(yīng)用程序?yàn)橄乱粋€(gè)測(cè)試/發(fā)布周期做好了準(zhǔn)備,你仍然需要將它與你的操作系統(tǒng)重新集成,調(diào)整配置文件,啟用你的東西的自動(dòng)啟動(dòng),等等,并將它打包成一個(gè)允許更新的表單設(shè)備。
本文概述了如何在 Yocto/OpenEmbedded 的幫助下為基于嵌入式 Linux 的設(shè)備自動(dòng)化這種集成,從而使該過程更不容易出錯(cuò)、更可重復(fù),并使用您使用的每個(gè)組件的定義明確的版本。
您的硬件供應(yīng)商很有可能已經(jīng)將 Yocto/OpenEmbedded 用于其 Linux BSP。無需按原樣使用該通用 BSP,只需將您的應(yīng)用程序集成到 Yocto/OpenEmbedded 構(gòu)建過程中,并完全自動(dòng)構(gòu)建您完成的可交付成果。
Yocto/OpenEmbedded
Yocto和OpenEmbedded共同構(gòu)成了一個(gè)構(gòu)建框架,它可以從源代碼創(chuàng)建內(nèi)核映像、根文件系統(tǒng)映像和可安裝包。
該框架使用元信息(稱為配方)在目標(biāo)設(shè)備的 x86/x86_64 Linux 構(gòu)建主機(jī)上下載/編譯/部署軟件包。
食譜被分成幾層。層聚合用于分發(fā)的配方、不同 CPU/SBC/模塊供應(yīng)商的 BSP 功能、基礎(chǔ)系統(tǒng)、特定領(lǐng)域的軟件等。許多可用的層和配方可以通過這個(gè)網(wǎng)絡(luò)界面找到。
要充分利用本文,需要對(duì) Yocto/OpenEmbedded 有基本的了解。該項(xiàng)目帶有出色的文檔,請(qǐng)參閱上面的鏈接或直接進(jìn)入手冊(cè)。
最重要的是,我可以推薦Otavio Salvador 和 Daiana Anolini 的書來幫助你快速入門。
設(shè)置 Yocto/Openembedded
在本文中,我們將使用Toradex Colibri T30 計(jì)算機(jī)模塊。按照設(shè)置說明進(jìn)行操作。
查找并執(zhí)行 SoC 或模塊供應(yīng)商提供的說明以進(jìn)行初始設(shè)置。
然后通過構(gòu)建已經(jīng)提供的目標(biāo)之一來測(cè)試您的安裝,以確保在我們開始擺弄之前安裝工作正常。
為了節(jié)省一些時(shí)間,構(gòu)建一個(gè)簡(jiǎn)單的圖像。不要忘記,在進(jìn)行任何 bitbake 操作之前,您必須獲取一個(gè)腳本來設(shè)置環(huán)境。在我們的例子中:
oe-core》 。 export
build》 bitbake -k core-image-base
構(gòu)建將需要一些時(shí)間,然后您希望收到一條最終消息:“注意:任務(wù)摘要:嘗試了 1806 個(gè)任務(wù),其中 23 個(gè)不需要重新運(yùn)行并且全部成功。”
現(xiàn)在我們準(zhǔn)備好為我們的產(chǎn)品需求定制構(gòu)建。
創(chuàng)建包含應(yīng)用程序和圖像配方的層
這在此處進(jìn)行了詳細(xì)解釋。請(qǐng)注意,下面描述的層也可以在這里下載。
我們?cè)?stuff/ 中添加一個(gè)新層,它將保存我們應(yīng)用程序的配方和對(duì)圖像配方的修改。讓我們調(diào)用新層元產(chǎn)品:
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“
修改圖像
現(xiàn)在我們有了構(gòu)建應(yīng)用程序的配方,我們必須將其添加到映像中已部署包的列表中。還添加了一些其他東西以使生成的圖像更可用,SSH 服務(wù)器和 connman 網(wǎng)絡(luò)管理器添加了一些網(wǎng)絡(luò)功能。
默認(rèn)情況下,映像會(huì)構(gòu)建根文件系統(tǒng)以及引導(dǎo)加載程序和內(nèi)核的二進(jìn)制文件。一些 BSP 提供了額外的邏輯來簡(jiǎn)化對(duì)目標(biāo)硬件的部署。例如,基于飛思卡爾的 SoC 的 meta-fsl-arm BSP 構(gòu)建了一個(gè) SD 卡映像文件,目標(biāo)可以從該文件直接啟動(dòng)。使用 Toradex BSP,您可以構(gòu)建一個(gè) tarball,其中包含將鏡像部署到模塊上的所有工具和數(shù)據(jù)。
meta-fsl-arm 部署助手通過 classes/image_types_fsl.bbclass 實(shí)現(xiàn),并包含在機(jī)器配置文件中。無需在映像中執(zhí)行任何操作即可使該功能到位。
為了使用 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
調(diào)整 U-Boot 和 Linux 內(nèi)核
當(dāng)我們直接在應(yīng)用程序中使用幀緩沖區(qū)時(shí),我們需要從內(nèi)核配置中刪除幀緩沖區(qū)控制臺(tái),否則內(nèi)核將繼續(xù)在屏幕區(qū)域顯示光標(biāo)。
(或者只定義 vt.global_cursor_default=0 內(nèi)核啟動(dòng)參數(shù),參見http://developer.toradex.com/knowledge-base/splash-screen-linux)
此外,為了練習(xí),我們將更改 U-Boot 環(huán)境以刪除內(nèi)核控制臺(tái)輸出到幀緩沖區(qū)控制臺(tái)以及更改顯示分辨率。
可以通過提供與配方具有相同基本名稱但擴(kuò)展名為 bbappend 的文件來更改配方。原始文件的內(nèi)容將附加在 bbappend 文件中的內(nèi)容。通過這種機(jī)制,我們可以注入一個(gè)用于更改內(nèi)核和 U-Boot 源的補(bǔ)丁文件:
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 */
現(xiàn)在我們準(zhǔn)備好構(gòu)建我們的圖像:
oe-core》 。 export
build》 bitbake product-image
該圖像可以在 build/out-eglibc/deploy/images/colibri-t30/colibri-t30_productV1.0_20141128.tar.bz2 中找到。
下一步
只需稍加努力,我們就可以利用供應(yīng)商提供的 Yocto/OpenEmbedded 元數(shù)據(jù)來創(chuàng)建定制的 Linux 映像,其中包含部署產(chǎn)品軟件所需的所有組件。
該過程確保使用明確定義的第三方版本以及我們自己的組件自動(dòng)創(chuàng)建我們的圖像,并簡(jiǎn)化了通過部署清單手動(dòng)將圖像從幾個(gè)不同來源抓取的點(diǎn)點(diǎn)滴滴組合在一起的容易出錯(cuò)的過程。
更進(jìn)一步,可以將元產(chǎn)品層合并到初始的 Yocto/OpenEmbedded 設(shè)置過程中,例如在我們的案例中將其添加到 repo 清單中。
審核編輯:郭婷
-
soc
+關(guān)注
關(guān)注
38文章
4192瀏覽量
218668 -
Linux
+關(guān)注
關(guān)注
87文章
11331瀏覽量
210013 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9265瀏覽量
85790
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論