书籍详情
沉浸式剖析OpenHarmony源代码:基于LTS 3.0版本
作者:梁开祝 著
出版社:人民邮电出版社
出版时间:2022-12-01
ISBN:9787115601384
定价:¥138.80
购买这本书可以去
内容简介
OpenHarmony是由开放原子开源基金会孵化及运营的一个开源项目,是一款由全球开发者共建的开源分布式操作系统。从推出之日至今,OpenHarmony的发展愈加迅速,生态建设愈加成熟,已经成为全球智能终端操作系统领域不可忽视的新生开源力量。《沉浸式剖析OpenHarmony源代码:基于LTS 3.0版本》以OpenHarmony LTS 3.0版本的代码为基础,从OpenHarmony的系统简介、开发环境搭建、编译流程、系统启动流程等开始讲解,然后逐渐深入到代码层面,对OpenHarmony中的各个子系统(主要是分布式任务调度子系统、分布式通信子系统、驱动子系统)的核心模块和框架的实现展开细致入微的分析与解读。本书还提供了相应的示例程序、详尽的日志、相关的流程图和数据结构关系图等,旨在为开发者深入地理解OpenHarmony中的关键技术和驱动框架,提供良好的帮助和参考。《沉浸式剖析OpenHarmony源代码:基于LTS 3.0版本》适合系统开发工程师、设备驱动开发工程师阅读,也适合对OpenHarmony系统底层运行机制感兴趣的开发者阅读。
作者简介
梁开祝,毕业于四川大学计算机学院计算机科学与技术专业,擅长Linux底层驱动开发、音视频处理芯片驱动开发、HDMI/HDCP领域的驱动开发等技术。曾在OPPO公司蓝光事业部担任高级驱动开发工程师,并全程参与了OPPO全系列蓝光播放器的研发工作。后来因工作调整,在内部转岗到手机研发部门,负责手机摄像头的驱动开发工作。
目录
第 1章 系统简介 1
1.1 发展历史 1
1.2 技术特性 2
1.3 前景展望 3
第 2章 搭建开发环境 8
2.1 Windows开发环境的搭建 9
2.2 拿来即用的Ubuntu开发环境 12
2.3 Ubuntu开发环境的搭建 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 安装构建编译工具链 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 烧录开发板 51
2.7.1 开发板相关说明 51
2.7.2 烧录Hi3861开发板 52
2.7.3 烧录Hi3516开发板 55
2.7.4 烧录u-boot后的处理 63
第3章 系统架构 67
3.1 系统架构图 67
3.2 系统目录结构 70
第4章 构建子系统 74
4.1 GN和Ninja的构建流程 75
4.2 系统的裁剪和配置 81
4.2.1 系统裁剪 81
4.2.2 增删子系统 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内核和SDK 95
4.5 编译LiteOS_A内核和shell 97
4.6 编译相关的目录结构 101
4.6.1 小型系统build相关的文件和目录结构 101
4.6.2 小型系统out相关的文件和目录结构 102
4.6.3 小型系统rootfs相关的文件和目录结构 104
4.7 标准系统的编译流程 105
4.7.1 build和out相关的文件和目录结构 105
4.7.2 标准系统的编译流程 108
4.7.3 Linux内核编译流程 114
4.7.4 单独编译部件和模块 119
第5章 启动流程 120
5.1 轻量系统(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 第五阶段:系统框架层启动阶段 124
5.1.6 系统服务的启动方式 128
5.2 小型系统(LiteOS_A)的启动流程 132
5.2.1 第 一阶段:BootLoader阶段 132
5.2.2 第二阶段:汇编语言代码阶段 132
5.2.3 第三阶段:C语言代码阶段 133
5.2.4 第四阶段:系统框架层启动阶段 140
5.2.5 系统服务的启动方式 142
5.2.6 用户态根进程的来历 143
5.3 Linux内核系统的启动流程 145
第6章 子系统 146
6.1 内核子系统概述 146
6.1.1 LiteOS_M内核概述 146
6.1.2 LiteOS_A内核概述 148
6.1.3 Linux内核概述 149
6.1.4 KAL和OSAL概述 149
6.2 启动恢复子系统 150
6.2.1 启动引导组件 152
6.2.2 应用孵化组件 153
6.2.3 服务启动组件 155
6.2.4 系统属性组件 155
6.3 公共基础库子系统 158
6.4 DFX子系统 162
6.4.1 轻量系统的日志组件 162
6.4.2 小型系统的日志组件 174
6.4.3 标准系统的日志组件 182
6.4.4 日志组件的比较 188
6.4.5 init进程的日志 189
6.4.6 驱动框架的日志 190
6.5 IoT硬件子系统 196
6.5.1 概述和目录结构 196
6.5.2 设备驱动开发路径 201
第7章 分布式任务调度子系统 208
7.1 系统服务框架概述 208
7.2 轻量系统的系统服务框架 214
7.2.1 关键结构体的解析 214
7.2.2 系统服务的启动流程 235
7.2.3 面向服务架构的实现 245
7.3 小型系统的系统服务框架 248
7.3.1 线程/进程及其通信模型 249
7.3.2 系统服务的启动流程 257
7.3.3 系统服务注册EP的流程 264
7.3.4 服务管理者的启动流程 279
7.3.5 客户端EP与samgr EP的IPC交互 287
7.3.6 客户端EP与客户端EP的IPC交互 303
第8章 分布式通信子系统 315
8.1 分布式通信子系统概述 315
8.1.1 概念简介 315
8.1.2 依赖关系 316
8.2 WiFi模块概述 318
8.2.1 轻量系统的WiFi模块 318
8.2.2 小型系统的WiFi模块 323
8.2.3 标准系统的WiFi模块 327
8.2.4 编译和部署WiFi驱动 327
8.3 软总线组件的目录结构 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的组网模块:bus_center 354
8.6.4 sdk的发现模块:discovery 355
8.6.5 sdk的传输模块:transmission 356
8.7 软总线组件的核心模块 359
8.7.1 softbus_server的启动流程 360
8.7.2 核心的框架模块:frame 366
第9章 驱动子系统 371
9.1 驱动框架概述 371
9.2 通用的驱动示例程序 374
9.2.1 硬件平台和原理图 375
9.2.2 代码结构和编译配置 377
9.2.3 通过执行程序来验证效果 385
9.3 驱动程序的开发要点 386
9.3.1 用户态程序与内核态驱动的交互 386
9.3.2 驱动配置信息的管理 386
9.3.3 驱动程序的实现 399
9.4 驱动框架的代码结构 404
9.5 驱动框架的编译流程 409
9.5.1 在LiteOS_A内核部署驱动框架 409
9.5.2 在Linux内核部署驱动框架 411
9.5.3 在小型系统的用户空间部署驱动框架 414
9.5.4 在标准系统的用户空间部署驱动框架 417
9.6 驱动框架的关键结构体 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 驱动框架的启动流程 435
9.7.1 驱动框架的启动入口 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 用户态程序与内核态驱动的交互 470
9.8.1 代码部署和编译配置 470
9.8.2 序列化数据的交互 473
9.8.3 HdfIoService接口 476
9.8.4 消息机制的实现 477
9.9 在用户空间部署驱动框架 488
9.9.1 开源许可证的影响 488
9.9.2 小型系统的用户态基础驱动能力 490
9.9.3 标准系统的用户态驱动框架概述 493
9.10 用户态驱动框架的hdf_devmgr进程 496
9.10.1 启动hdf_devmgr进程 497
9.10.2 启动DevmgrServiceStub服务 501
9.10.3 启动HostList的每个Host 506
9.10.4 SA5001的IPC消息处理函数 509
9.10.5 SA5002的IPC消息处理函数 511
9.11 用户态驱动框架的hdf_devhost进程 515
9.11.1 启动hdf_devhost进程 515
9.11.2 Host的IPC消息处理函数 521
9.11.3 Host的进程内消息处理函数 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消息处理函数 532
9.12 HDI和驱动模型 533
9.12.1 HDI概述 533
9.12.2 HDI的声明和定义 534
9.12.3 HDI的WLAN驱动实现 535
9.12.4 驱动模型概述 539
后记 542
1.1 发展历史 1
1.2 技术特性 2
1.3 前景展望 3
第 2章 搭建开发环境 8
2.1 Windows开发环境的搭建 9
2.2 拿来即用的Ubuntu开发环境 12
2.3 Ubuntu开发环境的搭建 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 安装构建编译工具链 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 烧录开发板 51
2.7.1 开发板相关说明 51
2.7.2 烧录Hi3861开发板 52
2.7.3 烧录Hi3516开发板 55
2.7.4 烧录u-boot后的处理 63
第3章 系统架构 67
3.1 系统架构图 67
3.2 系统目录结构 70
第4章 构建子系统 74
4.1 GN和Ninja的构建流程 75
4.2 系统的裁剪和配置 81
4.2.1 系统裁剪 81
4.2.2 增删子系统 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内核和SDK 95
4.5 编译LiteOS_A内核和shell 97
4.6 编译相关的目录结构 101
4.6.1 小型系统build相关的文件和目录结构 101
4.6.2 小型系统out相关的文件和目录结构 102
4.6.3 小型系统rootfs相关的文件和目录结构 104
4.7 标准系统的编译流程 105
4.7.1 build和out相关的文件和目录结构 105
4.7.2 标准系统的编译流程 108
4.7.3 Linux内核编译流程 114
4.7.4 单独编译部件和模块 119
第5章 启动流程 120
5.1 轻量系统(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 第五阶段:系统框架层启动阶段 124
5.1.6 系统服务的启动方式 128
5.2 小型系统(LiteOS_A)的启动流程 132
5.2.1 第 一阶段:BootLoader阶段 132
5.2.2 第二阶段:汇编语言代码阶段 132
5.2.3 第三阶段:C语言代码阶段 133
5.2.4 第四阶段:系统框架层启动阶段 140
5.2.5 系统服务的启动方式 142
5.2.6 用户态根进程的来历 143
5.3 Linux内核系统的启动流程 145
第6章 子系统 146
6.1 内核子系统概述 146
6.1.1 LiteOS_M内核概述 146
6.1.2 LiteOS_A内核概述 148
6.1.3 Linux内核概述 149
6.1.4 KAL和OSAL概述 149
6.2 启动恢复子系统 150
6.2.1 启动引导组件 152
6.2.2 应用孵化组件 153
6.2.3 服务启动组件 155
6.2.4 系统属性组件 155
6.3 公共基础库子系统 158
6.4 DFX子系统 162
6.4.1 轻量系统的日志组件 162
6.4.2 小型系统的日志组件 174
6.4.3 标准系统的日志组件 182
6.4.4 日志组件的比较 188
6.4.5 init进程的日志 189
6.4.6 驱动框架的日志 190
6.5 IoT硬件子系统 196
6.5.1 概述和目录结构 196
6.5.2 设备驱动开发路径 201
第7章 分布式任务调度子系统 208
7.1 系统服务框架概述 208
7.2 轻量系统的系统服务框架 214
7.2.1 关键结构体的解析 214
7.2.2 系统服务的启动流程 235
7.2.3 面向服务架构的实现 245
7.3 小型系统的系统服务框架 248
7.3.1 线程/进程及其通信模型 249
7.3.2 系统服务的启动流程 257
7.3.3 系统服务注册EP的流程 264
7.3.4 服务管理者的启动流程 279
7.3.5 客户端EP与samgr EP的IPC交互 287
7.3.6 客户端EP与客户端EP的IPC交互 303
第8章 分布式通信子系统 315
8.1 分布式通信子系统概述 315
8.1.1 概念简介 315
8.1.2 依赖关系 316
8.2 WiFi模块概述 318
8.2.1 轻量系统的WiFi模块 318
8.2.2 小型系统的WiFi模块 323
8.2.3 标准系统的WiFi模块 327
8.2.4 编译和部署WiFi驱动 327
8.3 软总线组件的目录结构 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的组网模块:bus_center 354
8.6.4 sdk的发现模块:discovery 355
8.6.5 sdk的传输模块:transmission 356
8.7 软总线组件的核心模块 359
8.7.1 softbus_server的启动流程 360
8.7.2 核心的框架模块:frame 366
第9章 驱动子系统 371
9.1 驱动框架概述 371
9.2 通用的驱动示例程序 374
9.2.1 硬件平台和原理图 375
9.2.2 代码结构和编译配置 377
9.2.3 通过执行程序来验证效果 385
9.3 驱动程序的开发要点 386
9.3.1 用户态程序与内核态驱动的交互 386
9.3.2 驱动配置信息的管理 386
9.3.3 驱动程序的实现 399
9.4 驱动框架的代码结构 404
9.5 驱动框架的编译流程 409
9.5.1 在LiteOS_A内核部署驱动框架 409
9.5.2 在Linux内核部署驱动框架 411
9.5.3 在小型系统的用户空间部署驱动框架 414
9.5.4 在标准系统的用户空间部署驱动框架 417
9.6 驱动框架的关键结构体 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 驱动框架的启动流程 435
9.7.1 驱动框架的启动入口 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 用户态程序与内核态驱动的交互 470
9.8.1 代码部署和编译配置 470
9.8.2 序列化数据的交互 473
9.8.3 HdfIoService接口 476
9.8.4 消息机制的实现 477
9.9 在用户空间部署驱动框架 488
9.9.1 开源许可证的影响 488
9.9.2 小型系统的用户态基础驱动能力 490
9.9.3 标准系统的用户态驱动框架概述 493
9.10 用户态驱动框架的hdf_devmgr进程 496
9.10.1 启动hdf_devmgr进程 497
9.10.2 启动DevmgrServiceStub服务 501
9.10.3 启动HostList的每个Host 506
9.10.4 SA5001的IPC消息处理函数 509
9.10.5 SA5002的IPC消息处理函数 511
9.11 用户态驱动框架的hdf_devhost进程 515
9.11.1 启动hdf_devhost进程 515
9.11.2 Host的IPC消息处理函数 521
9.11.3 Host的进程内消息处理函数 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消息处理函数 532
9.12 HDI和驱动模型 533
9.12.1 HDI概述 533
9.12.2 HDI的声明和定义 534
9.12.3 HDI的WLAN驱动实现 535
9.12.4 驱动模型概述 539
后记 542
猜您喜欢