千家信息网

OS的项目结构与启动流程是什么

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要讲解了"OS的项目结构与启动流程是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"OS的项目结构与启动流程是什么"吧!一、整体情况首先,
千家信息网最后更新 2026年11月04日OS的项目结构与启动流程是什么

这篇文章主要讲解了"OS的项目结构与启动流程是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"OS的项目结构与启动流程是什么"吧!

一、整体情况

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

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

什么是Ninja?

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

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

二、项目结构

1.applications,自然就是用户的各种应用代码了,这里是咱们的主战场。具体来说,applications/sample/wifi-iot/app/,这个app目录里是咱们的业务代码。

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

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

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

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

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

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

8.kernel,内核代码。

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

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

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

12.third_party,第三方代码。

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

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

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

三、启动流程

HelloWorld的教程我就不再重复了,推荐参考连老师的文章。关键弄懂一个地方:

SYS_RUN(HelloWorld);

这个SYS_RUN是系统自带的宏,是告诉项目,咱们的业务代码的入口函数是HelloWorld。SYS_RUN宏的定义在ohos_init.h头文件中,位置在\utils\native\lite\include\ohos_init.h,定义如下:

/**  * @brief Identifies the entry for initializing and starting a system running phase by the  * priority 2.  *  * This macro is used to identify the entry called at the priority 2 in the system startup  * phase of the startup process. \n  *  * @param func Indicates the entry function for initializing and starting a system running phase.  * The type is void (*)(void).  */ #define SYS_RUN(func) LAYER_INITCALL_DEF(func, run, "run")

定义了系统启动阶段的初始化和启动入口,类型必须是void (*)(void),即不能有参数,也没有返回值。LAYER_INITCALL_DEF也是宏,是为了方便灵活调整启动阶段和优先级而设定的,具体读者可以自行研究。

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

osThreadAttr_t attr;   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] Falied to create HelloTask!\n");  }

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

感谢各位的阅读,以上就是"OS的项目结构与启动流程是什么"的内容了,经过本文的学习后,相信大家对OS的项目结构与启动流程是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

编译 代码 项目 文件 流程 结构 目录 速度 入口 模块 开发 业务 内容 内核 基础 工具 程序 系统 线程 学习 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 互联网科技公司华为 腾讯阿里互联网科技 喔噻互联网科技 成都狮子座互联网科技 济南和联互联网科技有限公司 开启互联网科技时代小说 深圳市运趣互联网科技有限公司 随着互联网科技发展 南平创想时代互联网科技有限公司 宜昌元轩互联网科技有限公司 亳州好赞互联网科技有限公司 国大互联网教育科技有限公司工作 浙南科技城互联网大厦建设工程 梅州GM互联网络科技有限公司 互联网科技年终奖 互联网科技融合创新 扫呗互联网科技有限公司 宁波允成互联网科技有限公司 伍佰万互联网科技是干嘛的 广东猪兼强互联网科技有限公司 互联网科技网 互联网为科技 天下捷融互联网科技 群盈汇互联网科技有限公司 华中科技大学互联网的牛人 美国互联网科技实力 云南省自由互联网科技有限公司 互联网硬科技公司 艺电能源互联网科技有限公司招聘
0