0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

王程 来源: jf_75796907 作者: jf_75796907 2024-02-29 16:16 次阅读

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 整体启动流程

wKgaomXgPHuAFOY_AADXtfIfvnU676.png

从图 1 中可以看到,内核基础适配需要单板进行适配的代码包含三部分:

新增 target_config.h 文件,其中新增单板硬件配置参数和特性开关的配置参数,具体说明如下:

表 1 target_config.h 配置项说明

wKgZomXgPIeAKffvAABaqujn2k0998.png

SystemInit 函数用于单板用户态业务初始化,典型的初始化场景如图 2 所示:
图 2 业务启动流程

wKgaomXgPJGACdXgAAAuNs3CjmU203.png

main 函数用于内核基础初始化和单板内核态业务初始化,流程如下图 3 所示,整体由内核启动框架主导初始化流程,图中浅蓝色部分为启动框架中可接受外部模块注册启动的阶段。

注意:
同一层级内的模块不能有依赖关系。
图 3 内核启动框架

wKgaomXgPKCASjxMAAlZmjg4a_0462.png

表 2 启动框架层级

wKgaomXgPK2Aa4U9AAEZGTRPe2s140.png

可通过查看系统编译生成文件 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.……

wKgaomXW6N2AJp9uAAQXRxEAprs547.png

HarmonyOS概念:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.系统定义
2.技术框架
3.技术特性
4.系统安全

wKgaomXW6OSAFcCRAAV2zd2X_1s891.png

快速入门:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.基本概念
2.构建第一个ArkTS应用
3.……

wKgZomXW6PuAA7wEAAKx6By_2Z8377.png

开发基础知识:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS
9…

wKgZomXW6QaAM4niAAQzrXUUPik914.png

基于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………

wKgZomXW6RKATahiAAKz-zSMnR4040.png

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    452

    文章

    50117

    浏览量

    420311
  • 内核
    +关注

    关注

    3

    文章

    1357

    浏览量

    40176
  • Liteos
    +关注

    关注

    10

    文章

    32

    浏览量

    47517
  • 鸿蒙
    +关注

    关注

    57

    文章

    2301

    浏览量

    42663
  • HarmonyOS
    +关注

    关注

    79

    文章

    1964

    浏览量

    29942
收藏 人收藏

    评论

    相关推荐

    浅谈OpenHarmony LiteOS-A内核之基础硬件——中断控制器GIC400

    OpenHarmony(以下简称“OpenHarmony”)采用多内核架构,支持Linux内核的标准系统LiteOS-A小型
    的头像 发表于 10-26 23:00 2154次阅读

    【精品连载】韦东山老师带你上手鸿蒙内核Liteos-a开发

    验Harmony系统。作为Harmony系统内核liteos-a,设计精巧而轻薄,只需要简单移植就可以在第3方芯片上运行。本课程注重实战,将在第3方芯片上移植
    发表于 09-18 18:05

    鸿蒙介绍--韦东山老师带你上手鸿蒙内核Liteos-a开发

    使用这些完整系统。所以鸿蒙要对标的是Windows、安卓、IOS这类完整系统,而Linux只是鸿蒙支持的内核之一。
    发表于 09-19 08:59

    基于liteos-a,能方便地开发GUI程序吗?

    现在我们知道鸿蒙内核liteos-a,那么基于liteos-a,能方便地开发GUI程序吗?
    发表于 09-30 10:03

    韦东山鸿蒙系统移植课程:给IMX6ULL编译Liteos-a

    /rootfs.jffs2 // 改个名易辨认,烧写工具使用rootfs.jffs2 如果一切正常,结果如下: 上面得到的liteos.bin、rootfs.jffs2可以使用烧写工具直接运行。请参考《第3篇 体验鸿蒙内核
    发表于 09-30 15:51

    鸿蒙是一套庞大的体系,底层支持很多内核吧?liteos-m, liteos-a,linux 都支持?

    大家都知道鸿蒙是一套庞大的体系,那么底层应该支持很多内核吧?liteos-m, liteos-a,linux 都支持吗?
    发表于 10-10 10:08

    【HarmonyOS】鸿蒙Liteos-a内核移植手册(PDF下载)

    Liteos-a鸿蒙的体系很庞大,看下图,内核只是其中之一:Liteos-a是什么Liteos-a是一个
    发表于 10-27 10:37

    鸿蒙liteos-a如何启动第一个用户进程init_lite

    负责在内核启动之后,应用启动之前的操作系统中间层的启动。涉及以下模块:·init启动引导支持使用LiteOS-A内核的平台,当前包括:Hi3516DV300平台和Hi3518EV300
    发表于 12-10 15:02

    LiteOS-A内核

    是面向IoT领域构建的轻量级物联网操作系统。在IoT产业高速发展的潮流中,OpenHarmony LiteOS-A内核能够带给用户小体积、低功耗、高性能的体验以及统一开放的生态系统能力
    发表于 04-23 17:10

    OpenHarmony LiteOS-A内核介绍

    简介OpenHarmony LiteOS-A内核是基于Huawei LiteOS内核演进发展的新一代内核,Huawei
    发表于 08-19 10:46

    Liteos-a是什么?为什么还要开发Liteos-a呢?

    鸿蒙是什么?Liteos-a是什么?为什么还要开发Liteos-a呢?移植Liteos-a,需要哪些资料?
    发表于 10-13 06:05

    在100ASK_IMX6ULL上移植Liteos-a

    鸿蒙内核Liteos-a的官方代码目前只支持海思的芯片,我作为首批开发者入驻华为一个多月,成功在100ASK_IMX6ULL上移植了Liteos-a。本文先让大家体验一下
    发表于 01-14 08:44

    VectorCAST/QA如何在LiteOS-A内核上实现系统白盒测试

    本文将通过演示实例介绍VectorCAST/QA如何在LiteOS-A内核上实现系统白盒测试,获取被测程序的代码覆盖信息。具体实现在支持sudo超级用户模式的Ubuntu 18.04(或以上)版本中
    的头像 发表于 06-26 16:21 9252次阅读
    VectorCAST/QA如何在<b class='flag-5'>LiteOS-A</b><b class='flag-5'>内核</b>上实现<b class='flag-5'>系统</b>白盒测试

    鸿蒙liteos-a系统入门实战直播亮点

    直播亮点 鸿蒙官方开发板功能讲解,不同设备的硬件和软件差异比较。 直播大纲 1、hi3518板子功能介绍及应用领域; 2、操作系统liteos-a与lite-m,linux差别介绍 3
    的头像 发表于 11-21 09:20 2087次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>liteos-a</b><b class='flag-5'>系统</b>入门实战直播亮点

    Liteos-a内核工作队列的实现原理分析及经验总结——芯海科技PPG芯片CS1262接入OpenHarmony实战

    摘要OpenHarmony系统中使用了liteos-m、liteos-a、linux三种内核,工作队列是linux内核引入的一种异步处理机制
    的头像 发表于 04-26 09:26 1932次阅读
    <b class='flag-5'>Liteos-a</b><b class='flag-5'>内核</b>工作队列的实现原理分析及经验总结——芯海科技PPG芯片CS1262接入OpenHarmony实战