【鸿蒙】小型系统LiteOS-A内核

本文详细介绍了鸿蒙系统LiteOS-A内核的移植步骤,包括基础适配、编程样例和验证过程。移植涉及目标配置、MMU映射、中断向量表初始化等关键环节。此外,还提供了《鸿蒙(Harmony OS)开发学习手册》的链接资源,帮助开发者深入学习鸿蒙开发技术。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值