Huawei LiteOS基于Cortex-M4 GD32F4平台移植

1|01、Huawei LiteOS简介

  • Huawei LiteOS源码获取:
    https://github.com/LiteOS/LiteOS,
    https://gitee.com/LiteOS/LiteOS
    Huawei LiteOS遵循BSD-3开源许可协议。

  • Huawei LiteOS发布于2015年5月的华为网络大会上,Huawei LiteOS内核是华为面向IoT领域,构建的轻量级物联网操作系统,可广泛应用于智能家居、个人穿戴、车联网、城市公共服务、制造业等领域(涵盖抄表、停车、路灯、环保、共享单车、物流等)。
    Huawei LiteOS开源项目目前支持 ARM64、ARM Cortex-A、ARM Cortex-M0,Cortex-M3,Cortex-M4,Cortex-M7 等芯片架构。

  • Huawei LiteOS内核集成了任务管理、内存管理、时间管理、通信机制、中断管理、队列管理、事件管理以及定时器等操作系统基础组件,具备高实时性、高稳定性及超小内核等特点。其基础内核体积可裁剪至不到10K,满足低功耗需求,并支持功能静态裁剪,灵活适应不同应用场景。

  • 优势
    高实时性,高稳定性。
    超小内核,基础内核体积可以裁剪至不到10K。
    低功耗,配套芯片整体功耗低至uA级。
    支持功能静态裁剪。

另外LiteOS不支持KEIL MDK开发工具,主要原因是LiteOS有一套完整的开发工具链,包括GCC编译器和GDB调试器。

2|02、Huawei LiteOS内核介绍

2|12.1内核架构

2|22.2源码目录结构

一级目录 二级目录 三级目录 说明
arch arm cortex_a_r A核架构支持
cortex_m M核架构支持
arm64 arm64架构支持
csky cskyv2 cskyv2架构支持
riscv rvm32 riscv架构支持
build LiteOS编译系统需要的配置及脚本
compat cmsis liteos提供的CMSIS-RTOS 1.0和2.0接口
components ai ai(基于mindspore)算子库实现
connectivity agent_tiny agent_tiny端云互通组件,包括公共头文件、示例代码、客户端实现代码、操作系统适配层代码
lwm2m lwm2m协议实现
mqtt MQTT开源协议实现
nb_iot LiteOS NB-IoT API
fs devfs devfs文件系统
fatfs fatfs文件系统
kifs kifs文件系统
littlefs littlefs文件系统
ramfs ramfs文件系统
spiffs spiffs文件系统
vfs 虚拟文件系统
gui 开源LittlevGL图形库
language 语言相关组件,含lua
lib cjson c语言json库
log 日志等级控制
media 媒体相关组件,含libpng、openexif、opus、upup、
net at_device AT设备适配层
at_frame LiteOS AT框架API
ifconfig ifconfig shell命令实现
los_iperf 网络带宽测试工具
lwip/lwip_port lwip驱动及OS适配代码
lwip/lwip-2.1.2 lwip协议实现
lwip/ppp_port lwip协议ppp端口支持
pcap 网络抓包工具
ping ping shell命令实现
sal socket通讯支持
tftp_server tftp服务
ota 固件升级代码
security mbedtls/mbedtls_port mbed TLS的OS适配代码
mbedtls/mbedtl-2.16.8 mbed TLS协议实现
openssl openssl协议
sensorhub include sensor manager头文件
src sensor manager的源码实现
utility 解析工具,含bidireference、curl、fastlz、freetype、harfbuzz、iconv、iniparser、json-c、jsoncpp、libxml2、sqlite、thttpd、tinyxml2
demos agenttiny_lwm2m lwm2m协议 demo
agenttiny_mqtt mqtt 协议demo
ai ai的demo
dtls_server dtls协议demo
fs 文件系统demo
gui gui的demo
ipv6_client Ipv6协议demo
kernel api 供开发者测试LiteOS内核的demo示例代码
include API功能头文件存放目录
language 语言相关组件的demo
lms LMS的demo
media 媒体相关组件的demo
nbiot_without_atiny NB-IoT demo
sensorhub gyro 基于sensorhub传感框架定时读取MPU6050陀螺仪原始数据的demo
trace Trace的demo
utility 解析工具的demo
doc 此目录存放的是LiteOS的使用文档和API说明等文档
driver base LiteOS驱动框架
interrupt LiteOS系统中断接口
timer LiteOS系统定时器接口
uart LiteOS系统串口接口
include components各个模块所依赖的头文件
kernel base LiteOS基础内核代码,包括任务、中断、软件定时器、队列、事件、信号量、互斥锁、tick等功能
debug LiteOS内核调测代码,包括队列、信号量、互斥锁及任务调度的调测
include LiteOS基础内核内部使用的头文件
mem LiteOS中的内存管理相关代码
sched 任务调度支持,包括对多核的调度支持
shellcmd LiteOS中与基础内核相关的shell命令,包括memcheck、task、systeminfo、swtmr等
extended cppsupport C++兼容适配层底层接口
cpup CPU占用率统计接口
include extended目录所需的头文件
lms LMS(实时检测内存操作合法性算法)的库文件
lowpower 低功耗框架相关代码
trace trace事件跟踪,用于实时记录系统运行轨迹
include LiteOS开源内核头文件
init LiteOS内核初始化相关代码
lib huawei_libc LiteOS自研libc库和适配的posix接口
libc LiteOS适配的musl libc库
libsec 华为安全函数库
zlib 开源zlib库
osdepends liteos LiteOS提供的部分OS适配接口
shell src 实现shell命令的代码,支持基本调试功能
include shell头文件
targets 通用板级支持包、开发板的开发工程源码包
tools build LiteOS支持的开发板编译配置文件
menuconfig LiteOS编译所需的menuconfig脚本
Makefile LiteOS Makefile
.config 开发板的配置文件,如果用户不重新选择开发板,默认为野火挑战者STM32F429开发板的配置文件

2|32.3内核启动流程

3|03、LiteOS在keil MDK上移植

1|01、准备LiteOS源码、一个GD32F4xx裸机工程。

版本不同略有差别,组件功能可自行移植。

1|02、建立如下目录:

工程目录:

LiteOS目录:

1|03、MDK工程构建

1|03.1在Keil的IDE环境中,分别添加以下4个分组:
LiteOS/kernel LiteOS/arch LiteOS/cmsis LiteOS/config
1|03.2添加源码到工程
  • 到源码LiteOS的targets目录下找到GD32工程参考,拷贝MDK汇编启动文件los_startup_keil.s并添加到工程。

  • 添加LiteOS汇编文件..\LiteOS\arch\arm\arm-m\cortex-m4\keil

  • 添加c文件
..\LiteOS\arch\arm\arm-m\src ..\LiteOS\kernel,内核下所有源文件都添加 ..\LiteOS\config,targets目录下找到OS_CONFIG目录并拷贝至自定义目录..\LiteOS\config

  • 包含分组中所需头文件
..\LiteOS\arch\arm\arm-m\include ..\LiteOS\arch\arm\common\cmsis ..\LiteOS\kernel\include ..\LiteOS\kernel\extended\include ..\LiteOS\kernel\base\include ..\LiteOS\cmsis\1.0 ..\LiteOS\cmsis\2.0 ..\LiteOS\cmsis ..\LiteOS\config

4|04、最后编译测试

  • 勾选Use MicroLIB。
  • ARM Comoiler默认选择version5。
  • ScatterFile分散加载文件适配LiteOS使用如下格式:
; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x00300000 { ; load region size_region ER_IROM1 0x08000000 0x00300000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) * (LOS_HEAP_INFO) } VECTOR 0x20000000 0x400 { ; Vector * (.data.vector) } RW_IRAM1 0x20000400 0x0002F800 { ; RW data ;.ANY (+RW +ZI) * (.data, .bss) * (LOS_HEAP) } ARM_LIB_STACKHEAP 0x2002FC00 EMPTY 0x400 { ;LiteOS MSP } }

编译烧录任务运行成功并点亮LED。


__EOF__

本文作者xiaohu
本文链接https://www.cnblogs.com/xiaohuzaixue/p/18686977.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   EternalH  阅读(267)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示