1.OpenHarmony轻量设备Hi3861芯片开发板启动流程分析
2.开源鸿蒙和华为鸿蒙区别
3.OpenHarmony 代码学习4:Ability子系统 源码解析(更新太快,码多跟不上步伐了)
4.OpenHarmony—内核对象事件之源码详解
5.OpenHarmony代码下载编译及源码跳转配置
OpenHarmony轻量设备Hi3861芯片开发板启动流程分析
OpenHarmony作为一款覆盖从嵌入式实时物联网操作系统到移动操作系统的码多全面操作系统,其内核包括LiteOS-M、码多LiteOS-A和Linux。码多LiteOS-M是码多专为物联网领域设计的轻量级内核,适合没有MMU的码多小铺铺源码处理器。例如,码多Hi是码多一款集成2.4GHz SoC WiFi芯片,具有高性能位微处理器、码多最大工作频率MHz、码多SRAM KB、码多ROM KB和2MB Flash。码多采用LiteOS-M的码多OpenHarmony开发板,如深开鸿、码多润和软件和小熊派等厂商的码多设备均采用相同的启动流程。
Boot作为操作系统的启动软件,通常称为bootloader,Hi的Boot分为四个部分:RomBoot、FlashBoot、LoaderBoot和CommonBoot。RomBoot负责加载LoaderBoot到RAM,进一步利用LoaderBoot下载镜像到Flash、烧写EFUSE并校验引导FlashBoot。FlashBoot分为AB两面,jenkins 源码安全A面校验成功直接启动,校验失败则尝试B面,B面校验成功会修复A面并引导启动,否则系统会复位重启。LoaderBoot主要负责下载镜像到Flash和烧写EFUSE,而CommonBoot则是FlashBoot与LoaderBoot共享的功能模块。
在分析启动流程时,可以关注编译完成固件中的几个关键部分,如文本段包含源代码函数和字符串常量。通过map文件和asm文件,可以理解编译链接工具生成的全局符号、函数地址及其占用空间和位置。这些文件位于out目录,与操作系统固件平级,有助于分析崩溃原因和跳转关系。
LiteOS-M启动流程从Boot开始,通过跳转调用到内核初始化函数LOS_KernelInit,主要负责内存、中断和任务初始化,为API函数调用准备全局信息。接着,OHOS_Main函数负责调用OpenHarmony系统相关和用户应用相关代码,确保在LOS_start之前任务列表已填充,spring引用源码以实现系统调度。
用户应用的启动原理基于宏定义,展开后调用系统初始化函数。通过链接文件和map文件,可以发现应用代码位于特定的初始化段中。总结而言,最小硬件系统配置后,通过系统初始化、调用OpenHarmony和应用代码,最终启动操作系统。
在没有源代码的情况下,通过对map文件和asm文件的分析,可以有效理解Hi芯片开发板LiteOS-M的启动流程。整个过程从最小硬件系统配置开始,由LOS_KernelInit初始化系统到合适状态,AppInit调用OpenHarmony和应用相关代码,最后由LOS_Start启动操作系统。
开源鸿蒙和华为鸿蒙区别
开源鸿蒙和华为鸿蒙的主要区别在于它们的开发方式、应用场景以及源代码的开放性。
首先,开源鸿蒙是由华为开发并捐献给开放原子基金会的操作系统,其源代码完全开放,供所有厂商免费使用,板块强弱源码并根据自身需求进行定制。这种开放性使得开源鸿蒙可以灵活应用于多种智能终端设备,如物联网设备、智能手表等。它鼓励生态伙伴进行二次开发和定制,以推动系统的生态繁荣和多样性。因此,开源鸿蒙具有广泛的适用性和强大的生态潜力。
其次,华为鸿蒙则是华为公司自主研发的商用操作系统,主要面向华为自有手机、平板、耳机等移动设备。HarmonyOS基于开源项目OpenHarmony进行开发,但添加了华为自研的组件和功能,形成了一个完整的商用版本。与开源鸿蒙不同,HarmonyOS的源代码不开放给外部厂商,确保了系统的安全性和稳定性。它采用了分布式架构和微内核设计,支持跨设备无缝协同体验,为用户提供更加流畅、安全和便捷的hash源码详解使用体验。同时,HarmonyOS还针对华为自有设备进行了深度优化,以充分发挥硬件性能。
举个例子来说明这两者的区别:假设有一个智能家居品牌想要开发一套自己的操作系统来控制其智能家居产品。如果选择开源鸿蒙,该品牌可以获取开源鸿蒙的源代码,并根据自己的需求进行定制和开发,打造出符合自身特色的操作系统。而如果选择使用华为鸿蒙,则该品牌无法直接获取其源代码进行定制,而是需要使用华为提供的API和开发工具来进行应用开发,且应用只能在支持华为鸿蒙的设备上运行。
总的来说,开源鸿蒙和华为鸿蒙在开发方式、应用场景以及源代码开放性方面存在显著差异。开源鸿蒙注重开放性和生态多样性,鼓励二次开发和定制;而华为鸿蒙则更注重安全性和稳定性,针对华为自有设备进行深度优化。两者各有优势和特点,共同推动了鸿蒙系统的发展。
OpenHarmony 代码学习4:Ability子系统 源码解析(更新太快,跟不上步伐了)
深入探讨OpenHarmony代码学习中关于Ability子系统的源码解析,重点关注基于monthly_的代码架构与配置。
在源码解析中,SystemAbility的配置sa_profile至关重要,它确保了以c++实现的SA在加载注册逻辑时能够完成SA的注册,反之,未配置profile的System Ability将不会完成注册。可见abilitymgr等系统服务SA以特定方式运行,如.xml所示,ams的libabilityms.z.so在foundation进程中启动,并在启动后即向samgr组件注册SystemAbility,实现本地跨IPC访问。
进一步,分析AbilityManagerService作为SystemAbility的管理器,提供管理Ability生命周期的管理能力。以AbilityManagerService::StartAbility为起点,此方法支持4种Startability,其中IRemoteObject属于分布式软总线子系统的ipc组件,负责进程间通信。理解IPC与RPC机制,IPC与RPC在实现跨进程通信中扮演重要角色,IPC使用Binder驱动,适合设备内跨进程通信,而RPC采用软总线驱动,适用于跨设备跨进程通信。客户端与服务器通过客户端-服务器模型进行通信,通过代理获取服务提供方的接口进行数据交互。三方应用通过FA提供的接口绑定服务提供方的Ability,获取代理,实现通信。
在StartAbility中,callerToken由AbilityRuntime::AbilityContextImpl::StartAbility传入的AbilityContextImpl成员变量token_决定,通常指要启动的Ability。此调用链将在后续应用启动流程中总结,具体路径可参考官网介绍。
继续深入代码分析,观察StartAbility中的调用链,最终向BMS调用StartAbilityInner方法。根据ability类型的不同,启动方式也不同,已在代码段中进行了标注。在OpenHarmony代码学习中,PageAbility作为具备ArkUI实现的Ability,是最具直观性的用户可见并可交互的实例,通常由missionListManager启动。
OpenHarmony—内核对象事件之源码详解
对于嵌入式开发和技术爱好者,深入理解OpenHarmony的内核对象事件源码是提升技能的关键。本文将通过数据结构解析,揭示事件机制的核心原理,引导大家探究任务间IPC的内在逻辑。
关键数据结构
首先,了解PEVENT_CB_S数据结构,它是事件的核心:uwEventID标识任务的事件类型,个位(保留位)可区分种事件;stEventList双向循环链表是理解事件的核心,任务等待事件时会挂载到链表,事件触发后则从链表中移除。
事件初始化
事件控制块由任务自行创建,通过LOS_EventInit初始化,此时链表为空,表示没有事件发生。任务通过创建eventCB指针并初始化,开始事件管理。
事件写操作
任务通过LOS_EventWrite写入事件,可以一次设置多个事件。1处的逻辑允许一次写入多个事件。2-3处检查事件链表,唤醒等待任务,通过双向链表结构确保任务顺序执行。
事件读操作
轻量级操作系统提供了两种事件读取方式:LOS_EventPoll支持主动检查,而LOS_EventRead则为阻塞读。1处区分两种读取模式,2-4处根据模式决定任务挂起或直接读取。
事件销毁操作
事件使用完毕后,需通过LOS_EventClear清除事件标志,并在LOS_EventDestroy中清理事件链表,确保资源的正确释放。
总结
通过以上的详细分析,OpenHarmony的内核事件机制已清晰可见。掌握这些原理,开发者可以更自如地利用事件API进行任务同步,并根据需要自定义事件通知机制,提升任务间通信的灵活性。
OpenHarmony代码下载编译及源码跳转配置
本文旨在指导在Linux(如Ubuntu .和.,其他系统可参考)环境下下载和编译OpenHarmony(OH)代码,并配置Visual Studio Code(VSCode)以实现Native框架(C++)代码的智能跳转,以提升阅读OH源码的便捷性。1. 下载与编译
从OH官网下载链接(gitee.com/openharmony/d...)获取代码。进入代码根目录后,执行build.sh脚本,例如针对rk开发板的编译命令会包含选项`--gn-flags="--export-compile-commands"`,用于生成compdb数据库,以备后续使用。2. VSCode插件与配置
在编译过程中,安装VSCode的clangd插件,它与compdb文件配合。记得禁用默认的C/C++插件。接着,使用VSCode通过SSH(Windows和macOS用户适用)访问OH源代码目录,创建.vscode文件夹,其中包含settings.json。3.1. 插件安装与启用
在settings.json中填写以下配置:- clangd.path: 指定OH预构建的clangd路径。
- --compile-commands-dir: 编译产生的compdb文件路径,例如在rk上为out/rk/compile_commands.json,需根据实际编译产品找到相应路径。
- --query-driver: 指定OH预构建的clang编译器路径。
3.2. VSCode配置
关闭并重新打开VSCode,当C++文件(如foundation文件夹下的Native C++代码)打开时,clangd将开始索引,索引完成后即可享受代码跳转功能。