沉浸式剖析OpenHarmony源代碼:基于LTS 3.0版本
定 價:138.8 元
- 作者:梁開祝
- 出版時間:2022/12/1
- ISBN:9787115601384
- 出 版 社:人民郵電出版社
- 中圖法分類:TN929.53
- 頁碼:544
- 紙張:
- 版次:01
- 開本:16開
OpenHarmony是由開放原子開源基金會孵化及運營的一個開源項目,是一款由全球開發(fā)者共建的開源分布式操作系統(tǒng)。從推出之日至今,OpenHarmony的發(fā)展愈加迅速,生態(tài)建設(shè)愈加成熟,已經(jīng)成為全球智能終端操作系統(tǒng)領(lǐng)域不可忽視的新生開源力量。
《沉浸式剖析OpenHarmony源代碼:基于LTS 3.0版本》以O(shè)penHarmony LTS 3.0版本的代碼為基礎(chǔ),從OpenHarmony的系統(tǒng)簡介、開發(fā)環(huán)境搭建、編譯流程、系統(tǒng)啟動流程等開始講解,然后逐漸深入到代碼層面,對OpenHarmony中的各個子系統(tǒng)(主要是分布式任務(wù)調(diào)度子系統(tǒng)、分布式通信子系統(tǒng)、驅(qū)動子系統(tǒng))的核心模塊和框架的實現(xiàn)展開細致入微的分析與解讀。本書還提供了相應(yīng)的示例程序、詳盡的日志、相關(guān)的流程圖和數(shù)據(jù)結(jié)構(gòu)關(guān)系圖等,旨在為開發(fā)者深入地理解OpenHarmony中的關(guān)鍵技術(shù)和驅(qū)動框架,提供良好的幫助和參考。
《沉浸式剖析OpenHarmony源代碼:基于LTS 3.0版本》適合系統(tǒng)開發(fā)工程師、設(shè)備驅(qū)動開發(fā)工程師閱讀,也適合對OpenHarmony系統(tǒng)底層運行機制感興趣的開發(fā)者閱讀。
1)深度解析,了解更深入:
本書與市面上已有的HarmonyOS/OpenHarmony應(yīng)用開發(fā)的圖書不同,本書側(cè)重于OpenHarmony系統(tǒng)分析和設(shè)備驅(qū)動開發(fā),是一本深度剖析OpenHarmony運行機制的技術(shù)圖書。
2)內(nèi)容豐富,多方位講解:
以O(shè)penHarmony 3.0版本為基礎(chǔ),從OpenHarmony的開發(fā)環(huán)境搭建、編譯流程、系統(tǒng)啟動流程等基礎(chǔ)部分開始介紹,逐步深入到源代碼層面,對OpenHarmony的核心模塊和框架實現(xiàn)展開細致入微的分析和解讀。
3)多種資源,學習更簡單:
為了降低讀者的學習難度,本書以在線資源的方式,幫助讀者快速了解相關(guān)內(nèi)容
本書適合系統(tǒng)開發(fā)工程師、設(shè)備驅(qū)動開發(fā)工程師和希望深入了解OpenHarmony內(nèi)部運行機制的技術(shù)從業(yè)人員閱讀。
隨書贈送資源:
1)碼云資源倉庫
與本書相關(guān)的示例代碼、日志文檔、流程圖、表和說明文檔等資源
2)博客專欄文章
51CTO與華為HarmonyOS官方共建的開源基礎(chǔ)軟件社區(qū),是開發(fā)者學習和討OpenHarmony的一個很好的平臺。我在社區(qū)上開設(shè)了“鴻蒙系統(tǒng)學習筆記”技術(shù)專欄
本書的勘誤或未來作者對OpenHarmony的學習總結(jié),會在這個專欄上持續(xù)更新
梁開祝,畢業(yè)于四川大學計算機學院計算機科學與技術(shù)專業(yè),擅長Linux底層驅(qū)動開發(fā)、音視頻處理芯片驅(qū)動開發(fā)、HDMI/HDCP領(lǐng)域的驅(qū)動開發(fā)等技術(shù)。曾在OPPO公司藍光事業(yè)部擔任高級驅(qū)動開發(fā)工程師,并全程參與了OPPO全系列藍光播放器的研發(fā)工作。后來因工作調(diào)整,在內(nèi)部轉(zhuǎn)崗到手機研發(fā)部門,負責手機攝像頭的驅(qū)動開發(fā)工作。
第 1章 系統(tǒng)簡介 1
1.1 發(fā)展歷史 1
1.2 技術(shù)特性 2
1.3 前景展望 3
第 2章 搭建開發(fā)環(huán)境 8
2.1 Windows開發(fā)環(huán)境的搭建 9
2.2 拿來即用的Ubuntu開發(fā)環(huán)境 12
2.3 Ubuntu開發(fā)環(huán)境的搭建 12
2.3.1 準備工作 12
2.3.2 修改默認shell 14
2.3.3 安裝依賴工具 15
2.3.4 安裝和配置Python 15
2.3.5 安裝代碼管理工具 17
2.3.6 安裝構(gòu)建編譯工具鏈 17
2.3.7 安裝VSCode及DevEco插件 21
2.4 Linux與Windows之間的文件共享 22
2.4.1 將Windows目錄共享至Linux 22
2.4.2 將Linux目錄共享至Windows 24
2.4.3 遠程登錄Linux虛擬機 25
2.5 獲取代碼 26
2.5.1 代碼分支和版本管理簡介 26
2.5.2 獲取代碼前的準備工作 31
2.5.3 獲取Master分支代碼 33
2.5.4 獲取Release分支代碼 34
2.5.5 獲取Hi3516工程代碼 35
2.5.6 獲取Hi3861工程代碼 38
2.6 編譯代碼 40
2.6.1 編譯代碼前的準備工作 40
2.6.2 編譯Master分支代碼 41
2.6.3 編譯Release分支代碼 44
2.6.4 編譯Hi3516工程代碼 45
2.6.5 編譯Hi3861工程代碼 47
2.6.6 編譯u-boot源代碼 49
2.7 燒錄開發(fā)板 51
2.7.1 開發(fā)板相關(guān)說明 51
2.7.2 燒錄Hi3861開發(fā)板 52
2.7.3 燒錄Hi3516開發(fā)板 55
2.7.4 燒錄u-boot后的處理 63
第3章 系統(tǒng)架構(gòu) 67
3.1 系統(tǒng)架構(gòu)圖 67
3.2 系統(tǒng)目錄結(jié)構(gòu) 70
第4章 構(gòu)建子系統(tǒng) 74
4.1 GN和Ninja的構(gòu)建流程 75
4.2 系統(tǒng)的裁剪和配置 81
4.2.1 系統(tǒng)裁剪 81
4.2.2 增刪子系統(tǒng) 86
4.2.3 增刪組件 87
4.2.4 增刪特性 88
4.3 編譯流程分析 89
4.3.1 全編譯流程 89
4.3.2 增量編譯 93
4.3.3 單獨編譯組件和目標 94
4.4 編譯LiteOS_M內(nèi)核和SDK 95
4.5 編譯LiteOS_A內(nèi)核和shell 97
4.6 編譯相關(guān)的目錄結(jié)構(gòu) 101
4.6.1 小型系統(tǒng)build相關(guān)的文件和目錄結(jié)構(gòu) 101
4.6.2 小型系統(tǒng)out相關(guān)的文件和目錄結(jié)構(gòu) 102
4.6.3 小型系統(tǒng)rootfs相關(guān)的文件和目錄結(jié)構(gòu) 104
4.7 標準系統(tǒng)的編譯流程 105
4.7.1 build和out相關(guān)的文件和目錄結(jié)構(gòu) 105
4.7.2 標準系統(tǒng)的編譯流程 108
4.7.3 Linux內(nèi)核編譯流程 114
4.7.4 單獨編譯部件和模塊 119
第5章 啟動流程 120
5.1 輕量系統(tǒng)(LiteOS_M)的啟動流程 120
5.1.1 第 一階段:BootLoader階段 120
5.1.2 第二階段:匯編語言代碼階段 121
5.1.3 第三階段:C語言代碼階段 122
5.1.4 第四階段:LiteOS SDK啟動階段 123
5.1.5 第五階段:系統(tǒng)框架層啟動階段 124
5.1.6 系統(tǒng)服務(wù)的啟動方式 128
5.2 小型系統(tǒng)(LiteOS_A)的啟動流程 132
5.2.1 第 一階段:BootLoader階段 132
5.2.2 第二階段:匯編語言代碼階段 132
5.2.3 第三階段:C語言代碼階段 133
5.2.4 第四階段:系統(tǒng)框架層啟動階段 140
5.2.5 系統(tǒng)服務(wù)的啟動方式 142
5.2.6 用戶態(tài)根進程的來歷 143
5.3 Linux內(nèi)核系統(tǒng)的啟動流程 145
第6章 子系統(tǒng) 146
6.1 內(nèi)核子系統(tǒng)概述 146
6.1.1 LiteOS_M內(nèi)核概述 146
6.1.2 LiteOS_A內(nèi)核概述 148
6.1.3 Linux內(nèi)核概述 149
6.1.4 KAL和OSAL概述 149
6.2 啟動恢復(fù)子系統(tǒng) 150
6.2.1 啟動引導組件 152
6.2.2 應(yīng)用孵化組件 153
6.2.3 服務(wù)啟動組件 155
6.2.4 系統(tǒng)屬性組件 155
6.3 公共基礎(chǔ)庫子系統(tǒng) 158
6.4 DFX子系統(tǒng) 162
6.4.1 輕量系統(tǒng)的日志組件 162
6.4.2 小型系統(tǒng)的日志組件 174
6.4.3 標準系統(tǒng)的日志組件 182
6.4.4 日志組件的比較 188
6.4.5 init進程的日志 189
6.4.6 驅(qū)動框架的日志 190
6.5 IoT硬件子系統(tǒng) 196
6.5.1 概述和目錄結(jié)構(gòu) 196
6.5.2 設(shè)備驅(qū)動開發(fā)路徑 201
第7章 分布式任務(wù)調(diào)度子系統(tǒng) 208
7.1 系統(tǒng)服務(wù)框架概述 208
7.2 輕量系統(tǒng)的系統(tǒng)服務(wù)框架 214
7.2.1 關(guān)鍵結(jié)構(gòu)體的解析 214
7.2.2 系統(tǒng)服務(wù)的啟動流程 235
7.2.3 面向服務(wù)架構(gòu)的實現(xiàn) 245
7.3 小型系統(tǒng)的系統(tǒng)服務(wù)框架 248
7.3.1 線程/進程及其通信模型 249
7.3.2 系統(tǒng)服務(wù)的啟動流程 257
7.3.3 系統(tǒng)服務(wù)注冊EP的流程 264
7.3.4 服務(wù)管理者的啟動流程 279
7.3.5 客戶端EP與samgr EP的IPC交互 287
7.3.6 客戶端EP與客戶端EP的IPC交互 303
第8章 分布式通信子系統(tǒng) 315
8.1 分布式通信子系統(tǒng)概述 315
8.1.1 概念簡介 315
8.1.2 依賴關(guān)系 316
8.2 WiFi模塊概述 318
8.2.1 輕量系統(tǒng)的WiFi模塊 318
8.2.2 小型系統(tǒng)的WiFi模塊 323
8.2.3 標準系統(tǒng)的WiFi模塊 327
8.2.4 編譯和部署WiFi驅(qū)動 327
8.3 軟總線組件的目錄結(jié)構(gòu) 332
8.3.1 根目錄概述 332
8.3.2 interfaces子目錄 338
8.3.3 adapter子目錄 340
8.3.4 components子目錄 343
8.3.5 sdk子目錄和core子目錄 343
8.4 軟總線組件的適配模塊 344
8.5 軟總線組件的通用模塊 344
8.6 軟總線組件的sdk模塊 347
8.6.1 sdk的編譯和使用 348
8.6.2 sdk的框架模塊:frame 350
8.6.3 sdk的組網(wǎng)模塊:bus_center 354
8.6.4 sdk的發(fā)現(xiàn)模塊:discovery 355
8.6.5 sdk的傳輸模塊:transmission 356
8.7 軟總線組件的核心模塊 359
8.7.1 softbus_server的啟動流程 360
8.7.2 核心的框架模塊:frame 366
第9章 驅(qū)動子系統(tǒng) 371
9.1 驅(qū)動框架概述 371
9.2 通用的驅(qū)動示例程序 374
9.2.1 硬件平臺和原理圖 375
9.2.2 代碼結(jié)構(gòu)和編譯配置 377
9.2.3 通過執(zhí)行程序來驗證效果 385
9.3 驅(qū)動程序的開發(fā)要點 386
9.3.1 用戶態(tài)程序與內(nèi)核態(tài)驅(qū)動的交互 386
9.3.2 驅(qū)動配置信息的管理 386
9.3.3 驅(qū)動程序的實現(xiàn) 399
9.4 驅(qū)動框架的代碼結(jié)構(gòu) 404
9.5 驅(qū)動框架的編譯流程 409
9.5.1 在LiteOS_A內(nèi)核部署驅(qū)動框架 409
9.5.2 在Linux內(nèi)核部署驅(qū)動框架 411
9.5.3 在小型系統(tǒng)的用戶空間部署驅(qū)動框架 414
9.5.4 在標準系統(tǒng)的用戶空間部署驅(qū)動框架 417
9.6 驅(qū)動框架的關(guān)鍵結(jié)構(gòu)體 419
9.6.1 DevmgrService和DevmgrServiceClnt 419
9.6.2 DevSvcManager和DevSvcManagerClnt 421
9.6.3 Host的HdfHostInfo和HostList 423
9.6.4 Host的DevHostService和DevHostServiceClnt 424
9.6.5 Host的DriverInstaller 426
9.6.6 Device的HdfDriverLoader 426
9.6.7 Device的HdfDevice 427
9.6.8 Device的HdfDeviceInfo和HdfDeviceNode 429
9.6.9 HdfServiceObserver和HdfServiceObserverRecord 431
9.6.10 HdfObjectCreator 432
9.7 驅(qū)動框架的啟動流程 435
9.7.1 驅(qū)動框架的啟動入口 436
9.7.2 啟動DeviceManager 443
9.7.3 啟動HostList的每個Host 448
9.7.4 啟動DevHostService 451
9.7.5 啟動Host的每個Device 454
9.7.6 Device的Bind子流程 457
9.7.7 Device的Init子流程 461
9.7.8 Device的PublishService子流程 463
9.7.9 Device的AttachDevice子流程 468
9.8 用戶態(tài)程序與內(nèi)核態(tài)驅(qū)動的交互 470
9.8.1 代碼部署和編譯配置 470
9.8.2 序列化數(shù)據(jù)的交互 473
9.8.3 HdfIoService接口 476
9.8.4 消息機制的實現(xiàn) 477
9.9 在用戶空間部署驅(qū)動框架 488
9.9.1 開源許可證的影響 488
9.9.2 小型系統(tǒng)的用戶態(tài)基礎(chǔ)驅(qū)動能力 490
9.9.3 標準系統(tǒng)的用戶態(tài)驅(qū)動框架概述 493
9.10 用戶態(tài)驅(qū)動框架的hdf_devmgr進程 496
9.10.1 啟動hdf_devmgr進程 497
9.10.2 啟動DevmgrServiceStub服務(wù) 501
9.10.3 啟動HostList的每個Host 506
9.10.4 SA5001的IPC消息處理函數(shù) 509
9.10.5 SA5002的IPC消息處理函數(shù) 511
9.11 用戶態(tài)驅(qū)動框架的hdf_devhost進程 515
9.11.1 啟動hdf_devhost進程 515
9.11.2 Host的IPC消息處理函數(shù) 521
9.11.3 Host的進程內(nèi)消息處理函數(shù) 522
9.11.4 Device的Bind子流程 524
9.11.5 Device的Init子流程 527
9.11.6 Device的PublishService子流程 530
9.11.7 Device的AttachDevice子流程 531
9.11.8 Device的IPC消息處理函數(shù) 532
9.12 HDI和驅(qū)動模型 533
9.12.1 HDI概述 533
9.12.2 HDI的聲明和定義 534
9.12.3 HDI的WLAN驅(qū)動實現(xiàn) 535
9.12.4 驅(qū)動模型概述 539
后記 542