致敬華為
本書是一部關(guān)于OpenHarmony操作系統(tǒng)的技術(shù)類書籍,但是在全書的開始,筆者希望加入一些與技術(shù)關(guān)系不那么直接的內(nèi)容,這些內(nèi)容對我們理解OpenHarmony所采用的技術(shù)方案以及發(fā)展方向至關(guān)重要。
1.大時代
當(dāng)前,世界正經(jīng)歷著第四次產(chǎn)業(yè)革命。與以往三次產(chǎn)業(yè)革命不同,這次革命以信息技術(shù)為主導(dǎo),但又滲入生產(chǎn)生活的方方面面,進(jìn)一步重構(gòu)社會生產(chǎn)力和生產(chǎn)關(guān)系。
在這次產(chǎn)業(yè)革命當(dāng)中,以5G為主的通信技術(shù),將終端通信速度從M時代過渡到G時代,連接時延縮短到毫秒級。在這次產(chǎn)業(yè)革命當(dāng)中,AI將起到無可替代的作用,人與機(jī)器的關(guān)系將被重塑,人與機(jī)器的編程接口將徹底改變。在這次產(chǎn)業(yè)革命當(dāng)中,以云和大數(shù)據(jù)為主要特征的數(shù)據(jù)存儲技術(shù)將得到全面普及,數(shù)據(jù)將成為全社會的生產(chǎn)要素之一。在這次產(chǎn)業(yè)革命當(dāng)中,以區(qū)塊鏈為代表的交易技術(shù),可能會對商業(yè)邏輯進(jìn)行徹底的顛覆,人們將擁有新的建立信任的方式。
這些深刻的變化是同時發(fā)生的,國與國,政府與政府,大型機(jī)構(gòu)與大型機(jī)構(gòu)之間的關(guān)系,可能會因此發(fā)生根本性的變化。在某種意義上,我們正生活在人類歷史上少有的大時代。
2.中國面臨的挑戰(zhàn)
對于中國而言,深入?yún)⑴c甚至是主導(dǎo)這次產(chǎn)業(yè)革命已經(jīng)是定局。我們不再是旁觀者,這是第四次產(chǎn)業(yè)革命對于我們來說的不同。
從技術(shù)實(shí)力上講,經(jīng)過長時間的高速發(fā)展,我們國家在很多領(lǐng)域已經(jīng)做到了世界先進(jìn)水平,甚至在部分領(lǐng)域做到了領(lǐng)先。我們擁有了非常龐大的IT技術(shù)隊(duì)伍,人員的數(shù)量和質(zhì)量都是全世界首屈一指的。硬件領(lǐng)域,我們國家已經(jīng)是全世界電子產(chǎn)品的設(shè)計(jì)和制造中心,我國已經(jīng)是全世界的智能手機(jī)和個人電腦生產(chǎn)國。但在一些核心部件如CPU、內(nèi)存、閃存等方面,還與世界水平存在明顯的差距,甚至有些差距并沒有逐年縮小。軟件領(lǐng)域,我們的移動支付以及即時消息系統(tǒng),都是全世界使用人數(shù)多的,體驗(yàn)也是的。但一直以來,軟件技術(shù)皇冠上的四顆明珠操作系統(tǒng)、數(shù)據(jù)庫、編譯器和編程語言,還一直沒有完成突破。通信領(lǐng)域,以華為為首的中國通信制造企業(yè)大軍,已經(jīng)橫掃了整個世界。尤其是在5G領(lǐng)域,我們已經(jīng)成為標(biāo)準(zhǔn)的核心貢獻(xiàn)者,缺少中國企業(yè)參與的5G標(biāo)準(zhǔn)已經(jīng)不可想象。
以美國為首的西方社會已經(jīng)意識到這一現(xiàn)實(shí),因此采取了各種手段進(jìn)行貿(mào)易及技術(shù)保護(hù),如利用控制技術(shù)輸出、政府干預(yù)、散布中國企業(yè)信息安全謠言等非正常手段對中國企業(yè)進(jìn)行打壓。
3.發(fā)展之路
借助第四次工業(yè)革命,實(shí)現(xiàn)對水平的整體追趕至是超越,應(yīng)該是所有IT從業(yè)人員的使命和機(jī)遇。往前走,已經(jīng)不能再滿足于模仿與集成,必須實(shí)現(xiàn)獨(dú)立自主研發(fā)。而且單個器件或者單個系統(tǒng)的自主研發(fā)也不足夠,經(jīng)常存在被卡脖子的風(fēng)險(xiǎn)。所以如何打造一整套的、完整的國產(chǎn)自研產(chǎn)業(yè)鏈,已經(jīng)不是一個選擇題,而是一個必答題。
自研也并非閉門造車的研發(fā),技術(shù)永遠(yuǎn)要與市場接軌才具有現(xiàn)實(shí)生命力。因此,如何整合國內(nèi)所有的研發(fā)資源,包括大學(xué)、企業(yè)、民間資源,打造優(yōu)秀的軟、硬件產(chǎn)品,面向國內(nèi)日益成長的龐大消費(fèi)市場,推出用戶體驗(yàn)優(yōu)秀的產(chǎn)品,形成繁榮的產(chǎn)業(yè)鏈,是一個值得深入探討的話題。
4.向華為致敬
華為一直是一家以技術(shù)立命的企業(yè),公司研發(fā)投入持續(xù)超過年收入的10%。華為的研發(fā)經(jīng)過多年的積累,已經(jīng)在一些領(lǐng)域達(dá)到了的水平,進(jìn)入了無人區(qū),開始引領(lǐng)發(fā)展潮流,比如在5G領(lǐng)域,繞開華為發(fā)展5G在事實(shí)上是不可能的。華為于2010年前后開始發(fā)展智能手機(jī)產(chǎn)品,是批采用Android的手機(jī)廠商。從2012年起,華為開始逐步建立完整的技術(shù)平臺,包括海思麒麟系列芯片。至2019年,華為手機(jī)歷史性地占據(jù)了全球出貨量第二的市場地位。
就在此時,華為遭到了美國政府的制裁。盡管華為并不愿意,但她成了貿(mào)易戰(zhàn)的焦點(diǎn),也成了全世界的焦點(diǎn)。其中對華為手機(jī)打擊的,就是谷歌公司拒華為授權(quán)GMS,沒有GMS支持的華為手機(jī),無法再為國外用戶提供常用的一系列應(yīng)用,其他非GMS應(yīng)用也因?yàn)闊o法采用谷歌登錄而無法用在華為手機(jī)上,這直接導(dǎo)致華為手機(jī)在海外的銷售陷入了徹底的困境。更為嚴(yán)重的是,2020年5月16日,美國政府商務(wù)部對華為實(shí)施了更為嚴(yán)格的禁令,禁止一切使用美國技術(shù)和美國軟件的芯片加工企業(yè),如臺積電向華為供貨,這直接導(dǎo)致了華為手機(jī)無芯片可用。美國對華為所實(shí)施的制裁可以用下面一張圖來匯總:
毫不夸張地說,同樣的制裁換到其他的企業(yè)身上,可能會導(dǎo)致企業(yè)一蹶不振,但華為頑強(qiáng)地面對制裁,奮發(fā)圖強(qiáng),補(bǔ)齊自己的短板、漏洞,一個個備胎計(jì)劃都逐步啟用,確保了業(yè)務(wù)的連續(xù)性。
5.OpenHarmony與HarmonyOS
本書所要介紹的OpenHarmony及其華為發(fā)行版HarmonyOS操作系統(tǒng),就是華為面對谷歌的GMS禁用,以及潛在的操作系統(tǒng)斷供所推出的至關(guān)重要的一個平臺。
OpenHarmony由華為主導(dǎo)研發(fā),后來作為開源代碼捐贈給了開放原子基金會。OpenHarmony包含了華為十余年來對手機(jī)操作系統(tǒng)的研究與開發(fā)積累;包含了華為對未來的萬物互聯(lián)的新時代的思考;包含了華為對操作系統(tǒng)相關(guān)的新技術(shù)的探索。而華為基于OpenHarmony開發(fā)的HarmonyOS,作為一個企業(yè)發(fā)行版,將成為華為手機(jī)等產(chǎn)品從今以后的操作系統(tǒng),可以說是華為在消費(fèi)者產(chǎn)品領(lǐng)域未來十到二十年內(nèi)的核心平臺。
OpenHarmony不僅對于華為有著重要的意義,也是華為對中國軟件產(chǎn)業(yè)的杰出貢獻(xiàn)。OpenHarmony可能很快就是現(xiàn)網(wǎng)裝機(jī)量的國產(chǎn)操作系統(tǒng)。華為的手機(jī)、電腦、電視、可穿戴等消費(fèi)產(chǎn)品,為OpenHarmony提供了天生的生態(tài)圈;OpenHarmony的百萬代碼級開源毫無疑問是中國開源軟件史上的一件大事;圍繞OpenHarmony將聚集起中國一大批優(yōu)秀的開發(fā)人員,為中國軟件業(yè)培養(yǎng)大量的人才。
6.本書的局限
編寫本書的挑戰(zhàn)在于,OpenHarmony是一個不斷發(fā)展變化的系統(tǒng),可能每個月都有新的特性開發(fā)出來,每個月都有新的發(fā)展動向。而一本書只能根據(jù)下筆之時的狀態(tài)來寫作,這是一個無法回避的現(xiàn)實(shí)問題。因此,當(dāng)您拿到這本書時會發(fā)現(xiàn),OpenHarmony的版本可能包含了一些本書尚未涉及的部分內(nèi)容,盡管這對已有內(nèi)容的學(xué)習(xí)基本不會有影響,但在此我還是需向您表示歉意。
后續(xù)當(dāng)OpenHarmony進(jìn)一步開源或HarmonyOS手機(jī)版本進(jìn)一步演進(jìn)之時,我們將以合適的形式對相關(guān)內(nèi)容進(jìn)行補(bǔ)充并分享給大家。
7.特別感謝
本書在編寫過程中,得到了深鴻會社區(qū)的廣泛支持,尤其是候鵬飛和楊澤霖兩位。本書的LiteOS-m模擬器章節(jié)參考了候鵬飛的相關(guān)分享內(nèi)容,HDF章節(jié)中的溫濕度傳感器驅(qū)動參考了楊澤霖的代碼庫。在此向二位表示特別的感謝。
致敬華為
第1篇 OpenHarmony操作系統(tǒng)基礎(chǔ)
第1章 OpenHarmony的設(shè)計(jì)目標(biāo) 2
1.1 為5G而準(zhǔn)備 2
1.2 覆蓋廣泛的硬件產(chǎn)品 2
1.3 必須要解決的問題 3
1.4 競爭對手 4
第2章 整體設(shè)計(jì)思路及技術(shù)特點(diǎn) 5
2.1 可裁剪 5
2.2 虛擬超級終端 6
2.3 易開發(fā) 7
第3章 OpenHarmony的功能框架 9
3.1 芯片適配 10
3.2 內(nèi)核層 10
3.3 驅(qū)動程序框架 10
3.4 OpenHarmony系統(tǒng)服務(wù) 10
3.5 框架層 10
3.6 編譯構(gòu)建與IDE系統(tǒng) 11
第4章 上手OpenHarmony 12
4.1 OpenHarmony系統(tǒng)的基本構(gòu)成 12
4.2 OpenHarmony Shell 15
4.3 啟動圖形界面 28
4.4 開源代碼項(xiàng)目 29
4.5 編譯構(gòu)建體系 31
4.5.1 所用到的工具 31
4.5.2 系列Python腳本的作用 32
4.5.3 編譯器 34
第5章 內(nèi)核介紹 36
5.1 多內(nèi)核架構(gòu) 36
5.2 LiteOS-m 37
5.3 LiteOS-a 38
5.4 LiteOS-m和LiteOS-a的對比 38
第6章 OpenHarmony內(nèi)核詳細(xì)解讀 40
6.1 硬件與處理器架構(gòu) 40
6.1.1 處理器架構(gòu) 40
6.1.2 異常 41
6.1.3 中斷 42
6.1.4 多核處理 43
6.2 基礎(chǔ)數(shù)據(jù)結(jié)構(gòu) 44
6.2.1 雙向鏈表 44
6.2.2 排序雙向鏈表 46
6.3 啟動流程 46
6.4 時間管理 47
6.4.1 系統(tǒng)Tick 47
6.4.2 軟件定時器 48
6.5 任務(wù)調(diào)度 49
6.5.1 LiteOS-m與LiteOS-a的調(diào)度對比 49
6.5.2 TCB/PCB結(jié)構(gòu)定義 50
6.5.3 進(jìn)程及Task創(chuàng)建 54
6.5.4 Task狀態(tài)機(jī) 64
6.5.5 調(diào)度策略 65
6.5.6 調(diào)度的時機(jī) 68
6.5.7 Task切換的實(shí)現(xiàn) 69
6.6 進(jìn)程間通信 74
6.6.1 事件(event) 74
6.6.2 互斥量(mutex) 76
6.6.3 隊(duì)列(queue) 79
6.6.4 信號燈(semaphore) 79
6.6.5 快速鎖(futex) 81
6.6.6 自旋鎖(spinlock) 81
6.6.7 信號(signal) 83
6.6.8 LiteIPC 85
6.7 內(nèi)存管理 89
6.7.1 LiteOS-m的內(nèi)存管理 90
6.7.2 LiteOS-a的內(nèi)存管理 91
6.7.3 虛擬內(nèi)存 92
6.7.4 地址規(guī)劃 97
6.8 內(nèi)核態(tài)與用戶態(tài) 98
6.8.1 內(nèi)核態(tài)與用戶態(tài)的區(qū)別 98
6.8.2 用戶態(tài)切換到內(nèi)核態(tài) 99
6.8.3 內(nèi)核態(tài)訪問用戶態(tài)數(shù)據(jù) 102
6.9 標(biāo)準(zhǔn)庫 103
6.9.1 CMSIS標(biāo)準(zhǔn)庫 103
6.9.2 Libc標(biāo)準(zhǔn)庫 106
6.10 文件系統(tǒng) 110
6.10.1 VFS 110
6.10.2 NFS 118
6.10.3 RAMFS 118
6.11 網(wǎng)絡(luò)連接 119
6.12 OTA 120
6.12.1 OpenHarmony升級包制作工具 121
6.12.2 OTA函數(shù) 121
第7章 HDF驅(qū)動程序框架 123
7.1 基本概念 124
7.2 HDF編程特點(diǎn) 125
7.2.1 HdfObject 135
7.2.2 IDeviceIoService 136
7.2.3 HdfDriverEntry 136
7.3 驅(qū)動代碼編譯鏈接 136
7.4 驅(qū)動程序配置文件HCS 137
7.4.1 樹型結(jié)構(gòu) 138
7.4.2 保留字與操作符 139
7.4.3 數(shù)值類型 139
7.4.4 重載操作 140
7.4.5 文件引用 142
7.4.6 HC-GEN編譯器 142
7.5 加載驅(qū)動程序 143
7.6 注冊驅(qū)動服務(wù) 145
7.7 內(nèi)核抽象層OSAL 146
7.8 注冊VFS 147
7.9 用戶態(tài)使用驅(qū)動程序HDI 147
第8章 服務(wù)框架 151
8.1 基礎(chǔ)數(shù)據(jù)結(jié)構(gòu) 152
8.1.1 向量(Vector) 152
8.1.2 服務(wù)(Service) 153
8.1.3 特性(Feature) 154
8.1.4 IUnknown接口 154
8.1.5 標(biāo)識(Identity) 156
8.2 服務(wù)框架啟動過程 156
8.3 服務(wù)/特性注冊與發(fā)現(xiàn) 158
8.3.1 服務(wù)/特性注冊 159
8.3.2 服務(wù)/特性發(fā)現(xiàn) 164
8.4 異步調(diào)用 164
8.5 跨進(jìn)程服務(wù)/特性調(diào)用 165
8.5.1 跨進(jìn)程調(diào)用的使用 165
8.5.2 跨進(jìn)程調(diào)用的實(shí)現(xiàn) 167
第9章 用戶程序框架 170
9.1 Ability 170
9.2 Ability與Task 171
9.3 Ability與UI 174
9.4 Ability加載器 175
9.5 AppSpawn 176
9.6 Ability管理服務(wù) 177
9.6.1 啟動Ability 180
9.6.2 終止Ability 181
9.6.3 連接Ability 182
9.7 Ability管理命令行工具 183
9.7.1 嵌入式設(shè)備的aa命令 183
9.7.2 大內(nèi)核設(shè)備的aa命令 183
第10章 輕量化UI圖形棧 185
10.1 輕量化UI圖形子系統(tǒng)的架構(gòu) 185
10.2 模塊介紹 186
10.3 圖形組件 187
10.4 配置文件 188
10.5 圖形子系統(tǒng)初始化流程 188
10.6 輸入事件處理 190
10.7 屏幕設(shè)備處理 192
10.8 窗口管理器 194
第11章 包管理 195
11.1 包管理系統(tǒng)架構(gòu) 195
11.2 包管理命令行工具 196
11.2.1 嵌入式設(shè)備的bm命令 196
11.2.2 大內(nèi)核設(shè)備的bm命令 197
第12章 ACE編程框架 198
12.1 ACE的整體架構(gòu) 198
12.2 如何使用ACE 200
第13章 OpenHarmony分布式 201
13.1 分布式操作系統(tǒng)基礎(chǔ)概念 201
13.2 OpenHarmony分布式總體設(shè)計(jì)思想 203
13.3 分布式軟總線 203
13.4 分布式文件系統(tǒng) 204
13.5 分布式數(shù)據(jù)庫 206
13.6 分布式調(diào)度 209
第14章 OpenHarmony與其他操作系統(tǒng)的對比 212
14.1 與iOS和安卓的對比 212
14.2 與其他嵌入式操作系統(tǒng)的對比 213
第2篇 OpenHarmony編程實(shí)踐
第15章 可裁剪的OpenHarmony 216
15.1 OpenHarmony的可裁剪設(shè)計(jì) 216
15.2 內(nèi)核與驅(qū)動 217
15.3 系統(tǒng)基礎(chǔ)服務(wù)裁剪 220
15.4 應(yīng)用程序框架裁剪 220
15.5 hpm軟件包管理工具 220
15.5.1 安裝hpm 221
15.5.2 使用hpm 221
15.5.3 包配置文件 222
第16章 北向應(yīng)用開發(fā) 226
16.1 北向IDE 226
16.1.1 安裝DevEco Studio 226
16.1.2 主界面介紹 229
16.1.3 工程管理 230
16.1.4 代碼編輯 237
16.1.5 編譯 239
16.1.6 調(diào)試 245
16.1.7 發(fā)布 248
16.2 JS框架的編程 248
16.2.1 JS框架的.hml文件編程 248
16.2.2 JS框架的.css文件編程 250
16.2.3 JS框架的.js文件編程 250
16.3 基于Java的編程 251
16.4 混合編程 251
16.4.1 ServiceAbility需要完成的工作 253
16.4.2 JS PageAbility調(diào)用的過程 255
16.5 北向編程實(shí)例 256
第17章 L0-L1南向驅(qū)動程序及設(shè)備開發(fā) 257
17.1 南向IDE介紹 257
17.1.1 安裝DevEco Device Tool 257
17.1.2 主界面介紹 258
17.1.3 工程管理 259
17.1.4 獲取代碼 259
17.1.5 編譯構(gòu)建 260
17.1.6 燒錄 261
17.1.7 Virtual Box環(huán)境配置 262
17.1.8 HDF驅(qū)動代碼生成 264
17.2 南向開發(fā)環(huán)境搭建 265
17.3 南向編程實(shí)例驅(qū)動程序開發(fā) 270
17.3.1 實(shí)現(xiàn)驅(qū)動程序 270
17.3.2 注冊驅(qū)動 273
17.3.3 修改HCS配置 273
17.3.4 加入編譯體系 274
第18章 分布式應(yīng)用開發(fā) 275
18.1 分布式應(yīng)用開發(fā)的基本概念 275
18.1.1 面向虛擬超級終端編程 275
18.1.2 分布式體驗(yàn)設(shè)計(jì)的基本原則 276
18.2 手機(jī)上的分布式應(yīng)用開發(fā) 276
18.2.1 應(yīng)用背景介紹 277
18.2.2 整體設(shè)計(jì) 277
18.2.3 詳細(xì)代碼 277
第19章 OpenHarmony生態(tài) 288
19.1 OpenHarmony產(chǎn)業(yè)鏈概覽 288
19.2 開源基金組織 291
19.3 OpenHarmony與HMS的關(guān)系 292
19.3.1 華為生態(tài)與OpenHarmony生態(tài) 292
19.3.2 操作系統(tǒng)與SDK 293
19.4 OpenHarmony設(shè)備測試與認(rèn)證 293