【HarmonyOS HiSpark IPC DIY Camera试用连载4 】 鸿蒙OS内核liteos-a如何启动第一个用户进程init_lite

  • 1. 鸿蒙OS编译知识
  • 2. 从编译过程看鸿蒙OS代码结构
  • 3. 第一个用户态进程init_lite
  • 4. Init_lite是如何被kernel调用的?

1. 鸿蒙OS编译知识

(原理引自中科创达OpenHarmony研究组 鸿蒙OS开源代码精要解读之——init)
OpenHarmony源码编译系统使用了google开发的gn工具以及ninjia。这二者结合起来比传统的makefile编译系要高效,尤其适合大系统的并行编译。对开发者而言,如果要参与OpenHarmony的开发,需要对gn的语法有些了解。本文仅做一些最基本的介绍:
1.使用gn工具的话,开发者将编译规则写在名为BUILD.gn文件中。和Makefile一样,gn文件有自己的语法规则,属于领域语言(Domain Specific Language,DSL)。gn语法不难,但编译规则本身有很多内容,所以一下子要掌握全部内容也不容易。
2.gn支持自定义模板函数,可放在名为.gni的文件中。OpenHarmony中最常见到的gn模板文件为./build/lite/config/component/lite_component.gni。.gn文件中通过import可导入gni模板文件。OpenHarmony定义了lite_component、lite_library等模板函数。
3.gn中,可执行文件的编译函数入口为exectuable(“文件名”),共享库的编译规则函数为shared_library(“文件名”)。所以,如果要搜索某个文件对应的编译规则,可以先搜索所有的BUILD.gn文件,然后grep executable。以下是我们grep所有的executable的结果截图。

2. 从编译过程看鸿蒙OS代码结构

Hi3518EV300的编译命令如下:
python build.py ipcamera_hi3518ev300 -b debug
这条编译命令是怎么执行的呢?

编译的主文件是Build\lite\BUILD.gn文件,内容截取如下:

先编译kernel,依赖库;最后编译rootfs, rootfs的编译过程\build\lite\gen_rootfs.py打开看是先编译userfs,再编译rootfs。

使用到的配置文件:

打开ipcamera_hi3518ev300.json,其中:
1.配置kernel为liteos_a;
2.指定编译器为clang;
3.列出了所有OS子系统和源码位置,包括了kernel、startup子系统。Startup中的init_lite是kernel调用的第一个用户态进程;

3. 第一个用户态进程init_lite

Init_lite的位置:

官方手册中对init的介绍 (init启动引导指的就是init_lite)
启动恢复负责在内核启动之后,应用启动之前的操作系统中间层的启动。涉及以下模块:

  • init启动引导

支持使用LiteOS-A内核的平台,当前包括:Hi3516DV300平台和Hi3518EV300平台。

负责处理从内核加载第一个用户态进程开始,到第一个应用程序启动之间的系统服务进程启动过程。启动恢复子系统除负责加载各系统关键进程之外,还需在启动的同时设置其对应权限,并在子进程启动后对指定进程实行保活(若进程意外退出要重新启动),对于特殊进程意外退出时,启动恢复子系统还要执行系统复位操作。

  • appspawn应用孵化

    支持使用LiteOS-A内核的平台,当前包括:Hi3516DV300平台和Hi3518EV300平台。

    负责接受应用程序框架的命令孵化应用进程,设置其对应权限,并调用应用程序框架的入口。

  • bootstrap启动服务模块

    支持使用LiteOS-M内核的平台,当前包括:Hi3861平台。

    提供了各服务和功能的启动入口标识。在SAMGR启动时,会调用boostrap标识的入口函数,并启动系统服务。

  • 系统属性

    支持使用LiteOS-M内核和LiteOS-A内核的平台,包括:Hi3861平台,Hi3516DV300平台,Hi3518EV300平台。

    负责提供获取与设置操作系统相关的系统属性。

    系统属性包括:默认系统属性、OEM厂商系统属性和自定义系统属性。OEM厂商部分仅提供默认值,具体值需OEM产品方按需进行调整,详见“使用”部分。

base
├──startup 启动恢复子系统根目录
├──── frameworks
│ └── syspara_lite
│ ├── LICENSE 开源LICENSE文件
│ ├── parameter 系统属性模块源文件目录
│ │ ├── BUILD.gn
│ │ └── src
│ │ ├── BUILD.gn
│ │ ├── param_impl_hal 系统属性模块基于LiteOS-M核实现
│ │ └── param_impl_posix 系统属性模块基于LiteOS-A核实现
│ └── token
│ ├── BUILD.gn
│ └── src
│ ├── token_impl_hal
│ └── token_impl_posix
├──── hals
│ └── syspara_lite 系统属性模块硬件抽象层头文件目录
├──── interfaces
│ └── kits
│ └── syspara_lite 系统属性模块对外接口目录
└──── services
├── appspawn_lite 应用孵化模块
│ ├── BUILD.gn 应用孵化模块编译配置
│ ├── include 应用孵化模块头文件目录
│ ├── LICENSE 开源LICENSE文件
│ ├── moduletest 应用孵化模块自测试代码目录
│ └── src 应用孵化木块源文件目录
├── bootstrap_lite 启动服务模块
│ ├── BUILD.gn 启动服务模块编译配置
│ ├── LICENSE 开源LICENSE文件
│ └── source 启动服务模块源文件目录
└── init_lite 启动引导模块
├── BUILD.gn 启动引导模块编译配置
├── include 启动引导模块头文件目录
├── LICENSE 开源LICENSE文件
├── moduletest 启动引导模块自测试代码目录
└── src 启动引导模块源文件目录
vendor
└──huawei
└──camera
└──init_configs 启动引导模块配置文件目录(json格式,部署于/etc/目录下)

Init_lite使用了配置文件init_configs;

Init_lite 的main.c会读取和执行上面的配置文件命令行,其函数为InitReadCfg;

Init_lite在编译后,生成”/bin/init”;
bin目录在\build\lite\BUILD.gn中配置;

init名称在base\startup\services\init_lite\BUILD.gn中指定;

4. Init_lite是如何被kernel调用的?

liteos-a的启动顺序是:
1)reset_vector_up.s
2)\kernel\liteos_a\platform\main.c
3)OsMain
4)OsSystemInit
5)OsSystemInitTaskCreate
6)SystemInit

Hi3518 kernel启动过程中会调用SystemInit:

SystemInit函数最后会调用OsUserInitProcess函数,启动init进程;

OsUserInitProcess函数在\kernel\liteos_a\kernel\base\core\los_process.c中定义:

OsUserInitProcess中定义了第一个用户态进程的地址是__user_init_entry;
__user_init_entry通过宏定义LITE_USER_SEC_ENTRY进行定义,其所在文件是\kernel\liteos_a\kernel\user\src\los_user_init.c;
这就是Kernel调用init_lite的入口:

本人更多内容请参考:鸿蒙OS精品资料整理,持续更新中

【HarmonyOS HiSpark IPC DIY Camera试用连载4 】 鸿蒙OS内核liteos-a如何启动第一个用户进程init_lite相关推荐

  1. 【HarmonyOS HiSpark IPC DIY Camera试用连载1】开箱组装初印象

    [HarmonyOS HiSpark IPC DIY Camera试用连载1] 开箱组装初印象 一. 开箱资料 二. 包含的元件 三. 组装步骤 四.原装功能演示 五. 注意事项 /* 本人为文章作者 ...

  2. 鸿蒙IPC摄像机,【HiSpark IPC DIY Camera试用连载 】第二篇 视频的人脸检测

    [HiSpark IPC DIY Camera试用连载 ]第二篇 视频的人脸检测, 本帖最后由 瑟寒凌风 于 2021-1-14 00:13 编辑 实在的,ipc本身就带有这个功能,只要摄像头出现画面 ...

  3. 鸿蒙os不需要wifi,【鸿蒙HarmonyOS HiSpark IPC DIY Camera】hi3518-wifi的配置与使用

    主 要是修改和3518相关的wpa_supplicant.conf hostapd.conf 两个文件,对wifi相关的ssid.passwd等进行配置 [编译生成wifi可执行文件] 请参考以下示例 ...

  4. 鸿蒙开发板HI3518视频,HiSpark IPC DIY Camera HarmonyOS开发板 鸿蒙开发板 - 电子技术论坛...

    活动流程 1. 申请:点击免费申请按钮,关注HarmonyOS专区即可报名.请认真填写申请理由,展现丰富的过往项目经验,有创意的试用计划和网络影响力,尽快完善论坛个人信息,这样可以大大提高申请通过几率 ...

  5. 【HarmonyOS HiSpark AI Camera试用连载 】AI_Camera_Hi3516DV300开发套件非专业开箱

    0.序   HarmonyOS面世已经有一段时间了,但是实际能上手体验还是头一遭.借由此次申请的AI_Camera_Hi3516DV300开发套件来实际体验一下这未知的鸿蒙.感谢电子发烧友能够提供这么 ...

  6. 鸿蒙能用linux许可证,【HarmonyOS HiSpark AI Camera试用连载 】Linux下的鸿蒙

    本帖最后由 jf_89761755 于 2020-10-19 07:32 编辑 Linux下的鸿蒙 --tjCFeng 拿到鸿蒙开发板 AI Camera 已经一个星期了,期间查找了众多的资料教程来学 ...

  7. 华为HarmonyOS鸿蒙系统介绍,华为鸿蒙OS系统怎么样 华为HarmonyOS鸿蒙系统介绍

    华为鸿蒙OS系统怎么样?华为在8月9日的2019华为开发者大会上正式发布了华为HarmonyOS鸿蒙系统,大家知道这个系统具体是用在哪些产品上的吗?有哪些功能呢?能兼容别的系统吗?下面小编为大家带来了 ...

  8. 《HarmonyOS开发 - IPC Camera开发笔记》第2章 HiSpark IPC Camera开发环境搭建(基于V1.1.4)

    开发环境: 开发系统:Ubuntu 20.04 Harmony版本:code-v1.1.4-LTS.tar HiSpark IPC Camera基于华为海思Hi3518芯片,支持LiteOS.Open ...

  9. 【HarmonyOS HiSpark Wi-Fi IoT HarmonyOS开发板】初探

    感谢电子发烧友论坛提供了这次试用机会,在焦急的等待中,拿到了HarmonyOS HiSpark Wi-Fi IoT HarmonyOS开发板.迫不及待的进行开箱. 首先来张外观图 打开盒子后,映入眼帘 ...

最新文章

  1. Unet网络实现叶子病虫害图像分割
  2. 爱尔兰塔拉理工学院计算机,我校召开与爱尔兰塔拉理工学院合作办学项目联合管理委员会会议...
  3. 论计算机在教学中的作用论文,计算机在教学中的应用
  4. 保险运用计算机的工作干什么,关于计算机在保险业务中的应用研究
  5. Java 动作事件_java按钮动作事件
  6. golang学习笔记:Interface类型断言详情
  7. 2019第十届蓝桥杯C/C++ A组省赛 —— 第四题:迷宫
  8. 方法数超了65535 无法安装的解决方案
  9. C++编程思想:文件 字符串 输入输出
  10. linux中自动挂载脚本,LIUNX一键自动挂载脚本,宝塔磁盘LIUNX一键分区磁盘 | 帮助信息-动天数据...
  11. 技术面试问项目难题如何解决的_技术创新 | 降本增效,青海农信社项目小伙刻苦钻研解决联合支架设计难题!...
  12. KMP 深度讲解next数组的求解
  13. 精品美剧小屏精致灰色风格苹果CMSv10主题
  14. Python实现“按任意键返回”和无回显输入
  15. Python之输入输出
  16. TexturePacker 图片打包工具讲解与使用并且批处理打多包以及资源加密
  17. EasyUI(搭建框架layout布局)
  18. showModalDialog的title问题,去掉网页对话框
  19. 2017-4-18 CCCC决赛总结
  20. IOS superView和subView

热门文章

  1. 旅游定制服务|基于SSM实现旅游个性化定制网站平台
  2. word自动生成报告项目多页表头及页眉重复显示设置并总页码加减域代码编辑
  3. matplotlib模块的pyplot子模块绘制余切函数
  4. android json分页,移动测试之异步任务+JSON解析+ListView分页
  5. 根据 Windows 激活错误代码解决问题
  6. vant-ui 使用
  7. ERP学习--MRP公式与计算
  8. 历年高考省录取分数线 API 接口
  9. 基于ssm的汽车租赁管理系统 (源代码+数据库)601
  10. include and extend