<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HarmonyOS入門講解和代碼編譯運行

yzcdx ? 來源:OS與AUTOSAR研究 ? 作者:thatway ? 2022-11-15 09:40 ? 次閱讀

簡介

華為鴻蒙系統是一款全新的面向全場景的分布式操作系統,創造一個超級虛擬終端互聯的世界,將人、設備、場景有機地聯系在一起,將消費者在全場景生活中接觸的多種智能終端,實現極速發現、極速連接、硬件互助、資源共享,用合適的設備提供場景體驗。

1.1 抽象的藝術

b6e30f4c-6475-11ed-8abf-dac502259ad0.png

華為的消費者業務很強大,個人消費品注重品控,這恰恰是華為的優勢,華為設備的穩定性和對需求響應速度都是很好的,這也適合做個人消費品,可以這么說帖上華為的標簽,價錢就能漲一點。

但是各種設備,這里可以統稱為AIOT物聯網設備,里面運行的程序千奇百怪,維護成本很高,這么多設備,里面如果有軟件共性的東西抽取出來一個核心,把這個核心做好,那么這些設備就不容易出問題,還容易維護,關鍵還能相互通信,因為有了共同的基礎OS。那么這個核心就是“微內核”LiteOS,把最基礎OS的組件放入LiteOS,大家共用,這其實是軟件領域一種“抽象”的概念。

計算機科學中遇到的所有問題都可通過增加一層抽象來解決。

抽象的優點在于它讓上層以較小的代價獲得所需的功能,并同時可以提供一些保護。但抽象同時也是一種限制,會喪失一些應有的靈活性。

比如,當你在考慮在項目中應該使用哪個函數庫的時候,就常常需要這方面的權衡:過多的抽象和過少的抽象自然都是不合適的。理解應用的需求也很重要。

一個能合理滿足應用需求的操作系統設計是操作系統設計者需要深入考慮的問題。這也是一種權衡,過多的服務功能和過少的服務功能自然都是不合適的。實際上,我們通過應用程序的特征需求來判斷操作系統需要什么程度的抽象和功能。

軟件抽象的直接結果就是導致“模塊化”和“分層”,從軟件框架圖里面可以看出來:

b71c06f8-6475-11ed-8abf-dac502259ad0.png

LiteOS的特點:輕量級(內核小于10k)、低功耗(1節5號電池最多可以工作5年)。鴻蒙系統可以覆蓋所有的設備,應用在智能設備上,比如攝像頭、門鈴、體溫計等設備。利用軟總線將各個設備連接起來。

1.2 萬法歸一

上面說了抽象出微內核,這還遠遠不夠,不僅底層代碼可以復用,野心更大一點上層代碼也可以在不同產品上復用,真正的“一為萬物,萬物歸一”,修成武林至高秘籍,站在軟件的最高峰。主要由以下概括:

統一OS,彈性部署 一套操作系統,滿足大大小小所有設備的需求,小到耳機,大到車機,智慧屏,手機等,讓不同設備使用同一語言無縫溝通。

硬件互助,資源共享 搭載HarmonyOS 的每個設備都不是孤立的,在系統層讓多終端融為一體,成為“超級終端”,終端之間能力互助共享,帶來無縫協同體驗。

一次開發,多端部署 開發者基于分布式應用框架,寫一次邏輯代碼,就可以部署在多種終端上。

應用自由跨端 HarmonyOS 原子化服務是輕量化服務的新物種,它提供了全新的服務和交互方式,可分可合,可流轉,支持免安裝等特性,能夠讓應用化繁為簡,讓服務觸手可及。

用“簡單”激活你的設備智能 HarmonyOS 是新一代智能終端操作系統。為不同設備的智能化、互聯與協同提供了統一的語言。設備可實現一碰入網,無屏變有屏,操作可視化,一鍵直達原廠服務等全新功能。通過簡單而智能的服務,實現設備智能化產業升級。

這種大一統的思想,怎么感覺這么熟悉,好像就是中國人骨子里面的“大一統”,我們要搞中央集權,要集中力量辦大事,不允許分裂,吸納包容擴大自己,看來中國人也善于干這個事情。。。

1.3 分層誕生了軟總線

b78ad916-6475-11ed-8abf-dac502259ad0.png

華為提出了“分布式軟總線”,是不是覺得這個名字很高大上,事實證明一個高大上的名字非常的重要,特別是需要對外宣傳的東西,或者是一個老的技術在一個新領域的應用,足可以用高大上的名字去新的領域忽悠一波。分布式軟總線的實質就是“通信”,其實就是一個通信協議,但是名字叫“XXX協議”,那不是爛大街了,你說很牛逼,原來就個這玩意,都沒人信。

不同設備間的通信,最常見的就是OSI七層協議模型,學過《計算機網絡》的都清楚。這里出現了一個不按套路出牌的,基于萬物互聯的需求,覺得七層太復雜了,需要簡化,直接砍掉三層七層變四層,然后改進下適應自己的需求,也算是創新,如下圖:

b7af4134-6475-11ed-8abf-dac502259ad0.png

全場景設備間可以基于軟總線完成設備虛擬化、跨設備服務調用、多屏協同、文件分享等分布式業務。分布式軟總線的典型特征

自動發現/即連即用

高帶寬

低時延

高可靠

開放/標準

將中間的四層協議棧精簡為一層提升有效載荷,有效傳輸帶寬提升20%。極簡協議在傳統網絡協議的基礎上進行增強:

流式傳輸:基于UDP實現數據的保序和可靠傳輸;

雙輪驅動:顛覆傳統TCP每包確認機制;

不懼網損:摒棄傳統滑動窗口機制,丟包快速恢復,避免阻塞;

不懼抖動:智能感知網絡變化,自適應流量控制和擁塞控制;

總結下,就是參考《計算機組成原理》里面硬件總線的概念,受到啟發,然后把《計算機網絡》里面的七層模型改四層用起來,最后再根據業務需求做一些修正,滿足不同的需求??粗孟窈唵?,其實從技術創新角度已經算挺大創新了,特別是能工程應用。最近看馬斯克吐槽發論文大多沒用,能工程實踐特別是利用基礎理論,才是一種更有益的創新吧。

1.4 軟件框架介紹

b7d63866-6475-11ed-8abf-dac502259ad0.png

上面放過這個圖,解釋鴻蒙的特性。下面具體看下: 內核層 內核子系統:采用多內核(Linux內核或者LiteOS)設計,支持針對不同資源受限設備選用適合的OS內核。內核抽象層(KAL,KernelAbstract Layer)通過屏蔽多內核差異,對上層提供基礎的內核能力,包括進程/線程管理、內存管理、文件系統、網絡管理和外設管理等。

驅動子系統:驅動框架(HDF)是系統硬件生態開放的基礎,提供統一外設訪問能力和驅動開發、管理框架。

系統服務層

系統服務層是OpenHarmony的核心能力集合,通過框架層對應用程序提供服務。該層包含以下幾個部分: 系統基本能力子系統集:為分布式應用在多設備上的運行、調度、遷移等操作提供了基礎能力,由分布式軟總線、分布式數據管理、分布式任務調度、公共基礎庫、多模輸入、圖形、安全、AI等子系統組成。

基礎軟件服務子系統集:提供公共的、通用的軟件服務,由事件通知、電話、多媒體、DFX(Design For X) 等子系統組成。

增強軟件服務子系統集:提供針對不同設備的、差異化的能力增強型軟件服務,由智慧屏專有業務、穿戴專有業務、IoT專有業務等子系統組成。

硬件服務子系統集:提供硬件服務,由位置服務、用戶IAM、穿戴專有硬件服務、IoT專有硬件服務等子系統組成。

根據不同設備形態的部署環境,基礎軟件服務子系統集、增強軟件服務子系統集、硬件服務子系統集內部可以按子系統粒度裁剪,每個子系統內部又可以按功能粒度裁剪。

框架層

框架層為應用開發提供了C/C++/JS等多語言的用戶程序框架和Ability框架,適用于JS語言的ArkUI框架,以及各種軟硬件服務對外開放的多語言框架API。根據系統的組件化裁剪程度,設備支持的API也會有所不同。

應用層

應用層包括系統應用和第三方非系統應用。應用由一個或多個FA(Feature Ability)或PA(ParticleAbility)組成。其中,FA有UI界面,提供與用戶交互的能力;而PA無UI界面,提供后臺運行任務的能力以及統一的數據訪問抽象?;贔A/PA開發的應用,能夠實現特定的業務功能,支持跨設備調度與分發,為用戶提供一致、高效的應用體驗。

1.5 鴻蒙微內核LiteOS介紹

b80a4bba-6475-11ed-8abf-dac502259ad0.png

上面是HuaweiLiteOS架構框圖,操作系統是一個大的概念,其中包含了內核,鴻蒙的內核就是LiteOS,但是內核有時也單獨叫一個操作系統,大家知道就可以。LiteOS基礎內核:包括不可裁剪的極小內核和可裁剪的其他模塊。極小內核包含任務管理、內存管理、中斷管理、異常管理和系統時鐘??刹眉舻哪K包括信號量、互斥鎖、隊列管理、事件管理、軟件定時器等。

對于微內核,由于用MMU(內存管理單元)對進程空間(內存區域)做了隔離保護,沒有授權的進程是無法訪問其他進程的空間。這就阻止了惡意程序對其他進程數據的竊取。在微內核的管理下,因為MMU的封鎖過于嚴格,用戶進程要存儲一個東西,必須請求內核,使用內核的IPC進行進程間的通信。

Linux是宏內核,大量數據處理是通過系統調用這個問題不突出,但是微內核的IPC實在是“傷不起”,就這樣微內核一直被Linux這種宏內核吊打。學界想了很多辦法,L4提出了一個Fast IPC的辦法,只要你IPC通訊沒數據,可以借用CPU核心寄存器的辦法傳遞消息,速度大大加快。也有人想到了dIPC, directIPC。

用標簽內存的辦法進行隔離,傳遞數據,無需通過內核空間。大大加快了通訊速度。但標簽內存不符合現在計算機體系的架構,實踐中,采用的可能性較小。

上交的陳海波教授團隊,19年想了兩個辦法進行IPC的加速。一個是XPC,一個是Skybridge。其中XPC是硬件,增加了一點點CPU硬件修改,使得IPC通訊無需內核的參與,也無需數據拷貝;Skybridge,采用的是雙內核,一個RootKernel,類似type-1的虛化,專門負責IPC數據通訊,上層的Kernel為微內核。這樣IPC繞過了MMU 機制,也不會對微內核之上的MMU保護機制產生破壞。在IPC通訊的時候,無內核參與,無需拷貝。

b836ff8e-6475-11ed-8abf-dac502259ad0.png

再來看看Android的架構。Android因為采用了非常多的服務,不同于普通的應用,非常依賴于IPC通訊。為了提高速度,開發出了 IPC Binder Drivers 來加速 Linux下的IPC通訊。但效果不是太理想。XPC對BinderIPC的加速有50多倍。

SkyBridge和dIPC處于同一性能級別,XPC則更高。從論文上看,SkyBridge更實用一些,未來XPC還需要繼續依賴于硬件的革新。

1.6 風口汽車上的鴻蒙應用

b896f358-6475-11ed-8abf-dac502259ad0.png

按照之前說的萬物歸一,那華為拿“鴻蒙”這大殺器,哪里有風口,就往哪里用啊。特別是汽車,簡直太適合“鴻蒙”系統了,可以說比手機都適合。

車機鴻蒙 OS 對生態端和硬件端均實現極為強勁的支持。

1)鴻蒙 OS 車機系統在生態 上可以對接華為原生應用和應用商城,對車企支持儀表應用、OEM 應用等;

2)鴻蒙 OS 車機系統可以支持一芯多屏、多并發、分布式外設、車載網絡&多部件協同等特性。

鴻蒙 OS 基于微內核,兼具 QNX Android 的優點,尤其國內華為服務支持在后端生 態適配上更有優勢。QNX 是最為老牌的車載操作系統,作為微內核系統,QNX 提供較高的安全性、穩定性和實時性,但對生態支持較差。Andorid 與之相反,生態上有現成的手機生態做支撐,但在安全穩定性較差,無法支持儀表。

Linux 易于剪裁開發, 大眾 VW.OS 和特斯拉 Version 均基于 Linux,特斯拉 Version 也直接支持使用 Linux 運行儀表軟件,但 Linux 生態較弱。鴻蒙 OS 采用微內核,對于分布式產品只需要較少硬件資源就可以支持,響應速度較快,可以支持儀表等高實時穩定要求的部件工作。

2. 代碼下載編譯

2.1 代碼下載

repo init -u https://gitee.com/openharmony/manifest.git-b master --no-repo-verify
repo sync-c
repo forall -c'git lfs pull'
repo sync -j1 --fail-fast
2.2 編譯環境搭建

每次都搞編譯環境,很麻煩,有個個簡單的方法就是使用Docker,華為提供了Docker環境。Docker 是一個用于開發,交付和運行應用程序的開放平臺,相當于直接擁有了別人配置好的一個環境。

Docker 使您能夠將應用程序與基礎架構分開,從而可以快速交付軟件。借助 Docker,您可以與管理應用程序相同的方式來管理基礎架構。

通過利用 Docker 的方法來快速交付,測試和部署代碼,您可以大大減少編寫代碼和在生產環境中運行代碼之間的延遲。
curl -fsSL https://get.docker.com
| bash -s docker --mirror Aliyun
docker pull
swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0

進入源碼根目錄執行如下命令,從而進入Docker構建環境。ubuntu下執行:

dockerrun-it-v$(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0
b8d3a686-6475-11ed-8abf-dac502259ad0.png

2.3 編譯運行

進入Docker后,就像你擁有了一臺別人已經配置好的環境的電腦。

執行如下命令進行配置:
hb set
b8f9ce1a-6475-11ed-8abf-dac502259ad0.png

用上下箭頭選擇qemu_mini_system_demo并回車。 執行如下編譯命令:
hb build -f
查看編譯結果:

b921d068-6475-11ed-8abf-dac502259ad0.png

運行:

./qemu-run

b957797a-6475-11ed-8abf-dac502259ad0.png

從上面log可以看到系統啟動后,會啟動網絡協議棧tcpio,然后進入shlll,最后自動執行了Test程序。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Liteos
    +關注

    關注

    10

    文章

    32

    瀏覽量

    47407
  • hdc
    hdc
    +關注

    關注

    1

    文章

    40

    瀏覽量

    3479
  • AIoT芯片
    +關注

    關注

    0

    文章

    31

    瀏覽量

    3769

原文標題:HarmonyOS入門-簡介和代碼編譯

文章出處:【微信號:OS與AUTOSAR研究,微信公眾號:OS與AUTOSAR研究】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    鴻蒙開發【編譯構建】講解

    編譯構建是將應用/服務的源代碼、資源、第三方庫等,通過編譯工具轉換為可直接在硬件設備上運行的二進制機器碼,然后再將二進制機器碼封裝為HAP/APP軟件包,并為HAP/APP包進行簽名的
    發表于 02-27 17:41

    【AWTK開源智能串口屏方案】HMI端程序移植編譯運行

    本篇文章介紹一下AWTK開源智能串口屏方案的串口屏端(即HMI端)的編譯運行步驟,并介紹如何將HMI端移植到Linux或STM32平臺或RTOS平臺,以及如何配置資源文件。引言:AWTK-HMI
    的頭像 發表于 01-18 08:24 ?356次閱讀
    【AWTK開源智能串口屏方案】HMI端程序移植<b class='flag-5'>編譯</b>及<b class='flag-5'>運行</b>

    python軟件怎么運行代碼

    Python是一種高級編程語言,它被廣泛用于開發各種類型的應用程序,從簡單的腳本到復雜的網絡應用和機器學習模型。要運行Python代碼,您需要一個Python解釋器,它可以將您的代碼翻譯成計算機可以
    的頭像 發表于 11-28 16:02 ?582次閱讀

    python如何換行而不運行代碼

    和可讀性。 在Python中,可以使用兩個主要的方法進行換行:使用反斜杠()和使用圓括號(())。 第一種方式是使用反斜杠()來表示換行。在Python中,反斜杠是一個轉義字符,它可以用于將一行代碼分成多行來書寫。當編譯器遇到反斜杠時,它
    的頭像 發表于 11-24 09:50 ?1877次閱讀

    python如何換行而不運行代碼

    在Python中,換行是一種用來增加代碼的可讀性和組織性的方式。當你在編寫Python代碼時,換行通常用于分隔不同的代碼行或塊,使其更易于閱讀和理解。然而,并非所有的換行都會運行
    的頭像 發表于 11-22 10:52 ?1451次閱讀

    python怎樣運行代碼

    討論Python代碼運行方式,包括解釋器、交互式環境和命令行。 Python代碼可以通過兩種主要的方式運行:解釋執行和編譯執行。解釋執行是
    的頭像 發表于 11-22 10:31 ?697次閱讀

    如何在虛擬機上運行c源代碼

    。安裝和設置過程會有很多指導,按照指示完成設置。 安裝C編譯器 在虛擬機上運行C源代碼,首先需要安裝一個C編譯器。通常使用的C編譯器有GCC
    的頭像 發表于 11-17 10:16 ?2156次閱讀

    linux虛擬機怎么運行代碼

    運行代碼是Linux虛擬機中的常見操作,本文將詳細介紹如何運行代碼。 首先,要運行代碼,你需要先
    的頭像 發表于 11-17 10:12 ?2788次閱讀

    互鎖正反轉電路運行原理講解

    這是我們經??吹降幕ユi正反轉電路,今天給大家講解一下它的運行原理。
    的頭像 發表于 11-08 17:35 ?1111次閱讀
    互鎖正反轉電路<b class='flag-5'>運行</b>原理<b class='flag-5'>講解</b>

    講解MATLAB/Simulink HDL使用入門

    我們將使用實例講解MATLAB / Simulink HDL 使用入門。
    的頭像 發表于 11-06 09:12 ?740次閱讀
    <b class='flag-5'>講解</b>MATLAB/Simulink HDL使用<b class='flag-5'>入門</b>

    C語言的編譯鏈接過程

    ? C語言的編譯鏈接過程要把我們編寫的一個C程序源代碼轉換成可以在硬件上運行的程序(可執行代碼),需要進行編譯和鏈接。
    的頭像 發表于 08-21 10:06 ?1657次閱讀
    C語言的<b class='flag-5'>編譯</b>鏈接過程

    HarmonyOS NEXT新能力,一站式高效開發HarmonyOS應用

    更復雜應用開發。首先HarmonyOS支持大型應用模塊化開發,并且支持通過輕量化應用組件,減少運行資源占用。同時,通過ArkUI跨平臺框架的能力,可以實現一次開發, 多平臺運行,高度復用代碼
    發表于 08-14 15:08

    C語言的編譯過程

    C語言的編譯鏈接過程要把我們編寫的一個C程序源代碼,轉換成可以在硬件上運行的程序(可執行代碼),需要進行編譯和鏈接。過程圖解如下。
    發表于 06-25 10:36 ?296次閱讀
    C語言的<b class='flag-5'>編譯</b>過程

    Linux內核的編譯運行

    想讓Linux內核代碼跑起來,得先搭建編譯運行代碼的環境。
    發表于 06-23 11:56 ?389次閱讀
    Linux內核的<b class='flag-5'>編譯</b>和<b class='flag-5'>運行</b>

    HarmonyOS元服務端云一體化開發快速入門(上)

    大小不能超過10MB。 三、配置工程信息 1.在工程配置界面,配置工程的基本信息。 點擊“Next”,開始關聯云開發資源。 *附件:HarmonyOS元服務端云一體化開發快速入門(上).docx
    發表于 06-14 17:10
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>