Yocto項目實戰教程-第7章定制鏡像菜譜與內核菜譜-7.2小節-定制應用程序

🔍

B站相應的視頻教程
📌 Yocto項目實戰教程-第7章-定制鏡像菜譜與內核菜譜
記得三連,標為原始粉絲,感謝大神支持。


在這里插入圖片描述


在嵌入式Linux系統開發中,定制專屬應用程序往往是最貼近產品交付的那一環。而Yocto項目,作為構建嵌入式系統的強大工具,其靈活的菜譜機制為我們集成和部署定制應用提供了完美的方案。

本文將圍繞一個實際項目——“智能傳感器網關”系統,全面講解如何在Yocto中完成自定義應用的集成、構建與部署。內容涵蓋從源代碼組織、菜譜編寫、依賴管理到最終鏡像生成的全過程,幫助你快速掌握Yocto應用集成的關鍵技術。


一、項目背景:智能傳感器網關

本次實踐項目是一個用于邊緣計算的“智能傳感器網關”,功能包括:

  • 讀取多個傳感器數據(如溫濕度、PM2.5)
  • 本地實時展示數據(基于Qt GUI)
  • 周期性上傳數據到云平臺(HTTP + JSON)
  • 遠程升級機制(預留)

該應用分為兩部分:

  1. 后臺服務(sensor-agent):C++編寫,周期讀取傳感器數據并寫入本地數據庫
  2. 前端界面(sensor-ui):使用Qt 5編寫,實時展示當前環境狀態

我們希望將這兩部分完整集成進Yocto系統中,構建成一個獨立鏡像運行于目標設備(例如 NXP i.MX8MP EVK)上。


二、準備階段:代碼組織與目錄布局

在正式創建菜譜前,我們需要規范整理源代碼,方便Yocto集成。

sensor-gateway/
├── sensor-agent/
│   ├── src/
│   ├── include/
│   ├── CMakeLists.txt
│   └── ...
├── sensor-ui/
│   ├── ui/
│   ├── qml/
│   ├── main.cpp
│   ├── CMakeLists.txt
│   └── ...
├── README.md
└── LICENSE

小貼士:建議每個子模塊都能獨立編譯,具備自身的CMake或Makefile。


三、編寫應用菜譜(Recipes)

我們創建一個新的元數據層(layer)meta-sensor用于管理應用相關內容。

1. 創建meta層

yocto$ cd poky
yocto/poky$ yocto-layer create meta-sensor

sensor-gateway 源碼復制進 meta-sensor/recipes-sensor/files/

meta-sensor/
└── recipes-sensor/├── sensor-agent/│   ├── sensor-agent.bb│   └── files/│       └── sensor-agent/  ← 源碼目錄└── sensor-ui/├── sensor-ui.bb└── files/└── sensor-ui/     ← 源碼目錄

四、sensor-agent.bb 說明(后臺服務)

SUMMARY = "Sensor Data Agent"
DESCRIPTION = "Collects data from sensors and writes to local database"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=xxxxxxxxxxxx"SRC_URI = "file://sensor-agent"S = "${WORKDIR}/sensor-agent"inherit cmakeDEPENDS += "sqlite3"do_install() {install -d ${D}${bindir}install -m 0755 sensor-agent ${D}${bindir}/
}

關鍵點說明:

  • inherit cmake:使用CMake進行構建
  • SRC_URI:引用本地文件夾
  • DEPENDS:聲明依賴(如 sqlite3
  • do_install():定義安裝路徑

五、sensor-ui.bb 說明(圖形界面)

SUMMARY = "Qt-based Sensor Display UI"
DESCRIPTION = "Qt GUI for live sensor data monitoring"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=xxxxxxxxxxxx"SRC_URI = "file://sensor-ui"S = "${WORKDIR}/sensor-ui"inherit cmake qt5DEPENDS += "qtbase qtdeclarative qtquickcontrols2"do_install() {install -d ${D}${bindir}install -m 0755 sensor-ui ${D}${bindir}/
}

特別說明:

  • inherit qt5 啟用Qt 5支持
  • 依賴項中包含qtdeclarativeqtquickcontrols2等模塊
  • UI層建議打包為 .bbappend 的形式以支持升級或替換

六、添加到鏡像中

要使我們的應用被包含進系統鏡像中,需要將其加入鏡像菜譜(image recipe):

IMAGE_INSTALL:append = " sensor-agent sensor-ui"

可以在自定義鏡像文件中添加,例如:

meta-sensor/recipes-core/images/sensor-gateway-image.bb

內容如下:

DESCRIPTION = "Sensor Gateway Image"
LICENSE = "MIT"inherit core-imageIMAGE_INSTALL += " sensor-agent sensor-ui"

構建鏡像:

bitbake sensor-gateway-image

七、應用部署測試

鏡像構建完成后,將其燒錄到SD卡或EMMC,啟動系統后可以通過以下方式確認應用是否運行:

# 查看sensor-agent是否在運行
ps -ef | grep sensor-agent# 啟動GUI(若未設置自啟動)
/usr/bin/sensor-ui

建議在實際項目中,配置systemd服務以實現后臺服務和圖形界面的自啟動:

# sensor-agent.service
[Unit]
Description=Sensor Agent Service
After=network.target[Service]
ExecStart=/usr/bin/sensor-agent
Restart=always[Install]
WantedBy=multi-user.target

將此服務文件放入:

meta-sensor/recipes-sensor/sensor-agent/files/sensor-agent.service

并在 .bb 文件中添加:

SYSTEMD_SERVICE:${PN} = "sensor-agent.service"
inherit systemd

八、常見問題與建議

問題描述原因分析建議解決
編譯失敗提示找不到Qt模塊沒有聲明 DEPENDS.bb 中添加完整Qt模塊依賴
程序安裝后無執行權限安裝時權限設置錯誤確保 install -m 0755
應用未包含在鏡像中IMAGE_INSTALL 未配置檢查鏡像菜譜是否已添加應用名
systemd未啟動程序service未install添加 WantedBy=multi-user.target 并啟用服務

九、總結與回顧

本文圍繞“智能傳感器網關”項目,從源代碼組織到Yocto集成的全過程,系統講解了定制應用的完整流程:

  • 如何創建新layer與recipe
  • 如何組織源碼并適配bitbake規則
  • 如何處理依賴與部署路徑
  • 如何通過systemd服務實現應用啟動

Yocto的強大之處在于其模塊化、可重用的構建系統。理解菜譜機制和構建流程,是掌握Yocto的關鍵第一步。希望這篇博文為你在實際項目中部署定制應用提供有力指導。

🔍

B站相應的視頻教程
📌 Yocto項目實戰教程-第7章-定制鏡像菜譜與內核菜譜
記得三連,標為原始粉絲,感謝大神支持。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902394.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902394.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902394.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【圖像輪廓特征查找】圖像處理(OpenCV) -part8

17 圖像輪廓特征查找 圖像輪廓特征查找其實就是他的外接輪廓。 應用: 圖像分割 形狀分析 物體檢測與識別 根據輪廓點進行,所以要先找到輪廓。 先灰度化、二值化。目標物體白色,非目標物體黑色,選擇合適的兒值化方式。 有了輪…

C# 的 字符串插值($) 和 逐字字符串(@) 功能

這段代碼使用了 C# 的 字符串插值($) 和 逐字字符串() 功能,并在 SQL 語句中動態拼接變量。下面詳細解釋它們的用法: 1. $(字符串插值) $ 是 C# 的 字符串插值 符號,允許…

mockMvc構建web單元測試學習筆記

web應用本來需要依靠tomcat這個環境運行 現在用mockMvc是為了模擬這個web環境,簡化測試 什么是mock(模擬) 模擬對象---mock object是以可控方式模擬真實對象行為的假對象,通過模擬輸入數據,驗證程序達到預期結果 為什么使用mock對象 因為…

6.7.圖的深度優先遍歷(英文縮寫DFS)

樹是特殊的圖,沒有回路的圖就是樹 BFS與DFS的區別在于,BFS使用了隊列,DFS使用了棧 一.深度優先遍歷: 1.樹的深度優先遍歷: 樹的深度優先遍歷分為先根遍歷和后根遍歷。 以樹的先根遍歷為例: 上述圖片里…

VOS3000內存滿了怎么刪除,錄音格式如何轉換呢

一、清理VOS3000內存(刪除舊錄音文件) 定位錄音存儲目錄 通常錄音文件存儲在以下路徑(以實際配置為準): bash 復制 下載 /usr/local/vos/record # 默認錄音目錄 /var/log/vos/logs # 系統日志目錄(…

【圖問答】DeepSeek-VL 論文閱讀筆記

《DeepSeek-VL: Towards Real-World Vision-Language Understanding》 1. 摘要/引言 基于圖片問答(Visual Question Answering,VQA)的任務 2. 模型結構 和 三段式訓練 1)使用 SigLIP 和 SAM 作為混合的vision encoder&#xf…

MATLAB - 模型預測控制(MPC)使用 ADMM 求解器四分之一汽車懸架懸掛系統動力學控制

系列文章目錄 目錄 系列文章目錄 前言 一、四分車懸架模型 二、道路干擾剖面 三、設計模型預測控制器 四、設置優化求解器 五、輔助函數 前言 本例展示了如何為四分之一汽車懸架系統設計模型預測控制器 (MPC),采用乘法交替方向法 (ADMM) 求解器來控制主動懸架…

基于多模態融合算法的航空武器毀傷評估技術方案

基于多模態融合算法的航空武器毀傷評估技術方案 1. 引言 航空武器毀傷評估(Damage Assessment, DA)是現代戰爭中的關鍵環節,直接影響后續作戰決策。傳統的人工評估方式效率低、主觀性強,且在高強度戰場環境下難以實時完成。因此,本研究提出一種基于多模態融合算法的自動…

LeetCode算法題(Go語言實現)_49

題目 給定整數數組 nums 和整數 k,請返回數組中第 k 個最大的元素。 請注意,你需要找的是數組排序后的第 k 個最大的元素,而不是第 k 個不同的元素。 你必須設計并實現時間復雜度為 O(n) 的算法解決此問題。 一、代碼實現(快速選擇…

【HCIA】簡易的兩個VLAN分別使用DHCP分配IP

前言 之前我們通過 靜態ip地址實現了Vlan間通信 ,現在我們添加一個常用的DHCP功能。 文章目錄 前言1. 配置交換機2. 接口模式3. 全局模式后記修改記錄 1. 配置交換機 首先,使用DHCP,需要先啟動DHCP服務: [Huawei]dhcp enable I…

【技術派后端篇】技術派通用敏感詞替換:原理、實現與應用

在當今互聯網環境下,數據脫敏對于國內的互聯網企業而言已經成為一項標配。這不僅是為了滿足合規性要求,更是保障用戶信息安全和企業聲譽的重要舉措。本文將深入探討技術派中實現數據脫敏的關鍵技術——通用敏感詞替換,從算法原理到具體實現&a…

Android RK356X TVSettings USB調試開關

Android RK356X TVSettings USB調試開關 平臺概述操作-打開USB調試實現源碼補充說明 平臺 RK3568 Android 11 概述 RK3568 是瑞芯微(Rockchip)推出的一款高性能處理器,支持 USB OTG(On-The-Go)和 USB Host 功能。US…

Microsoft Edge for linux debian

下載地址 https://www.microsoft.com/en-us/edge/download?formMA13FJ 安裝 # 下載安裝包 wget https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_135.0.3179.85-1_amd64.deb?brandM102 # 安裝 sudo dpkg -i microsoft…

typedef MVS_API CLISTDEF0IDX(ViewScore, IIndex) ViewScoreArr;

查找 MVS_API 定義 我們沒有在 List.h 文件中找到 MVS_API 的定義。MVS_API 很可能在 MVS 庫的其他地方定義。一般來說,MVS_API 是控制 OpenMVS 庫導入導出的宏,通常會出現在 MVS 的頭文件中。為了回答這個問題,我可以提供 MVS 代碼中常見的…

5.4/Q1,GBD數據庫最新文章解讀

文章題目:The global burden of high BMI among adolescents between 1990 and 2021 DOI:10.1038/s43856-025-00838-2 中文標題:1990 年至 2021 年青少年高 BMI 的全球負擔 發表雜志:Commun Med 影響因子:1區&#xff…

【形式化驗證基礎】活躍屬性Liveness Property和安全性質(Safety Property)介紹

文章目錄 一、Liveness Property1、概念介紹2、形式化定義二、Safety Property1. 定義回顧2. 核心概念解析3. 為什么強調“有限前綴”4. 示例說明4.1 示例1:交通信號燈系統4.2 示例2:銀行賬戶管理系統5. 實際應用的意義三. 總結一、Liveness Property 1、概念介紹 在系統的…

Redis面試——常用命令

一、String (1)設置值相關命令 1.1.1 SET 功能:設置一個鍵值對,如果鍵已存在則覆蓋舊值語法: SET key value [EX seconds] [PX milliseconds] [NX|XX]EX seconds:設置鍵的過期時間為 seconds 秒 PX milli…

【Unity】使用Cinemachine+CharacterController實現第三人稱視角下的角色視角、移動和跳躍控制

1.初始配置 安裝Cinemachine插件給角色添加CharacterConroller創建Cinemachine-->Free Look Camera在Free Look Camera中調整參數,Y Axis勾選Inver,X Axis取消勾選InverFree Look Camera要看向角色 跟隨角色(自行設置,我就不…

深入理解 DML 和 DQL:SQL 數據操作與查詢全解析

深入理解 DML 和 DQL:SQL 數據操作與查詢全解析 在數據庫管理中,SQL(結構化查詢語言)是操作和查詢數據的核心工具。其中,DML(Data Manipulation Language,數據操作語言) 和 DQL&…

MongoDB數據庫的安裝到入門使用詳細講解

本篇文章主要講解MongoDB的安裝使用教程及基礎的數據庫管理和操作能力的講解,通過本篇文章您可以快速的掌握對MongDB數據庫的基本認識及,基礎開發能力。 一、MongoDB介紹 MongoDB是一款免費開源的非關系型數據庫,該數據庫適應于復雜關系的存儲和管理,非常適合數據結構復雜…