当前位置: 首页 > 科技观察

【鸿蒙开发板试用报告】从点灯开始理解鸿蒙OS的项目结构与启动流程

时间:2023-03-11 22:15:21 科技观察

【鸿蒙开发板试用报告】从开灯看懂鸿蒙OS的工程结构和启动过程/#zz和大家一样拿到板子后,迫不及待的按照老师们的教程开始了各种操作。但是过了一段时间,突然发现自己对项目的结构和启动过程还是不太了解。为了更深入地理解HarmonyOS的代码,我决定从基础开始,从头学起。一、总体情况首先,我们的HarmonyOS是用C语言编写的(废话),用gcc编译。在项目构建方面,没有使用传统的make,而是使用了GN。什么是GN?GenerateNinja是Google专门为Ninja开发的上层编译框架,可以生成Ninja可以识别的输入文件。GN由c++编译,比基于python的gyp快近20倍。什么是忍者?Ninja是由Google的一名程序员推出的专注于速度的构建工具。通常,Unix/Linux上的程序都是通过make/makefile构建和编译的,而Ninja通过并行组织编译任务大大提高了构建速度。.强调“快”字。总而言之,在这两个高级工具的加持下,我们鸿蒙的编译速度是非常快的。相信大家都深有体会。二、项目结构1、应用程序,当然就是用户的各种应用程序代码。这是我们的主战场。具体来说,applications/sample/wifi-iot/app/,这个app目录就是我们的业务代码。2.base,OS的基础代码。主要包括全球化(global)、DFX(hiviewdfx)、公共基础设施(iot_hardware)、安全(security)、启动恢复(startup)等几个模块。3.build,构建目录。编译过程中的文件存放目录。4.文档,文档。许多新手往往会忽略它附带的文档。5.领域,领域。看起来像一些演示。6.drivers,开车。OpenHarmony驱动子系统是使用C面向对象编程模型构建的。通过平台解耦和内核解耦,兼容不同内核,提供标准化的驱动平台基础,旨在为开发者提供更精准、高效的开发环境。力求做到一次开发,多系统部署。7.基础,基础模块。内容非常复杂,包括Ability、ACE、Graphics等诸多模块。8.内核,内核代码。9.out,输出目录。生成的固件文件在这里。10.prebuilts,LiteOS预编译文件。一些LiteOS的.o和.a文件放在这里,可以用来加快编译速度。11.test,测试目录。其具体用途尚不清楚。12.third_party,第三方代码。13.utils,工具模块。比如文件访问、定时器、任务什么的。14.vendor,制造商提供的代码。这里是程序启动的入口代码,需要注意一下。如果你有时间,你可以研究一下。15.build.py,编译脚本。基本使用:pythonbuild.pywifiiot3.启动过程HelloWorld教程不再赘述,推荐参考连老师的文章。关键要明白一个地方:SYS_RUN(HelloWorld);这个SYS_RUN是系统自带的一个宏,它告诉项目我们业务代码的入口函数是HelloWorld。SYS_RUN宏的定义在ohos_init.h头文件中,位置为\utils\native\lite\include\ohos_init.h,定义如下:/***@brief标识初始化启动的入口*priority2的系统运行阶段。**此宏用于识别在系统启动*阶段的启动过程中调用的入口。**此宏用于识别在系统启动*阶段的启动过程中调用的入口。paramfunc表示初始化和启动系统运行阶段的入口函数。*类型为void(*)(void)。*/#defineSYS_RUN(func)LAYER_INITCALL_DEF(func,run,"run")定义系统启动阶段的初始化和启动入口,类型必须为void(*)(void),即可以没有参数也没有返回值。LAYER_INITCALL_DEF也是一个宏,是为了方便灵活调整启动阶段和优先级而设置的。具体读者可以自行研究。回到我们的HelloWorld,这里说说线程。通常,业务代码会通过一个主循环来执行各种任务。最好的办法是开一个线程,这样入口函数就不会阻塞而引起一系列问题。线程启动方法如下:osThreadAttr_tattr;attr.name="HelloTask";attr.attr_bits=0U;attr.cb_mem=NULL;attr.cb_size=0U;attr.stack_mem=NULL;attr.stack_size=10240;attr.priority=osPriorityNormal;if(osThreadNew(HelloTaskFunc,NULL,&attr)==NULL){printf("[HelloTaskDemo]FaliedtocreateHelloTask!\n");}至此,HelloWorld已经顺利完成,初步的项目结构和启动过程已经得到了解。了解更多请访问:与华为官方共建鸿蒙科技社区https://harmonyos.51cto.com/#zz