电子说
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_config.h 配置项说明
SystemInit 函数用于单板用户态业务初始化,典型的初始化场景如图 2 所示:
图 2 业务启动流程
main 函数用于内核基础初始化和单板内核态业务初始化,流程如下图 3 所示,整体由内核启动框架主导初始化流程,图中浅蓝色部分为启动框架中可接受外部模块注册启动的阶段。
注意:
同一层级内的模块不能有依赖关系。
图 3 内核启动框架
表 2 启动框架层级
可通过查看系统编译生成文件 OHOS_Image.map 中.rodata.init.kernel.*段内的符号表来了解当前已注册进内核启动框架中的各个模块初始化入口,以及检查新注册的模块初始化入口是否生效。
编程样例
在单板 SDK 文件中
/* 内核启动框架头文件 */ #include "los_init.h" ...... /* 新增模块的初始化函数 */ unsigned int OsSampleModInit(void) { PRINTK("OsSampleModInit SUCCESS!n"); ...... } ...... /* 在启动框架的目标层级中注册新增模块 */ LOS_MODULE_INIT(OsSampleModInit, LOS_INIT_LEVEL_KMOD_EXTENDED);
验证
main core booting up... OsSampleModInit SUCCESS! releasing 1 secondary cores cpu 1 entering scheduler cpu 0 entering scheduler
根据上述系统启动阶段的打印可知,内核在启动时进行了该注册模块的初始化函数调用,完成该模块的初始化操作。
系统启动完毕后进入内核态 shell,能够运行 task 命令能够正常显示即可。
OHOS # help ***shell commands:* arp cat cd chgrp chmod chown cp cpup date dhclient dmesg dns format free help hwi ifconfig ipdebug kill log ls lsfd memcheck mkdir mount netstat oom partinfo partition ping ping6 pmm pwd reset rm rmdir sem shm stack statfs su swtmr sync systeminfo task telnet touch umount uname v2p virstatfs vmm watch writeproc
为了能让大家更好的学习鸿蒙 (OpenHarmony) 开发技术,这边特意整理了《鸿蒙 (OpenHarmony)开发学习手册》,希望对大家有所帮助:
《鸿蒙(Harmony OS)开发学习手册》
入门必看:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.应用开发导读(ArKTS)
2.……
HarmonyOS概念:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.系统定义
2.技术框架
3.技术特性
4.系统安全
快速入门:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.基本概念
2.构建第一个ArkTS应用
3.……
开发基础知识:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS
9…
基于ArkTS 开发:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16………
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !