OpenHarmony之系统启动流程

前段时间将openharmony一直到STM32F407ZGT6上,使用的是轻量型系统,内核为liteos-M,这里对启动过程做个简单记录,首先看一下openharmony的简要架构图
在这里插入图片描述

  • 上电从汇编文件开始执行
    当我们按下 STM32 的单片机后,第一时间,单片机执行的不是我们写的 C 语言代码,而是一段汇编代码,我们一般叫他启动文件,我们上一节工程的代码启动文件是 startup_stm32f407xx.s文件。单片机上电首先执行的就是这个汇编文件,可能你会有疑问为什么单片机上电先执行这段汇编,其他汇编文件不行嘛?这个是因为单片机上电后,执行的程序地址是固定的,由单片机的 PC 指针决定,而PC指针刚上的是由硬件复位,指向了固定地址,而工程文件中有一个链接文件,将汇编文件中的 Reset_Handler 函数放在了 PC 第一个执行地址,所以单片机上电后硬件初始化完 PC 和 SP 后,就会执行 Reset_Handler 了,Reset_Handler 再启动文件的位置如下:
    在这里插入图片描述
    他设置的 SP 堆栈指针的值,然后将数据段的起始地址传给 R0-2 寄存器,用于传参数给下一个调用函数,也就是 LoopCopyDataInit 函数,用来拷贝具有非 0 初始化值的变量到 SRAM,因为代码中的变量一开始全在 Flash 中,我们需要拷贝到 SRAM 运行,之后再清除未初始化数据段(.bss),初始化完成后,调用 SystemInit 来初始化单片机的 FPU 和时钟:
    在这里插入图片描述
    初始化完成后调用 __libc_init_array 来初始化 lib 库,初始化完成后就会跳转到 main 函数了。
  • 内核启动
    进入main函数之后会首先调用LOS_KernelInit()来启动内核,如下图所示:
    在这里插入图片描述
    当内核启动成功后,会调用OHOS_SystemInit启动OpenHarmony的各个子系统,OHOS_SystemInit函数如图所示:在这里插入图片描述
    拉起所有需要的子系统之后,启动系统调度LOS_Start();
  • 启动应用

之后就可以新建任务并运行上层应用了,至此OpenHarmony在STM32F407ZGT6上就启动起来了。

过程比较简单,可以找一份源码,参照源码梳理启动流程。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LinfineEdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值