LiteOS-A 内核
移植概述
移植场景
LiteOS-A 当前支持 ARMv7-a 指令集架构,如果三方芯片为 ARMv7-a 架构,可以进行内核基础适配;否则还需要先根据芯片的架构来新增内核对该芯片架构的支持,这个工作较为复杂,不在这篇文章范围内。
基础适配
LiteOS-A 提供系统运行所需的系统初始化流程和定制化配置选项。移植过程中,需要关注初始化流程中跟硬件配置相关的函数。
如下图所示,LiteOS-A 的初始化流程主要包含以下七步:
1.新增 target_config.h 文件,并且编写单板内存相关的配置宏 DDR_MEM_ADDR 和 DDR_MEM_SIZE,分别表示内存起始地址和内存的长度,预链接脚本 board.ld.S 会根据这两个宏进行展开生成链接脚本 board.ld。
2.新增定义 MMU 映射全局数组(g_archMmuInitMapping),指定各个内存段属性及虚实映射关系,内核启动阶段根据该表建立内存映射关系。
3.如果是多核,需要新增定义从核操作函数句柄(struct SmpOps),其中 SmpOps->SmpCpuOn 函数需要实现唤醒从核的功能;接着定义 SmpRegFunc 函数,调用 LOS_SmpOpsSet 接口进行句柄注册;最后通过启动框架完成注册过程,即 LOS_MODULE_INIT(SmpRegFunc, LOS_INIT_LEVEL_EARLIEST)。
4.链接阶段根据链接脚本 board.ld 生成内核镜像。
5.单核 CPU 镜像运行入口为汇编文件 reset_vector_up.S,多核 CPU 的入口为 reset_vector_mp.S,在汇编文件中进行中断向量表初始化、MMU 页表初始化等操作。
6.reset_vector.S 汇编代码最终会跳转到 C 语言的 main 函数,进行硬件时钟、软件定时器、内存和任务等初始化,这个过程会依赖 target_config.h 的特性宏配置,最后会创建 SystemInit 任务,并且开启任务调度 OsSchedStart()。
7.SystemInit 任务在单板代码中实现,其中调用 DeviceManagerStart 函数进行 HDF 驱动初始化,这个过程会调用单板代码中的驱动配置文件 hdf.hcs 以及 drivers 源码实现
整体启动流程如下图所示:
图 1 整体启动流程

从图 1 中可以看到,内核基础适配需要单板进行适配的代码包含三部分:
- 新增 target_config.h 文件,其中新增单板硬件配置参数和特性开关的配置参数,具体说明如下:
表 1 target
本文详细介绍了鸿蒙系统LiteOS-A内核的移植步骤,包括基础适配、编程样例和验证过程。移植涉及目标配置、MMU映射、中断向量表初始化等关键环节。此外,还提供了《鸿蒙(Harmony OS)开发学习手册》的链接资源,帮助开发者深入学习鸿蒙开发技术。
最低0.47元/天 解锁文章
2525

被折叠的 条评论
为什么被折叠?



