广告

OpenHarmony鸿蒙操作系统指南:Hi3861开发板LiteOS-M启动流程

2022-08-12 12:23:09 OpenAtom OpenHarmony 阅读:
OpenHarmony作为一款万物互联的操作系统,覆盖了从嵌入式实时物联网操作系统到移动操作系统的全覆盖,目前市面上的采用LiteOS-M的OpenHarmony开发板厂商有深开鸿、润和软件、小熊派,因为海思的SDK是以库文件的形式提供的,所以不同的Hi3861芯片开发板启动流程是一样的。
广告

OpenHarmony作为一款万物互联的操作系统,覆盖了从嵌入式实时物联网操作系统到移动操作系统的全覆盖,其中内核包括LiteOS-M,LiteOS-A和Linux。LiteOS-M内核是面向IoT领域构建的轻量级物联网操作系统内核,主要面向没有MMU的处理器,架构如图1-1所示。

acb93d6e-19ea-11ed-ba43-dac502259ad0.png

图1-1 LiteOS-M架构图

Hi3861是一款高度集成的2.4GHz SoC WiFi芯片,采用高性能 32bit 微处理器,最大工作频率 160MHz,内嵌 SRAM 352KB、ROM 288KB、Flash 2MB。目前市面上的采用LiteOS-M的OpenHarmony开发板厂商有深开鸿、润和软件、小熊派,因为海思的SDK是以库文件的形式提供的,所以不同的Hi3861芯片开发板启动流程是一样的。

Hi3861 Boot介绍

Boot是操作系统启动之前的软件,通用叫法是bootloader,Hi3861的boot分为4部分:RomBoot、FlashBoot、LoaderBoot、 CommonBoot,如图2-1所示。

acc6ef40-19ea-11ed-ba43-dac502259ad0.png

图2-1 Hi3861 Boot启动流程

● RomBoot功能包括:加载LoaderBoot到RAM,进一步利用LoaderBoot下载镜像到Flash、烧写 EFUSE, 校验并引导FlashBoot。FlashBoot分为AB面,A面校验成功直接启动,校验失败会去校验B面,B面校验成功会修复A面再引导启动,否则复位重启。

● FlashBoot功能包括:升级固件,校验并引导固件。

● LoaderBoot功能包括:下载镜像到Flash, 烧写EFUSE(例如:安全启动/Flash加密相关密钥等)。

● CommonBoot为Flashboot与LoaderBoot共用的功能模块。

相关文件介绍

Hi3861的LiteOS-M代码是SDK中以库文件的形式提供的,虽然我们无法看到源代码,但这不代表我们分析不了启动流程,我们可以从分析map文件和asm这两个文件入手。这两个文件都是编译链接工具生成的,其中asm文件是汇编程序源文件,可以查看函数之间的调用关系,map文件里包括全局符号、函数地址及占用的空间和位置。map和asm文件主要作用是当开发板崩溃时用于分析其崩溃的原因,我们分析函数跳转关系时并不需要知道太多汇编,只需要知道基本的跳转语句和赋值语句即可,这两个文件位于out目录下和操作系统固件平级的目录,如图3-1。

acee326c-19ea-11ed-ba43-dac502259ad0.png

图3-1 Hi3861 asm和map文件位置图

一个编译完成的固件通常有以下几部分:

1) RO段包括只读代码段(code段/.text段)和常量段(RO Data段/.constdata段)。

2) RW段(.data段)指已被初始化成非0值的变量段。

3) ZI段(.bss段)指未被初始化或初始化为0的变量段。

我们源代码的函数和字符串常量都位于text段。

LiteOS-M启动流程介绍

1) 嵌入式处理器和操作系统都具有类似的结构启动流程也大体相似,从芯片上电开始Boot把控制权交给操作系统,Hi3861从Boot跳转到操作系统代码如下:

acff7eb4-19ea-11ed-ba43-dac502259ad0.png

这部分是将该地址当函数作为跳转,因为FlashBoot和kernel,是两套代码程序,他们之间没有依赖引用关系,但是他们在一个地址空间,所以直接地址跳转,这也是从Boot到kernel通用的跳转方式。

2) 芯片启动是从中断向量表的复位中断处理程序开始,接着把数据从Flash复制到RAM、清空bss数据段、初始化时钟、跳转到main函数。我们通过查看asm文件的main函数,可以看出其中调用的函数如图4-1所示,从图4-1 我们可得知调用的函数包括设置串口、校验版本号、配置板子、Kernel初始化、应用初始化和操作系统的调度运转,其中main函数位于liblitekernel_flash.a(main.o)文件中。

ad171a9c-19ea-11ed-ba43-dac502259ad0.png

图4-1 main函数调用关系

LOS_KernelInit是负责初始化内核数据结构的,如图4-2所示,主要函数有OsMemSystemInit(内存初始化)、OsHwiInit(中断初始化)、OsTaskInit(任务初始化) ,这些过程主要目的是把内核相关的变量初始化,准备好全局信息,方便API函数去调用,API函数调用必须在这些初始化完成后才可以。

3) 从AppInit开始脱离了sdk,可以看到源代码了,AppInit函数位于libwifiiot_app.a(app_main.o)中,部分截图如图4-3,源代码为app_main.c,其中调用的函数包括获取sdk版本号,外设初始化,ipc初始化,flash分区,WiFi初始化,tcp/ip初始化,然后跳转到了OpenHarmony特有的函数OHOS_Main。

OHOS_Main位于libwifiiot_app.a(ohos_main.o)中,源代码为ohos_main.c,主要完成OpenHarmony系统相关和用户应用相关的调用,里边主要函数是OHOS_SystemInit,如图4-4,在其中调用了用户自己写的应用任务相关代码,如图4-5,从而实现了在LOS_start之前把任务列表填好,这样才能保证用户任务或定时等功能参与了系统调度。

ad369af2-19ea-11ed-ba43-dac502259ad0.png

图4-2 LOS_KernelInit函数调用关系

ad5894ea-19ea-11ed-ba43-dac502259ad0.png

图4-3 app_main函数调用关系

ad7d6626-19ea-11ed-ba43-dac502259ad0.png

图4-4 OHOS_Main函数调用关系

ad9bdd72-19ea-11ed-ba43-dac502259ad0.png

图4-5 OHOS_SystemInit函数调用关系

用户应用的启动原理

1) 在图4-5中出现的函数MODULE_INIT(run),就是调用最终调用用户程序的代码。这是一个宏定义,展开的调用关系 :asestartupootstrap_liteservicessourcecore_main.h定义,从MODULE_CALL、MODULE_BEGIN 、MODULE_END,最终调用的地址是__zinitcall_##name##_start,MODULE_INIT(run)调用的函数地址是__zinitcall_run_start。

通过查看链接文件得出__zinitcall_run_start包含.zinitcall.run0.init),如图5-1所示。

adb69c8e-19ea-11ed-ba43-dac502259ad0.png

图5-1 __zinitcall_run_start链接关系

查看map文件发现我们自己的应用程序文件就在.zinitcall.run2.init中,如图5-2所示。

adc9458c-19ea-11ed-ba43-dac502259ad0.png

图5-2 led_exapmle文件在map中的位置

2) 从运行角度看启动中调用到了应用程序led_exapmle,所谓位置为.zinitcall.run2.init,但我们在应用程序中的关联函数是SYS_RUN(LedExampleEntry),SYS_RUN的展开关系如图5-3所示,最终即是 zinitcall.run2.init,和程序运行时候的调用匹配在一起了。应用程序的调用关系就是编译链接阶段生成指定的段,初始化时调用指定段,这样实现了LiteOS-M的操作系统代码与应用程序代码的解耦。

adea5f60-19ea-11ed-ba43-dac502259ad0.png

图5-3 SYS_RUN的展开关系

总结

本文向大家讲述了在没有部分源代码的情况下,如何通过对map文件和asm文件的分析从而得出Hi3861芯片开发板LiteOS-M的启动流程。总体过程就是最小硬件系统的配置完成后,LOS_KernelInit负责初始化系统到一个合适的状态,AppInit调用OpenHarmony和应用相关代码,最后LOS_Start负责把操作系统运转起来。

本文为EET电子工程专辑 原创文章,禁止转载。请尊重知识产权,违者本司保留追究责任的权利。
  • Omdia :2024年生成式AI软件市场将增长124% 许多拥有大型语言模型(LLM)的供应商的收入运行率表明,2024 年的收入增长将达到三位数……
  • IDC首测8款最热门移动端大模型,3款获好评 本次报告的测评涵盖了市面上最热门的八个Chatbot App:kimi智能助手、豆包、海螺AI、天工、通义、文心一言、讯飞星火以及智谱清言(按照公司拼音首字母顺序排列)。
  • Imagination GPU为边缘智能提供高效率的加速 在“2024奕斯伟计算开发者伙伴大会”上,来自Imagination英国总部的专家发表了主题为《用RISC-V CPU + PowerVR GPU迎接边缘生成式AI的到来》的演讲。
  • 面向AI的下一代以太网技术 随着AI应用的广泛普及和数据流量的迅猛增长,传统以太网技术在延迟、带宽、拥塞控制和高性能可扩展方面天然局限,导致其难以应对AI网络的复杂需求。
  • 智能手机疲软,但超薄柔性玻璃出货量势头正猛 可折叠盖板玻璃必须符合以下所有标准:透明、可折叠、坚固、平整和轻薄,这些基本要素缺一不可。
  • 全球折叠屏手机快速增长,中国品牌压制三星 • 得益于西欧、关键亚洲市场和拉丁美洲市场的增长,以及中国品牌的持续领先,全球折叠屏手机出货量在2024年第二季度同比增长了48%。 • 荣耀凭借其在西欧特别强劲的表现,成为最大的贡献者,成为该地区排名第一的品牌。 • 摩托罗拉的Razr 40系列在北美和拉丁美洲表现良好,为其手机厂商的出货量贡献了三位数的同比增长。 • 我们预计,头部中国手机品牌厂商的不断增加将至少在短期内抑制三星Z6系列在第三季度的发布。
  • AI网络物理层底座: 大算力芯片先进封装技术 AI技术的发展极大地推动了对先进封装技术的需求,在高密度,高速度,高带宽这“三高”方面提出了严苛的要求。
  • 智能手表OLED面板超 60%中国制造 智能手表在新冠肺炎疫情后获得了越发广泛的关注,其功能包括语音、健康检查、运动和活动追踪、GPS、通信和个人数据监控。全球智能手表显示面板的出货量已从2022年的2.59亿片增长到2023年的3.51亿片。到 2024年,Omdia预测智能手表显示面板的出货量将达到3.59亿片,其中TFT LCD占63%,OLED占37%。
  • 无处不在的Arm软硬件生态赋能开发者AI创新 随着计算变得愈发复杂,计算效率的重要性更胜以往。
  • 荣耀拿下欧洲横折手机榜第一 既然可以保留几乎相同的旧款手机,或者以更低的价格购买旧款手机,为什么要购买最新款的智能手机呢?但变化已经到来,智能手机品牌厂商正带着其最前沿的创新技术重返欧洲市场……
广告
广告
热门推荐
广告
广告
广告
EE直播间
在线研讨会
广告
广告
向右滑动:上一篇 向左滑动:下一篇 我知道了