【鸿蒙设备开发笔记】OpenHarmony源码目录介绍+编译框架介绍
源码目录
以小熊派为例子,其他开发板也不会差很多 小熊派的源码目录延续OpenHarmony官方目录结构,以下是源码目录的说明:
目录名 | 描述 |
---|
applications | BearPi-HM_Nano应用程序样例 | base | 基础软件服务子系统集&硬件服务子系统集 | build | 组件化编译、构建和配置脚本 | docs | 介绍、说明资料 | domains | 增强软件服务子系统集 | drivers | 驱动子系统 | foundation | 系统基础能力子系统集 | kernel | 内核子系统 | prebuilts | 编译器及工具链子系统 | test | 测试子系统 | third_party | 开源第三方组件 | utils | 常用的工具集 | vendor | 厂商提供的软件 | build.py | 编译脚本文件 |
如果使用hpm方式下载源码,而不是全量代码的话,bocs、domains、drivers可能是没有的,因为暂时没用到
可以对照鸿蒙技术架构图一起理解
applications目录 在这目录之前可能不同开发板的文件可能有不同,直接往里面点就会看到
目录名 | 内容 |
---|
docs | 开发板原理图、相关课程PPT、环境搭建教程等资料 | sample | 开发板案例代码及教程 | README.md | 说明文件 |
base目录
有各种API相关文件
如外设的api文件路径\base\iot_hardware\interfaces\kits\wifiiot_lite
内有wifi,gpio,串口,i2c等相关的.h文件
domains目录
可对照技术架构图查看
内有智慧屏专有业务子系统、IOT专有业务子系统、等等多种子系统
可以根据项目需要进行使用,可以进行剪切,不需要的可以不要
kernel目录是内核子系统目录
鸿蒙支持的内核有Linux kernel 、LiteOS
Liteos 又有Liteos_a 、Liteos_m 小熊派开发板用的是Liteos_m
编译框架
鸿蒙采用gn和Ninja来控制代码的编译
GN是一种元构建系统,可以生成Ninja构建文件(Ninja build files)
在Unix或Linux下常使用Makefile来控制代码的编译,但是Makefile速度太慢,所以一套新的控制编译的工具Ninja就诞生了,Ninja相对于Makefile这套工具更注重于编译速度。
编译文件的大概逻辑为
Json文件
在路径 HarmonyOS \ build \ lite \ product下有一个.json文件
若有多个json文件,对应 “开发板名” 的拿个就是你要的
这个文件描述了各个编译模块的路径,如下
subsystem内为模块路径,
模块编译构造文件 .gn文件
去到刚刚 .json文件 内的模块路径 //applications/BearPi/BearPi-HM_Nano/sample内 有一个BUILD.gn,这个就是模块编译文件 这里其实又是指向了timer_example
? A2_kernel_timer是相对路径,指向./applications/BearPi/BearPi-HM/sample/A2_kernel_timer/BUILD.gn。 ?timer_example是目标,指向./applications/BearPi/BearPi-HM/sample/A2_kernel_timer/BUILD.gn中的static_library(“timer_example”)
业务编译构造文件 .gn文件
在 timer_example 下面又有一个BUILD.gn文件 ? static_library中指定业务模块的编译结果,为静态库文件libtimer_example.a,根据实际情况完成填写。 ? sources中指定静态库.a所依赖的.c文件及其路径,若路径中包含"//“则表示绝对路径(此处为代码根路径),若不包含”//" 则表示相对路径。 ? include_dirs中指定source所需要依赖的.h文件路径。 (这里会将这个Timer_example.c,编译成libTimer_example.a文件,最终所有代码会编译为xxxx.bin文件,这个bin文件就是要烧录到开发板的文件)
三个文件下来,就指定编译了我们需要的业务代码
若有错误请大佬指教
|