0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

介紹一種OpenAtom OpenHarmony輕量系統(tǒng)適配方案

OpenAtom OpenHarmony ? 來源:OpenAtom OpenHarmony ? 作者:OpenAtom OpenHarmony ? 2024-03-05 09:24 ? 次閱讀

1. 簡(jiǎn)介

本文在不改變?cè)邢到y(tǒng)基礎(chǔ)框架的基礎(chǔ)上, 介紹了一種OpenAtom OpenHarmony(以下簡(jiǎn)稱“OpenHarmony”)輕量系統(tǒng)適配方案。 本方案使用的是 OpenHarmony v3.2 Release版本源碼。

2. 方案設(shè)計(jì)

本文使用的硬件模塊的主要特性及功能如下:

0290ade2-da2b-11ee-a297-92fbcf53809c.png

通常,適配OpenHarmony的方案是,將內(nèi)核由RTOS改為LiteOS-M,并移植原生所有功能模塊和鏡像打包功能。采用該方案面臨了諸多困難:

●編譯系統(tǒng)更改Gn+Ninjia,重寫和調(diào)試編譯腳本,需要學(xué)習(xí)成本

●適配和測(cè)試全部的原生功能,原本測(cè)試通過的功能需要重新測(cè)試,付出重復(fù)的勞動(dòng)

●適配新的OS接口,需要修改原生系統(tǒng)的OSI層接口,以對(duì)接LiteOS-M

該方案的改動(dòng)較多,將導(dǎo)致開發(fā)人員無法將精力聚焦于項(xiàng)目的新功能、工作量大、難度大,無法滿足項(xiàng)目的工期要求,項(xiàng)目風(fēng)險(xiǎn)大。

OpenHarmony的輕量系統(tǒng)編譯過程是,首先將各模塊編譯鏈接為靜態(tài)庫(kù),再將靜態(tài)庫(kù)鏈接為應(yīng)用程序,最后打包為鏡像文件。燒錄入硬件后,系統(tǒng)運(yùn)行單一進(jìn)程,各個(gè)不同的任務(wù)以多個(gè)線程運(yùn)行。

結(jié)合原生編譯系統(tǒng)和 OpenHarmony的特點(diǎn),最終采用的適配方案如下:

●不改變?cè)a的編譯系統(tǒng)和打包系統(tǒng)

●使用原生代碼的交叉編譯工具鏈編譯OpenHarmony為靜態(tài)庫(kù),將靜態(tài)庫(kù)集成到原生代碼中

●OpenHarmony中不編譯LiteOS-M內(nèi)核,使用原生代碼的RTOS內(nèi)核

●原生代碼中新增適配代碼,以提供OpenHarmony需要的接口

整體的軟件框架設(shè)計(jì)如下:

wKgZomXmdPiAQDTzAACNPYvE_v8293.jpg

方案保留了原始系統(tǒng)框架的大部分功能,新增OpenHarmony的模塊功能和其他項(xiàng)目需求功能,修改或升級(jí)部分原生功能(FreeRTOS、 MbedTLS等)。

3. OpenHarmony編譯

3.1 創(chuàng)建虛擬設(shè)備編譯

創(chuàng)建新的vendor和新的device配置,目錄如下:

●vendor/ohemu/L0_xts_demo

●device/qemu/L0_xts_demo

3.2 子系統(tǒng)配置

修改vendor/ohemu/L0_xts_demo/config.json,該文件包含了所有必須的子系統(tǒng)配置。

3.3 工具鏈配置

修改device/qemu/L0_xts_demo/liteos_m/config.gni,該文件包含了板級(jí)編譯配置,根據(jù)原生編譯系統(tǒng)的編譯設(shè)置來修改。

3.4 編譯命令

編譯命令如下:


python3 ./build.py -p L0_xts_demo -f -b debug --gn-args build_xts=true

編譯出的靜態(tài)庫(kù)位于out/L0_xts_demo/L0_xts_demo/libs

3.5 優(yōu)化剪裁

對(duì)manifest和prebuild進(jìn)行剪裁,只下 載必須的軟件和源碼。

●修改build/prebuilts_download_config.json,只保留GN、Ninja和Python。

●修改.repo/manifests/ohos/ohos.xml,刪除不需要的包和源碼。

3.6 集成

將編譯后的靜態(tài)庫(kù)拷貝到原生編譯系統(tǒng)中,并編寫demo程序,進(jìn)行編譯。

3.6.1 編寫demo

OpenHarmony的demo分為兩個(gè)單元main.c和demo.c。

●main.c 主線程,調(diào)用OHOS_SystemInit()函數(shù),啟動(dòng)OpenHarmony

● demo.c 示例線程,調(diào)用hilog接口循環(huán)打印日志

3.6.2 編譯demo

在demo目錄下創(chuàng)建CMakeFile.txt文件。

定義OpenHarmony的頭文件包含目錄及庫(kù)文件,編譯main.c和demo.c,生成demo鏡像文件。

3.6.3 編譯XTS

將XTS編譯生成的靜態(tài)庫(kù)鏈接為鏡像,每一項(xiàng)XTS測(cè)試生成一個(gè)鏡像。

3.6.4 鏈接

修改ld文件的.TEXT段,新增OpenHarmony的自定義段設(shè)置。

4. 原生系統(tǒng)修改

在原生代碼中升級(jí)模塊或新增OpenHarmony調(diào)用的接口。

4.1 升級(jí)RTOS

由于不支持OpenHarmony中的底層接口,F(xiàn)reeRTOS內(nèi)核從版本10.0.1升級(jí)到版本v10.3.1,適配其HAL層和 OSI層接口。

FreeRTOS源碼來自于官網(wǎng)地址: https://github.com/FreeRTOS/FreeRTOS

4.2 升級(jí)MbedTLS

因?yàn)樵鶰bedTLS代碼的版本較低,所以拷貝OpenHarmony中的MbedTLS源碼覆蓋到原生系統(tǒng)中。修改在OpenHarmony中不編譯三方庫(kù)MbedTLS。

修改CMakeFile.txt和config.h,打開OpenHarmony和原生系統(tǒng)需要的功能開關(guān)。

4.3 新增CMSIS接口

原生系統(tǒng)kernel中新增cmsis目錄,包含CMSIS的源碼和頭文件。

CMSIS源碼來自于開源項(xiàng)目CMSIS-FreeRTOS,地址:https://github.com/ARM-software/CMSIS-FreeR TOS

修改部分源碼適配系統(tǒng)源碼,并修改kernel的CMakeFile.txt,將源碼中的cmsis_os2.c文件加入編譯。

4.4 新增打印接口

新增打印接口,對(duì)接原生系統(tǒng)打印功能,比如打印到串口、保存文件等。新增加的功能模塊和OpenHarmony均調(diào)用新增的打印接口。

4.5 新增文件系統(tǒng)接口

適配OpenHarmony的文件系統(tǒng)調(diào)用的接口

●_open()

●_close()

●_read()

●_write()

●_lseek()

●_unlink()

需要注意的是,OpenHarmony要求打開文件最多為32個(gè),這里需要控制通過_open()接口打開的文件 總數(shù)不能超過32個(gè)。

4.6 新增POSIX接口

適配編譯中報(bào)錯(cuò)缺失的POSIX接口

●_exit()

●kill()

●sleep()

●_fini()

4.7 新增LiteOS接口

LiteOS中調(diào)用的接口

●ArchIntLock()

●ArchIntRestore()

●LOS_MuxCreate()

●LOS_MuxPend()

●LOS_MuxDelete()

●LOS_TickCountGet()

●osThreadGetArgument()

4.8 其他接口

適配缺失的其他接口

●OhosMalloc()

●OhosFree()

●RefreshAllServiceTimeStamp()

●HiLogWriteInternal()

5. OpenHarmony修改

5.1 三方庫(kù)

修改third_party/bounds_checking_function/BUILD.gn,編譯生成libsec_static靜態(tài)庫(kù)

5.2 修改hiview_lite

●base/hiviewdfx/hiview_lite/BUILD.gn,改為無緩存,直接輸出到串口。

●base/hiviewdfx/hiview_lite/hiview_util.c ,修改打印函數(shù),調(diào)用原生系統(tǒng)新增的打印接口

5.3 修改HUKS

修改文件base/security/huks/utils/mutex/hks_mutex.c

因?yàn)樵到y(tǒng)并不支持POSIX的mutex系列接口,這里修改為L(zhǎng)OS接口。如果原生系統(tǒng)支持POSIX接口,則這里不需要進(jìn)行修改。

5.4 修改bootstrap_lite

修改文件base/startup/bootstrap_lite/services/source/core_main.h,取消宏里面的重復(fù)調(diào)用。

5.5 刪除-fPIC

刪除BUILD.gn文件里的-fPIC,否則會(huì)導(dǎo)致程序運(yùn)行異常。

●foundation/ability/ability_lite/frameworks/want_lite/BUILD.gn

●foundation/bundlemanager/bundle_framework_lite/frameworks/bundle_lite/BUILD.gn

5.6 修改XTS

修改日志打印,將日志輸出到串口。

6. 總結(jié)

該方案與通用方案相比,降低了適配復(fù)雜度和開發(fā)難度,減少了工作量,使項(xiàng)目進(jìn)度符合了工期要求,是一種快速的適配方案。采用該方案進(jìn)行開發(fā)的輕量設(shè)備已經(jīng)成功通過了OpenHarmony兼容性測(cè)評(píng)。請(qǐng)各位讀者根據(jù)項(xiàng)目的實(shí)際情況在兩種方案中進(jìn)行選擇。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • CMSIS
    +關(guān)注

    關(guān)注

    0

    文章

    39

    瀏覽量

    11825
  • RTOS
    +關(guān)注

    關(guān)注

    20

    文章

    804

    瀏覽量

    119113
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    483

    瀏覽量

    61724
  • HAL庫(kù)
    +關(guān)注

    關(guān)注

    1

    文章

    114

    瀏覽量

    6030
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3548

    瀏覽量

    15736

原文標(biāo)題:一種OpenHarmony輕量系統(tǒng)適配方案

文章出處:【微信號(hào):gh_e4f28cfa3159,微信公眾號(hào):OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【開源鴻蒙】使用QEMU運(yùn)行OpenHarmony系統(tǒng)

    本文將會(huì)介紹如何從源碼安裝QEMU 6.2.0,以及如何使用QEMU運(yùn)行OpenHarmony系統(tǒng)。通過本文,你將會(huì)對(duì)QEMU和
    的頭像 發(fā)表于 09-14 08:51 ?196次閱讀
    【開源鴻蒙】使用QEMU運(yùn)行<b class='flag-5'>OpenHarmony</b><b class='flag-5'>輕</b><b class='flag-5'>量</b><b class='flag-5'>系統(tǒng)</b>

    [2K300適配OpenharmonyV4.1]根文件系統(tǒng)制作請(qǐng)教

    嘗試更改制作文件格式為ext4,但是燒錄時(shí)也失敗了。 請(qǐng)問能否提供Openharmony 根文件系統(tǒng)的相關(guān)資料,或者開源Openharmon
    發(fā)表于 09-11 11:18

    開源鴻蒙 編譯OpenHarmony系統(tǒng)QEMU RISC-V版本

    本文將介紹如何為QEMU RISC-V虛擬平臺(tái)構(gòu)建OpenHarmony系統(tǒng)。得益于QEMU的CPU指令集模擬執(zhí)行能力,該方法可以在沒有
    的頭像 發(fā)表于 07-15 10:36 ?810次閱讀
    開源鴻蒙 編譯<b class='flag-5'>OpenHarmony</b><b class='flag-5'>輕</b><b class='flag-5'>量</b><b class='flag-5'>系統(tǒng)</b>QEMU RISC-V版本

    介紹一種嵌入式Linux中的錄音降噪方案

    降噪不僅只能從硬件入手,本文為您介紹一種嵌入式Linux中的錄音降噪方案。該方案完全依靠軟件實(shí)現(xiàn),最大程度上降低投入。
    的頭像 發(fā)表于 05-21 11:52 ?432次閱讀

    鴻蒙OpenHarmony系統(tǒng) 編譯】 (基于Hi3861開發(fā)板)

    OpenHarmony支持hb和build.sh兩編譯方式。此處介紹hb方式,build.sh腳本編譯方式請(qǐng)參考[使用build.sh腳本編譯源碼]。
    的頭像 發(fā)表于 05-14 17:53 ?944次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b>【<b class='flag-5'>輕</b><b class='flag-5'>量</b><b class='flag-5'>系統(tǒng)</b> 編譯】 (基于Hi3861開發(fā)板)

    OpenAtom OpenHarmony 4.1 Release版本正式發(fā)布

    近日,OpenAtom OpenHarmony(以下簡(jiǎn)稱“OpenHarmony”)4.1 Release版本如期而至,開發(fā)套件同步升級(jí)到API 11 Release。
    的頭像 發(fā)表于 04-07 11:43 ?534次閱讀

    鴻蒙開發(fā)-OpenHarmony系統(tǒng)之獲取當(dāng)?shù)貢r(shí)間

    設(shè)備里面,我們常常需要獲取本地時(shí)間,用于時(shí)間顯示,log記錄,幫助RTC芯片糾正時(shí)間等等。我們?cè)谥霸O(shè)計(jì)了個(gè)智慧時(shí)鐘,需要使用到本地當(dāng)前時(shí)間,因此本篇文章想在OpenHarmony
    的頭像 發(fā)表于 01-22 17:48 ?746次閱讀
    鴻蒙開發(fā)-<b class='flag-5'>OpenHarmony</b><b class='flag-5'>輕</b><b class='flag-5'>量</b><b class='flag-5'>系統(tǒng)</b>之獲取當(dāng)?shù)貢r(shí)間

    填問卷,抽獎(jiǎng)品 | OpenAtom OpenHarmony公眾號(hào)問卷調(diào)研

    點(diǎn)擊藍(lán)字 ╳ 關(guān)注我們 開源項(xiàng)目 OpenHarmony 是每個(gè)人的 OpenHarmony 首先,感謝各位小伙伴對(duì)OpenAtom OpenHarmony公眾號(hào)
    的頭像 發(fā)表于 01-03 21:15 ?595次閱讀
    填問卷,抽獎(jiǎng)品 | <b class='flag-5'>OpenAtom</b> <b class='flag-5'>OpenHarmony</b>公眾號(hào)問卷調(diào)研

    OpenHarmony開源GPU庫(kù)Mesa3D適配說明

    : Dayu200-rk3568 、背景介紹 OpenHarmony對(duì)圖形的渲染,支持CPU和GPU兩方式。為了支持流暢的用戶體現(xiàn),GPU適配
    發(fā)表于 12-25 11:38

    潤(rùn)開鴻AT32開發(fā)平臺(tái)通過OpenHarmony兼容性測(cè)評(píng)

    OpenHarmony兼容性證書 潤(rùn)開鴻AT32開發(fā)平臺(tái)基于AT32F403核心控制單元設(shè)計(jì),支持OpenHarmony系統(tǒng),搭載32位
    發(fā)表于 12-21 17:20

    潤(rùn)開鴻AT32開發(fā)平臺(tái)通過OpenHarmony兼容性測(cè)評(píng)

    OpenHarmony落地垂直行業(yè)開啟了新的硬件接入點(diǎn)。 潤(rùn)開鴻AT32開發(fā)平臺(tái)OpenHarmony兼容性證書 潤(rùn)開鴻AT32開發(fā)平臺(tái)基于AT32F403核心控制單元設(shè)計(jì),支持OpenHarmony
    的頭像 發(fā)表于 12-20 21:10 ?549次閱讀
    潤(rùn)開鴻AT32開發(fā)平臺(tái)通過<b class='flag-5'>OpenHarmony</b>兼容性測(cè)評(píng)

    【開源三方庫(kù)】Arouter:、高效的頁面路由工具

    OpenHarmony(以下簡(jiǎn)稱“OpenHarmony”)的高效的頁面路由工具,相比原生的路由方案,Arouter更有優(yōu)勢(shì)。傳統(tǒng)的路
    的頭像 發(fā)表于 11-24 21:15 ?946次閱讀
    【開源三方庫(kù)】Arouter:<b class='flag-5'>一</b>款<b class='flag-5'>輕</b><b class='flag-5'>量</b>、高效的頁面路由工具

    【開源三方庫(kù)】Easyui:基于OpenAtom OpenHarmony ArkUI深度定制的組件框架

    點(diǎn)擊藍(lán)字 ╳ 關(guān)注我們 開源項(xiàng)目 OpenHarmony 是每個(gè)人的 OpenHarmony 萬冬陽 公司:中國(guó)科學(xué)院軟件所 小組:知識(shí)體系工作組 簡(jiǎn)介 Easyui是套基于ArkTS語言開發(fā)的
    的頭像 發(fā)表于 11-09 10:55 ?575次閱讀
    【開源三方庫(kù)】Easyui:基于<b class='flag-5'>OpenAtom</b> <b class='flag-5'>OpenHarmony</b> ArkUI深度定制的組件框架

    系統(tǒng):全志XR806(XR806AF2L)

    開發(fā)板名稱(芯片型號(hào)) 全志XR806(XR806AF2L) 芯片架構(gòu) CPU頻率 介紹(字?jǐn)?shù)請(qǐng)控制在200字以內(nèi)) XR806是全志科技旗下子公司廣州芯之聯(lián)研發(fā)設(shè)計(jì)的款支持WiFi和BLE
    發(fā)表于 10-19 11:14

    系統(tǒng):小熊派BearPi-HM Nano(HI3861)

    OpenHarmony操作系統(tǒng);板上搭載的Hi3861RNIV100,是款高度集成的2.4GHz Wi-Fi SoC芯片Hi3861,板上搭載的NT3H1x01W0FHKH NFC芯片,是
    發(fā)表于 10-19 11:10