hi3559v100 sdk中雙系統AMP架構的初步瞭解

来源:https://www.cnblogs.com/linhaostudy/archive/2019/06/27/11095342.html
-Advertisement-
Play Games

hi3559v100是海思推出的camera soc處理器。採用的是雙核處理器。一個是a7,運行的linux3.18內核。一個是a17使用的是huaweiliteos操作系統,Hi3559V100 系統中 Huawei LiteOS 負責系統媒體編解碼相關業務。兩個操作系統實現amp的構建形式。 首 ...


hi3559v100是海思推出的camera soc處理器。採用的是雙核處理器。一個是a7,運行的linux3.18內核。一個是a17使用的是huaweiliteos操作系統,Hi3559V100 系統中 Huawei LiteOS 負責系統媒體編解碼相關業務。兩個操作系統實現amp的構建形式。

首先瞭解一下sdk中的內容。

分別解壓兩個sdk包目錄如下:

image

作為嵌入式軟體開發來說,重點關註以下兩個目錄:

  1. hardware

主要是一些datasheet,demo板的原理圖。

  1. sofaware

板端,pc端,手機端所使用到的開發調試 維護的軟體包,工具包和文檔

1. sdk的軟體架構:

image

  1. OSDRV 層主要提供底層系統支持包,如 Bootloader、OS、Rootfs 模板,關鍵driver 及交叉編譯工具鏈,雙核通信驅動等。
  2. MPP 層和原有監控領域 SDK 保持一致,包含主要的媒體模塊驅動相關庫,如VI、VPSS、VENC、VO 等,對外提供 MPI 介面。
  3. Hisyslink 為雙核雙系統通信組件,用於雙系統間的消息通信,數據傳遞。為了簡化降低客戶在雙系統方面的開發難度,SDK 包提供了 NDK 媒體適配參考代碼,供客戶參考,客戶在實際產品開發過程中,也可以在 MPI 介面上,根據目標市場產品形態,對基礎音視頻業務功能和數據流進行重新封裝。
  4. Middleware 層主要提供了典型的業務組件,如錄像、拍照、文件管理、回放、GUI 及網傳等。

2. sdk中的雙核業務部署:

image

  1. NDK媒體業務在雙系統部署。

NDK 即媒體相關的功能模塊基本都在 Huawei LiteOS 上具體實現(即 MAPI Local模式),並通過在 linux 側提供 MAPI client 介面,對外提供媒體服務。MAPI local和 MAPI client 之間通過雙核通信組件 Hisyslink 實現通信。

  1. Middleware 和 References 在 Linux 側部署,便於用戶擴展。

  2. 硬體資源在雙系統部署。

媒體相關硬體部署在 Huawei LiteOS 側;但外設控制器及其相關中斷,記憶體等硬體資源應該根據產品需要,進行雙系統部署。

3. IPCM

在soc上部署的amp構架,一個linux,一個是huawei liteos。兩個系統間的通信機制:ICMP

Linux+Huawei LiteOS 雙系統業務部署中,媒體業務的硬體資源及功能實現都部署在Huawei LiteOS 端,並通過核間通信,把媒體服務延伸到 Linux 端,Linux 提供和Huawei LiteOS 端相同的介面定義。這就需要 Linux 和 Huawei LiteOS 提供核間通信機制,為媒體業務提供消息通信和大塊數據通信機制。核間通信組件IPCM 就是專門為Linux+Huawei LiteOS 雙系統核間通信設計的底層組件。

IPCM 的底層通信機制基於共用記憶體+中斷方式實現。

IPCM 是基於共用記憶體區域實現多核通信的,每個核(OS)擁有一塊自己的記憶體區域(基址+長度),同時知道其它每個核(OS)擁有的記憶體區域(基址+長度)。

發送消息(帶消息頭)時,需指定目標核 ID(target)和埠(port),將消息填充到目標的記憶體區域。

接收消息時,從自己的記憶體區域讀取數據,根據消息頭讀取一個消息。

雙核之間通過 GIC 中斷通知對方有消息準備好,需要對方讀取。

Hi3559V100 在 IPCM 基礎上再封裝實現 HisysLink 子系統,一般情況下不直接訪問IPCM 介面進行雙核通信。這裡只介紹 IPCM 模塊的初始化動作。

  • Linux 端

掛載 hi_ipcm.ko

  • Huawei LiteOS 端

調用_ipcm_vdd_init();初始化 IPCM 模塊。

由於 IPCM 使用一片記憶體區域供 Linux 與 Huawei LiteOS 共同訪問實現消息通信。當執行 rmmod hi_ipcm 卸載完 Linux 的 IPCM 模塊後,也需要在 Huawei LiteOS 調用_ipcm_vdd_cleanup 去初始化 IPCM。如果 Linux 與 Huawei LiteOS 兩端初始化與去初始化 IPCM 不一致(比如一端去初始化並再次初始化 IPCM,另一端不執行相應操作),將會導致內部共用記憶體區域未同步,造成訪問異常地址而出現系統掛死。

4. 共用文件系統sharefs:

Huawei LiteOS 上運行的某些應用需要進行一些配置文件的讀寫和臨時中間文件的產生和刪除。但 Hi3559V100 的 flash、sd、usb 均部署在 Linux 端,導致 Huawei LiteOS 無法使用 yaffs、FAT 之類文件系統進行文件的訪問。因此開發 Sharefs 文件系統,在Huawei LiteOS 端虛擬一個文件系統,利用 IPCM 通信和共用記憶體,實現其讀寫 Linux上指定目錄下的內容。Sharefs 可以幫助 Huawei LiteOS 從 Linux 端讀寫文件,類似於NFS。Sharefs 指定訪問 Linux 的目錄可作為 flash,sd,usb,nfs 等的掛載點。這樣,可實現 Huawei LiteOS 通過 Sharefs 訪問 yaffs、FAT、NFS 等文件系統。將 Huawei LiteOS 需要訪問的文件放在 Linux 端 Sharefs 指定目錄,Huawei LiteOS 即可訪問其需要的文件。假如共用的目錄是liteos這個目錄,Huawei LiteOS 端訪問/liteos 目錄,即為 Linux 端實際目錄/liteos。在 Huawei LiteOS 端可使用 open/read/write/lseek/close 等系統調用,也可使用 fopen/fread/fwrite/fclose 等標準 I/O 庫訪問/liteos 目錄。具體的使用如下:

4.1 sharefs的使用:

將 Huawei LiteOS 需要訪問的文件放在 Linux 端 Sharefs 指定目錄,Huawei LiteOS 即可訪問其需要的文件。Sharefs 使用步驟如下:

步驟1. Sharefs 在目錄 osdrv/ components/sharefs/sharefs 下,在其目錄執行./build.sh 編譯出Linux 端使用的庫(sharefs/out/linux/ liblinux_sharefs.a)和 APP(sharefs/out/linux/sharefs),Huawei LiteOS 端使用的庫(sharefs/out/liteos/ libsharefs.a)。(此步驟已通過頂層 SDK 編譯執行完成,可不做)

步驟2. Huawei LiteOS/Linux 使用方法

Huawei LiteOS 端使用方法:sharefs/include/sharefs_client.h 為其使用 Sharefs 用到的頭文件。首先執行 IPCM 初始化,調用 _ipcm_vdd_init();再調用HI_ShareFs_Client_Init("/liteos");

完成初始化,其傳參"/liteos"為 Sharefs 指定訪問的文件目錄,在 Linux 端需要有一個與其同名的目錄。用戶可自行指定 Sharefs 訪問目錄。可使用 HI_ShareFs_Client_Check()介面查看 Sharefs 是否建立連接。返回 true 表示建立連接。方可執行文件訪問。可使用 HI_ShareFs_Client_Get_Path()介面獲得 Sharefs 指定訪問的目錄。此目錄實際存在於 Linux 端文件系統中。

Linux 端使用方法:首先載入 IPCM 模塊,在單板根文件系統下執行/komod/ipcm 或insmod /komod/hi_ipcm.ko;如果採用 APP 執行:sharefs &,如果採用庫,則在用戶APP 中調用 HI_ShareFs_Server_Init()。

Sharefs 在 Linux 端使用的是用戶態程式,其會與其它用戶態程式一起競爭 CPU 資源。當 Linux 端 CPU 使用率太高(大80%)時,Sharefs 的 APP 執行效率會受到一定影響,會引起 Huawei LiteOS 端通過 Sharefs 訪問 Linux 端文件效率下降,訪問時長增加。此時需要提高 Sharefs 進程的優先順序優先搶占 CPU 資源,命令:nice --19 sharefs&。採用 Sharefs 庫時,需要提高使用其庫的 APP 優先順序。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ```pythoncentos常用命令: 查看所有運行的單元:systemctl list-units 查看所有單元:systemctl list-units --all 查看所有啟動的服務:systemctl list-units --type=service 對應以前的chkconfig --l ...
  • Docker 是 Golang 編寫的, 自 2013 年推出以來,受到越來越多的開發者的關註。如果你關註最新的技術發展,那麼你一定聽說過 Docker。不管是雲服務還是微服務(Microservices),越來越多的廠商都開始基於 Docker 作為基礎設施自動化的工具。那麼什麼是 Docker? ...
  • 用戶的基本操作(二) 使用who,whoaim,w檢查用戶登錄情況 簡單瞭解下 使用finger命令查詢永輝信息及登錄信息 使用chfn命令修改用戶信息 使用chsh命令修改用戶登錄bash shell 用戶的擴展知識 用戶的創建流程 1,useradd創建用戶時,系統會以/etc/login.de ...
  • 安裝Python3安裝Python依賴:yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel 由於Python在linux不支持我們以可執行程式的方式安裝,所以需要我們選擇對應 ...
  • 上午前客戶突然來電說換了臺電腦重新裝的程式不能正常用,發來錯誤提示如圖: 這錯誤顯然不是程式錯誤,異常寫的很清楚 ,COM組件沒註冊,搜一下CLSID, 原來是GridReport++ ,參考地址: https://blog.csdn.net/u011511086/article/details/4 ...
  • 【i.MX6UL/i.MX6ULL開發常見問題】2.3單獨編譯內核,uboot生成很多文件,具體用哪一個? 答:內核編譯出來的文件是~/MYiR-imx-Linux/arch/arm/boot/目錄下的zImage 文件。 uboot編譯出來的文件是~/MYiR-iMX-uboot/目錄下的u-bo ...
  • 基於CentOS7資料庫性能優化(Postgresql) 1、 磁碟 a) Barriers IO i. 通過查看linux是否載入libata,確定是否開啟(一般操作系統都是預設開啟) [root@localhost ~]# dmesg |grep libata [ 2.063756] libat ...
  • 1. 上篇文章 在無界面centos7上部署jdk和tomcat 里介紹了在阿裡伺服器上部署javaweb工程,在部署完成後,我們需要通過 ip/功能變數名稱:埠 的方式訪問tomcat,但是在實際項目中,我們可以直接通過 ip/功能變數名稱 訪問項目,例如 www.baidu.com 即可訪問百度,那我們該如何 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...