RTOS基礎 -- NXP M4小核的RPMsg-lite與端點機制回顧

一、RPMsg-lite與端點機制回顧

在RPMsg協議框架中:

  • Endpoint(端點) 是一個邏輯通信端口,由本地地址(local addr)、遠程地址(remote addr)和回調函數組成。
  • 每個消息都會發送到特定的端點地址,端點負責接收并處理對應地址的消息。
  • rpmsg-lite庫提供了輕量級API用于RTOS或裸機端實現,降低資源占用。

RPMsg端點創建的一般步驟為:

  • 創建端點(提供本地地址、回調函數)。
  • 向名字服務注冊端點名(可選)。
  • 通知遠端核自動完成綁定。

二、rpmsg_lite_create_ept的詳細實現

函數原型與含義:

struct rpmsg_lite_endpoint *rpmsg_lite_create_ept(struct rpmsg_lite_instance *rpmsg_dev,   // rpmsg-lite 實例uint32_t addr,                           // 本地端點地址(可以填 RPMSG_ADDR_ANY 自動分配)rpmsg_ept_rx_cb_t rx_cb,                 // 消息接收回調函數void *rx_cb_data                         // 回調函數用戶數據(上下文)
);

執行流程與機制:

1. 創建端點結構體(endpoint):

  • 在內部分配一個struct rpmsg_lite_endpoint,包含端點地址、本地回調函數、回調數據等:
struct rpmsg_lite_endpoint {struct rpmsg_lite_instance *rpmsg_dev;uint32_t addr;               // 本地地址rpmsg_ept_rx_cb_t cb;        // 回調函數void *cb_data;               // 回調數據struct rpmsg_lite_endpoint *next;
};

2. 地址分配機制:

  • 如果用戶指定地址為RPMSG_ADDR_ANY (0xFFFFFFFF),RPMsg-lite會自動從地址池分配未占用的地址。
  • 如果指定了明確地址,則直接使用該地址。

3. 回調函數的注冊:

  • 接收到的消息會通過RPMsg-lite庫的中斷/virtqueue機制接收后,解析目標地址,將消息分發給對應端點,調用注冊的回調函數:
// 接收消息流程示意
rpmsg_rx_callback(endpoint, payload, payload_len, src_addr);

實例代碼示例:

// 創建端點示例
struct rpmsg_lite_endpoint *my_ept = rpmsg_lite_create_ept(rpmsg_instance, RPMSG_ADDR_ANY,       // 自動地址分配my_endpoint_rx_cb,    // 回調函數NULL                  // 回調上下文
);

三、rpmsg_ns_announce實現詳解(名字服務機制)

RPMsg名字服務用于遠端核自動發現端點并建立端到端通信通道。

函數原型與含義:

int32_t rpmsg_ns_announce(struct rpmsg_lite_instance *rpmsg_lite_dev, struct rpmsg_lite_endpoint *new_ept, const char *ept_name, uint32_t flags
);
  • rpmsg_lite_dev:RPMsg實例句柄。
  • new_ept:需要注冊的端點句柄。
  • ept_name:端點名稱,遠端用此名稱發現服務。
  • flags:標志位,目前通常為0。

內部實現流程:

rpmsg_ns_announce本質是向一個特殊端點(地址為RPMSG_NS_ADDR=53)發送一個特殊消息,這個消息稱為名字服務公告消息(announce)

消息結構定義為(偽代碼):

struct rpmsg_ns_msg {char name[32];       // 端點名uint32_t addr;       // 端點地址uint32_t flags;      // 屬性標記
};

發送方式:

  • nameaddrflags組成payload,發送到特殊端點(地址53)。
  • 遠端的RPMsg名字服務(Linux端的rpmsg_core、rpmsg_ctrl)會監聽地址53的消息,收到此消息后自動執行相應端點綁定和設備節點創建操作。

示例:

// 發送名字服務公告消息
rpmsg_ns_announce(rpmsg_instance, my_ept, "rpmsg-channel-1", 0);

四、協議交互過程詳細示意圖解

RTOS/裸機端(M4)與Linux端(A53)交互過程如下:

M4端                                 共享內存(VRing)                           Linux端|                                        |                                          |
rpmsg_lite_create_ept(...)                |                                          |+--創建端點,自動分配地址                |                                          ||                                        |                                          |
rpmsg_ns_announce(...)                    |                                          |+---向RPMSG_NS_ADDR發送端點公告--------->|                                          ||                                        |--------VRing傳輸名字服務消息----------->||                                        |                                          ||                                        |                                Linux RPMsg Core|                                        |                                          ||                                        |<-----接收到名字服務公告(端點名+地址)--+|                                        |                                          ||                                        |----自動創建/dev/rpmsgX設備文件(rpmsg_char)|                                        |                                          ||                                        |                                          ||                                        |                                          ||<---遠端核打開/dev/rpmsgX,并綁定到端點地址------| |                                        |                                          ||<-------遠端通過/dev/rpmsgX發送消息到地址(端點)||                                        |                                          |
my_endpoint_rx_cb(...)                    |                                          |+----回調被調用,處理接收到的消息         |                                          |

五、關鍵注意事項與高級技巧:

  • 自動綁定機制
    名字服務公告消息本質是一種特殊的RPMsg消息,因此遠端核必須啟動RPMsg Core服務才能接收公告消息,實現自動綁定。

  • 多端點支持
    使用RPMsg-lite時可創建多個端點,每個端點可以獨立注冊名字服務,Linux端會對應創建多個/dev/rpmsgX設備節點。

  • 資源表配置
    resource_table中的VDEV資源定義了vring共享內存和VirtIO隊列配置,必須與RPMsg-lite實例初始化參數保持一致。


六、小結與應用場景推薦

  • rpmsg_lite_create_ept負責本地端點的地址申請與回調注冊。
  • rpmsg_ns_announce通過特殊消息完成遠程核端點發現與自動設備綁定。

典型應用場景包括:

  • Linux核調用RTOS側傳感器數據采集。
  • M4核主動向Linux核推送實時數據。
  • 多核系統啟動時自動建立通訊鏈路。

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

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

相關文章

NineData云原生智能數據管理平臺新功能發布|2025年3月版

本月發布 15 項更新&#xff0c;其中重點發布 3 項、功能優化 11 項、性能優化 1 項。 重點發布 基礎服務 - MFA 多因子認證 新增 MFA 多因子認證&#xff0c;提升賬號安全性。系統管理員開啟后&#xff0c;所有組織成員需綁定認證器&#xff0c;登錄時需輸入動態驗證碼。 數…

DAY 35 leetcode 202--哈希表.快樂數

題號202 編寫一個算法來判斷一個數 n 是不是快樂數。 「快樂數」 定義為&#xff1a; 對于一個正整數&#xff0c;每一次將該數替換為它每個位置上的數字的平方和。然后重復這個過程直到這個數變為 1&#xff0c;也可能是 無限循環 但始終變不到 1。如果這個過程 結果為 1&a…

Maven+Spring實現后端開發

一、前置知識的介紹 1.Spring 輕量級的 DI / IoC 和 AOP 容器的開源框架 容器的開源框架網址&#xff1a;https://spring.io/projects/spring-framework 作用&#xff1a;可簡化管理創建和組裝對象之間的依賴關系 將controller----->service------->dao層的依賴配置…

解鎖界面設計密碼,打造極致用戶體驗

界面設計是對軟件、網站、移動應用等產品的用戶界面進行設計的過程&#xff0c;旨在為用戶提供美觀、易用、高效的交互體驗。以下是關于界面設計的一些主要方面&#xff1a; 一、設計原則 用戶中心原則&#xff1a;以用戶為中心&#xff0c;了解用戶的需求、期望、行為和習慣…

Joint Receiver Design for Integrated Sensing and Communications

摘要——在本文中&#xff0c;我們研究了集成感知與通信(ISAC)系統的聯合接收機設計&#xff0c;其中通信信號和目標回波信號同時被接收和處理&#xff0c;以在兩種功能之間實現平衡性能。特別地&#xff0c;我們提出了兩種設計方案來解決聯合感知和通信問題中的接收信號處理。…

DeepSeek接入飛書多維表格,效率起飛!

今天教大家把DeepSeek接入飛書表格使用。 準備工作&#xff1a;安裝并登錄飛書&#xff1b;可以準備一些要處理的數據&#xff0c;確保數據格式正確&#xff0c;如 Excel、CSV 等&#xff0c;也可直接存儲到飛書多維表格。 創建飛書多維表格&#xff1a;打開飛書&#xff0c;點…

【C語言入門】由淺入深學習指針 【第二期】

目錄 1. 指針變量為什么要有類型&#xff1f; 2. 野指針 2.1 未初始化導致的野指針 2.2 指針越界導致的野指針 2.3 如何規避野指針 3. 指針運算 3.1 指針加減整數 3.2 指針減指針 3.3 指針的關系運算 4. 二級指針 5. 指針數組 5.1 如何使用指針數組模擬二維數組 上…

OpenCV 圖形API(13)用于執行兩個矩陣(或圖像)逐元素乘法操作的函數mul()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 描述 計算兩個矩陣的每個元素的縮放乘積。 mul函數計算兩個矩陣的逐元素乘積&#xff1a; dst ( I ) saturate ( scale ? src1 ( I ) ? src2 ( I ) ) …

人工智能混合編程實踐:C++調用封裝好的DLL進行圖像超分重建

人工智能混合編程實踐:C++調用封裝好的DLL進行圖像超分重建 前言相關介紹C++簡介ONNX簡介ONNX Runtime 簡介**核心特點**DLL 簡介**核心特點****創建與使用****應用場景****優點與挑戰**圖像異常檢測簡介應用場景前提條件實驗環境項目結構C++調用封裝好的DLL進行圖像超分重建C…

Linux內核之高效緩沖隊列kfifo

一、先說FIFO 隊列是常見的一種數據結構&#xff0c;簡單看來就是一段數據緩存區&#xff0c;可以存儲一定量的數據&#xff0c;先存進來的數據會被先取出&#xff0c;First In Fist Out&#xff0c;就是FIFO。 FIFO主要用于緩沖速度不匹配的通信。 例如生產者&#xff08;數…

【面試篇】Kafka

一、基礎概念類 問題&#xff1a;請簡述 Kafka 是什么&#xff0c;以及它的主要應用場景有哪些&#xff1f; 答案&#xff1a;Kafka 是一個分布式流處理平臺&#xff0c;它以高吞吐量、可持久化、可水平擴展等特性而聞名。其主要應用場景包括&#xff1a; 日志收集&#xff1a…

解釋回溯算法,如何應用回溯算法解決組合優化問題?

一、回溯算法核心原理 回溯算法本質是暴力窮舉的優化版本&#xff0c;采用"試錯剪枝"策略解決問題。其核心流程如下&#xff1a; ?路徑構建&#xff1a;記錄當前選擇路徑?選擇列表&#xff1a;確定可用候選元素?終止條件&#xff1a;確定遞歸結束時機?剪枝優化…

Vue 學習隨筆系列二十二 —— 表格高度自適應

表格高度自適應 文章目錄 表格高度自適應1、方法一2、方法二 1、方法一 根據頁面元素計算各自占比 <template><div class"main"><div class"query-form" ref"Query"><QueryFormref"QueryForm"query"query&q…

ubuntu22.04.5安裝docker,解決安裝出現的錯誤,解決Docker hello-world沒打印出來

文章目錄 前言一 安裝失敗解決1結合具體報錯分析2 首先懷疑是VPN的問題3 直接百度報錯信息4最終解決問題 二 驗證Docker hello-world沒打印出來總結 前言 先說一下前面的情況&#xff0c;使用的是公司的工作站&#xff0c;登錄公司一個帳號使用的公司網絡&#xff0c;使用網上…

idea插件(自用)

.ignore git排除文件插件&#xff1a;.ignore介紹 Grep console 自定義日志顏色&#xff1a;Grep console介紹 AceJump 光標快速定位&#xff1a;AceJump介紹 Key promoter 提示插件:Key promoter介紹 MetricsReloaded 分析代碼復雜度的插件&#xff1a;MetricsReload…

讓AI再次偉大-MCP-Client開發指南

&#x1f44f;作者簡介&#xff1a;大家好&#xff0c;我是愛吃芝士的土豆倪&#xff0c;24屆校招生Java選手&#xff0c;很高興認識大家&#x1f4d5;系列專欄&#xff1a;Spring原理、JUC原理、Kafka原理、分布式技術原理、數據庫技術、JVM原理、AI應用&#x1f525;如果感覺…

供應鏈管理:計算題 / 倒扣法

一、理解倒扣法 在供應鏈管理中&#xff0c;倒扣法是一種常用的成本計算方法&#xff0c;主要用于確定商品的成本和銷售價格&#xff0c;以確保特定的毛利率。倒扣法的基本原理是在已知售價和期望毛利率的情況下&#xff0c;逆推計算出供貨價或成本價。 二、倒扣法的計算公式…

skynet.start 的作用詳細解析

目錄 skynet.start 的作用詳細解析1. 功能概述2. 基本用法3. 關鍵作用(1) 注冊消息處理函數(2) 啟動事件循環(3) 服務生命周期管理 4. 與其他函數的協作5. 未調用 skynet.start 的后果6. 高級場景&#xff1a;何時不需要 skynet.start7. 總結 skynet.start 的作用詳細解析 在 …

基于yolo11的BGA圖像目標檢測

1.產生圖像數據的分辨率 2.產生圖像的大小 3.產生圖像是黑白或是RGB彩色 灰度圖像&#xff0c;達到識別要求&#xff0c;減少計算量 4.標注數據的精準程度 1.模型標注后&#xff0c;少量標注全部人工校驗&#xff0c;大量數據抽檢&#xff0c;部分人工檢驗 2.明確邊界框貼合…