鸿蒙内核

Android小贾12 天前
驱动开发·移动开发·harmonyos·openharmony·鸿蒙内核
移植案例与原理 - XTS子系统之应用兼容性测试套件(1)本文主要通过实例分析下ACTS应用兼容性测试套件移植案例,以及移植过程中特定的操作的原理。主要讲述的是轻量系统兼容性测试。轻量系统因系统能力限制,兼容性测试在系统初始化阶段进行;并且各设备烧录工具存在差异,导致自动化工具(xDevice工具)无法实现真正的自动适配,因此认证执行方式不对合作伙伴进行限制。流程如下:
Android小贾14 天前
驱动开发·笔记·移动开发·harmonyos·openharmony·鸿蒙内核
鸿蒙轻内核Kconfig使用笔记鸿蒙轻内核使用Kconfig进行图形化配置,本文专门讲解下鸿蒙轻内核LiteOS-M和LiteOS-A的图形化配置方法。本文中所涉及的源码,均可以在开源站点 https://gitee.com/openharmony/kernel_liteos_a 、 https://gitee.com/openharmony/kernel_liteos_m 获取。本文首先简单介绍下kconfig的基础知识,接着介绍下如何使用图形化配置。
Android小贾16 天前
性能优化·移动开发·harmonyos·openharmony·内存优化·鸿蒙开发·鸿蒙内核
鸿蒙轻内核A核源码分析系列五 虚实映射(3)虚拟物理内存映射从上文可知,用户程序加载启动时,会将代码段、数据段映射进虚拟内存空间,此时并没有物理页做实际的映射;程序执行时,如下图(图片来自OpenHarmony docs开源站点)粗箭头所示,CPU访问虚拟地址,通过MMU查找是否有对应的物理内存,若该虚拟地址无对应的物理地址则触发缺页异常,内核申请物理内存并将虚实映射关系及对应的属性配置信息写进页表,并把页表条目缓存至TLB,接着CPU可直接通过转换关系访问实际的物理内存;若CPU访问已缓存至TLB的页表条目,无需再访问保存在内存中的页表,可加快查找速度。本小节我
Android小贾16 天前
驱动开发·移动开发·嵌入式·harmonyos·openharmony·鸿蒙内核
鸿蒙轻内核A核源码分析系列五 虚实映射(5)虚实映射解除虚实映射解除函数LOS_ArchMmuUnmap解除进程空间虚拟地址区间与物理地址区间的映射关系,其中参数包含MMU结构体、解除映射的虚拟地址和解除映射的数量count,数量的单位是内存页数。 ⑴处函数OsGetPte1用于获取指定虚拟地址对应的L1页表项数据。⑵处计算需要解除的无效映射的数量,后文再详细分析该函数。如果页表项映射类型为L1 Section,并且虚拟地址1MiB对齐,映射的数量超过256,则执行⑶解除映射Section,后文详细分析函数OsUnmapSection。如果页表项映射类型为Pa
Android小贾17 天前
移动开发·harmonyos·openharmony·鸿蒙开发·鸿蒙内核·鸿蒙嵌入式
鸿蒙轻内核A核源码分析系列五 虚实映射(2)虚实映射初始化在文件kernel/base/vm/los_vm_boot.c中的系统内存初始化函数OsSysMemInit()会调用虚实映射初始化函数OsInitMappingStartUp()。该函数代码定义在文件arch/arm/arm/src/los_arch_mmu.c,代码如下。⑴处函数使TLB失效,清理虚实映射缓存数据,涉及些cp15寄存器和汇编,后续再分析。⑵处函数切换到临时TTB。⑶处设置内核地址空间的映射。下面分别详细这些函数代码。
Android小贾17 天前
驱动开发·移动开发·harmonyos·openharmony·系统开发·鸿蒙内核
鸿蒙轻内核A核源码分析系列四(3) 虚拟内存函数LOS_RegionAlloc用于从地址空间中申请空闲的虚拟地址区间。参数较多,LosVmSpace *vmSpace指定虚拟地址空间,VADDR_T vaddr指定虚拟地址,当为空时,从映射区申请虚拟地址;当不为空时,使用该虚拟地址。如果该虚拟地址已经被映射,会先相应的解除映射处理等。size_t len指定要申请的地区区间的长度。UINT32 regionFlags指定地区区间的标签。VM_OFFSET_T pgoff指定内存页偏移值。
Android小贾17 天前
驱动开发·移动开发·harmonyos·openharmony·鸿蒙内核
鸿蒙轻内核A核源码分析系列五 虚实映射(6)虚拟映射修改转移函数LOS_ArchMmuChangeProt用于修改进程空间虚拟地址区间的映射保护属性,其中参数archMmu为进程空间的MMU结构体,vaddr为虚拟地址,count为映射的页数,flags为映射使用的新标签属性信息。其中函数名称中的Prot是英文Protect的简写。⑴处对参数进行校验,⑵处查询虚拟地址映射的物理地址,如果没有映射,则执行⑶把虚拟地址增加1个内存页大小继续修改下一个内存页的映射保护属性。如果存在映射,则执行⑷处代码。先解除当前内存页的映射,然后执行⑸使用新的映射属性重新映射,⑹处虚拟
Android小贾18 天前
移动开发·harmonyos·openharmony·鸿蒙开发·鸿蒙内核
鸿蒙轻内核调测-内存调测-内存泄漏检测内存泄漏检测机制作为内核的可选功能,用于辅助定位动态内存泄漏问题。开启该功能,动态内存机制会自动记录申请内存时的函数调用关系(下文简称LR)。如果出现泄漏,就可以利用这些记录的信息,找到内存申请的地方,方便进一步确认。
Android小贾19 天前
嵌入式硬件·harmonyos·openharmony·鸿蒙开发·鸿蒙内核·鸿蒙嵌入式·进程关联
鸿蒙轻内核A核源码分析系列七 进程管理 (3)本文记录下进程相关的初始化函数,如OsSystemProcessCreate、OsProcessInit、OsProcessCreateInit、OsUserInitProcess、OsDeInitPCB、OsUserInitProcessStart等。
Android小贾19 天前
驱动开发·移动开发·harmonyos·openharmony·进程通信·鸿蒙内核·liteos-a内核
鸿蒙轻内核A核源码分析系列七 进程管理 (2)本文先熟悉下进程管理的文件kernel\base\core\los_process.c中的内部接口,读读代码,做些记录。
Android小贾20 天前
数据结构·移动开发·harmonyos·openharmony·鸿蒙内核
鸿蒙轻内核A核源码分析系列二 数据结构-位图操作在进一步分析之前,本文我们先来熟悉下OpenHarmony鸿蒙轻内核提供的位操作模块,在互斥锁等模块对位操作有使用。位操作是指对二进制数的bit位进行操作。程序可以设置某一变量为状态字,状态字中的每一bit位(标志位)可以具有自定义的含义。
Android小贾21 天前
c++·移动开发·harmonyos·openharmony·鸿蒙开发·liteos-a·鸿蒙内核
鸿蒙轻内核A核源码分析系列六 MMU协处理器(2)在arch\arm\arm\include\arm.h文件中,封装了CP15协处理器相关的寄存器操作汇编函数。我们主要看下MMU相关的部分。
Android小贾22 天前
移动开发·harmonyos·openharmony·鸿蒙开发·鸿蒙内核
鸿蒙轻内核A核源码分析系列六 MMU协处理器(1)在前面系列分析虚实映射时,涉及到了一些MMU协处理器与相关的汇编代码没有深入讲解。本文来专门分析那些协处理器与汇编代码。
Android小贾23 天前
c语言·开发语言·移动开发·harmonyos·openharmony·鸿蒙开发·鸿蒙内核
鸿蒙轻内核M核源码分析系列二十 Newlib CLiteOS-M内核LibC实现有2种,可以根据需求进行二选一,分别是musl libC和newlibc。本文先学习下Newlib C的实现代码。文中所涉及的源码,均可以在开源站点https://gitee.com/openharmony/kernel_liteos_m 获取。
Android小贾23 天前
驱动开发·嵌入式硬件·移动开发·harmonyos·openharmony·鸿蒙开发·鸿蒙内核
鸿蒙轻内核M核源码分析系列九 互斥锁Mutex多任务环境下会存在多个任务访问同一公共资源的场景,而有些公共资源是非共享的临界资源,只能被独占使用。鸿蒙轻内核使用互斥锁来避免这种冲突,互斥锁是一种特殊的二值性信号量,用于实现对临界资源的独占式处理。另外,互斥锁可以解决信号量存在的优先级翻转问题。用互斥锁处理临界资源的同步访问时,如果有任务访问该资源,则互斥锁为加锁状态。此时其他任务如果想访问这个临界资源则会被阻塞,直到互斥锁被持有该锁的任务释放后,其他任务才能重新访问该公共资源,此时互斥锁再次上锁,如此确保同一时刻只有一个任务正在访问这个临界资源,保证
Android小贾23 天前
驱动开发·嵌入式硬件·移动开发·harmonyos·openharmony·鸿蒙开发·鸿蒙内核
鸿蒙轻内核M核源码分析系列十七(3) 异常信息ExcInfo本文中所涉及的源码,以OpenHarmony LiteOS-M内核为例,均可以在开源站点 https://gitee.com/openharmony/kernel_liteos_m 获取。鸿蒙轻内核异常钩子模块代码主要在components\exchook目录下。
Android小贾24 天前
嵌入式硬件·移动开发·harmonyos·openharmony·鸿蒙开发·鸿蒙内核
鸿蒙轻内核M核源码分析系列十七(2) 异常钩子函数的注册操作本文中所涉及的源码,以OpenHarmony LiteOS-M内核为例,均可以在开源站点https://gitee.com/openharmony/kernel_liteos_m 获取。鸿蒙轻内核异常钩子模块代码主要在components\exchook目录下。异常钩子函数的注册、解注册、异常钩子类型定义在utils\los_debug.h|.c。
Android小贾1 个月前
数据结构·驱动开发·移动开发·harmonyos·openharmony·鸿蒙内核
鸿蒙轻内核M核源码分析系列六 任务及任务调度(3)任务调度模块调度,Schedule也称为Dispatch,是操作系统的一个重要模块,它负责选择系统要处理的下一个任务。调度模块需要协调处于就绪状态的任务对资源的竞争,按优先级策略从就绪队列中获取高优先级的任务,给予资源使用权。本文我们来一起学习下调度模块的源代码,文中所涉及的源代码,所涉及的源码,以OpenHarmony LiteOS-M内核为例,均可以在开源站点 https://gitee.com/openharmony/kernel_liteos_m 获取。
Android小贾1 个月前
数据结构·驱动开发·嵌入式硬件·移动开发·harmonyos·openharmony·鸿蒙内核
鸿蒙轻内核M核源码分析系列六 任务及任务调度(2)任务模块任务是操作系统一个重要的概念,是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源,并独立于其它任务运行。鸿蒙轻内核的任务模块可以给用户提供多个任务,实现任务间的切换,帮助用户管理业务程序流程。本文我们来一起学习下任务模块的源代码,所涉及的源码,以OpenHarmony LiteOS-M内核为例,均可以在开源站点 https://gitee.com/openharmony/kernel_liteos_m 获取。
Android小贾1 个月前
网络·单片机·嵌入式硬件·harmonyos·openharmony·硬件开发·鸿蒙内核
浅谈OpenHarmony LiteOS-A内核之基础硬件——中断控制器GIC400OpenAtom OpenHarmony(以下简称“OpenHarmony”)采用多内核架构,支持Linux内核的标准系统、LiteOS-A的小型系统、LiteOS-M的轻量系统。