首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入理解鸿蒙OS,看这篇就对了!

和大家一样,拿到板子后,就急不可耐的按照老师们的教程开始各种操作了。但是一段时间后,我突然发现,我对项目的结构和启动流程还都一知半解。

为了能更深入的理解 HarmonyOS 的代码,我决定从基础开始,再从头学习。

01

整体情况

首先,咱们 HarmonyOS 是用 C 语言写的(废话),编译用 gcc。项目构建上,没有用传统的 make,而是用的 GN。

什么是 GN?

Generate Ninja,是 Google 为 Ninja 专门开发的上层编译框架,可以生成 Ninja 可以识别的输入文件。GN 由 c++ 编译,相比于基于 python 的 gyp,速度快接近 20 倍。

什么是 Ninja?

Ninja 是 Google 的一名程序员推出的注重速度的构建工具,一般在 Unix/Linux 上的程序通过 make/makefile 来构建编译,而 Ninja 通过将编译任务并行组织,大大提高了构建速度。

重点突出一个“快”字。总而言之,有了这俩先进工具的加持,咱这个鸿蒙编译速度那是飞快。相信大家都深有体会。

02

项目结构

applications,自然就是用户的各种应用代码了,这里是咱们的主战场。

具体来说,applications/sample/wifi-iot/app/,这个 app 目录里是咱们的业务代码。

base,OS 的基础代码。

主要包含全球化(global),DFX(hiviewdfx),公共基础(iot_hardware),安全(security),启动恢复(startup)等若干模块。

build,构建目录。编译过程中的文件存放目录。

docs,文档。很多新手往往忽略了自带的文档。

domains,领域。看样子是几个 demo。

drivers,驱动。OpenHarmony 驱动子系统采用 C 面向对象编程模型构建,通过平台解耦、内核解耦,兼容不同内核,提供了归一化的驱动平台底座,旨在为开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。

foundation,基础模块。内容很复杂,包含 Ability、ACE、Graphics 等等很多模块。

kernel,内核代码。

out,输出目录。生成的固件文件就在这里。

prebuilts,LiteOS 预先编译好的文件。一些 LiteOS 的 .o 和 .a 文件放在这里,可用来加快编译速度。

test,测试目录。具体都是干嘛的暂时没有搞清楚。

third_party,第三方代码。

utils,工具模块。像文件访问、timer、task 什么的。

vendor,制造商提供的代码。这里有程序启动的入口代码,应给予一定的关注。有时间可以研究一下。

build.py,编译脚本。基本用法:python build.py wifiiot。

03

启动流程

HelloWorld 的教程我就不再重复了,推荐参考连老师的文章:

这里,关键弄懂一个地方:

这个 SYS_RUN 是系统自带的宏,是告诉项目,咱们的业务代码的入口函数是 HelloWorld。

SYS_RUN 宏的定义在 ohos_init.h 头文件中,位置在 \utils\native\lite\include\ohos_init.h。

定义如下:

定义了系统启动阶段的初始化和启动入口,类型必须是 void (*)(void),即不能有参数,也没有返回值。

LAYER_INITCALL_DEF 也是宏,是为了方便灵活调整启动阶段和优先级而设定的,具体读者可以自行研究。

回到咱们的 HelloWorld 中,这里说一下线程。一般业务代码都会通过一个主循环来执行各项任务,最佳的方法是启动一个线程,这样入口函数不会阻塞导致一系列问题。

启动线程的方法如下:

至此,已经可以顺利完成 HelloWorld,且对项目结构和启动流程有了一个初步的理解。

想了解更多内容,请访问《51CTO和华为官方战略合作共建的鸿蒙技术社区》:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201109A0DRM300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券