Huawei LiteOS基于Cortex-M4 GD32F4平台移植
1、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、Huawei LiteOS内核介绍
2.1内核架构

2.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.3内核启动流程

3、LiteOS在keil MDK上移植
1、准备LiteOS源码、一个GD32F4xx裸机工程。
版本不同略有差别,组件功能可自行移植。

2、建立如下目录:
工程目录:

LiteOS目录:

3、MDK工程构建
3.1在Keil的IDE环境中,分别添加以下4个分组:
LiteOS/kernel
LiteOS/arch
LiteOS/cmsis
LiteOS/config
3.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、最后编译测试
- 勾选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。

Huawei LiteOS基于Cortex-M4 GD32F4平台移植的更多相关文章
- 三星为其基于 RISC-V的 Tizen平台移植.NET
最近.NET团队在这篇文章中介绍了对.NET移植的一般政策:https://devblogs.microsoft.com/dotnet/why-dotnet/#binary-distributions ...
- 在秉火STM32F429挑战者开发板上移植Huawei LiteOS指南
昨天在B站上突然看到了一个短视频,是在正点原子的战舰V3开发板上移植华为的Huawei LiteOS操作系统,就是这个视频:看完鸿蒙OS发布会,试用华为的物联网操作系统Lite OS(B站),于是呢, ...
- Huawei LiteOS简介
Huawei LiteOS简介 Huawei LiteOS是华为面向物联网领域开发的一个基于实时内核的轻量级操作系统.本项目属于华为物联网操作系统Huawei LiteOS源码,现有基础内核支持任务管 ...
- 科普干货|漫谈鸿蒙LiteOS-M与HUAWEI LiteOS内核的几大不同
摘要:鸿蒙和LiteOS的内核都是一样的名字,可它们究竟有什么不同呢?一起来对比一下文件吧! HarmonyOS系统 HarmonyOS是一款"面向未来".面向全场景(移动办公.运 ...
- 自学华为IoT物联网_12 Huawei LiteOS基础架构
点击返回自学华为IoT物流网 自学华为IoT物联网_12 Huawei LiteOS基础架构 一.1个Huawei LiteOS Kernel 1.1 huawei LiteOS Kernel基本框架 ...
- MIPS平台移植apache 2.2.7
参考文章: http://wenku.baidu.com/view/94e08a20a5e9856a561260e2.html http://httpd.apache.org/docs/2.4/ins ...
- CH02基于ZYNQ的嵌入式LINUX移植
CH02基于ZYNQ的嵌入式LINUX移植 1.1概述 实验环境: Windows 10 专业版 Vmware workstation 14.1.1 Ubuntu 16.04.3 Xilinx SDx ...
- 基于token的多平台身份认证架构设计
基于token的多平台身份认证架构设计 1 概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格 ...
- 基于ThinkPHP3的微信平台开发_1
微信公众平台是个好东西,具体的就不说了,我直接说技术>_< 下图为目录结构一览: 微信开发 - 文件目录结构 平台功能: 此次开发的平台是面向多微信公众号.微信多公众号主(下面简称号主)的 ...
- php平台移植windows和linux
2015/1/14 今天项目中遇到一个问题,在本地运行没有问题,挂到服务器上,就运行错误.过程中比较粗心,知道导致这样的原因,居然小时漏掉了一些细节. 比如,在php中通过声明__autoload() ...
随机推荐
- ThreeJs-01开发环境搭建
写在前面,好久不见各位,之前一段时间因为一些事情有点忙,但从未停止学习的脚步,也屯了很多笔记,会在未来的时间慢慢发出来,从今天开始一起进入WebGis,threeJs目前大前端发展的一个方向开始学习, ...
- HarmonyOS Next 入门实战 - 导航框架:HMRouter
基础知识 目前官方推荐的最佳解决方案,是官方对于Navigation导航组件的封装,使用更简单便捷.如果熟悉Navigation的话,使用起来很快上手. 首先先集成HMRouter模块 使用命令行安装 ...
- LALR语法分析表
LALR语法分析表 1.LALR(向前看-LR)技术 2.在实践中常用,分析表比规范LR分析表小 LALR(1)项集族的内核的高效计算方法 1.构造G的LR(0)项集族的内核 2.确定自发生的符号 3 ...
- WebSocket事件
优点 双通信,减少延迟 四个主要的Web Socket API事件: ·打开 onopen 当在客户端和服务器建立连接,就会从Web Socket实例触发open事件.它被称为客户端和服务器之间的初始 ...
- 鱼与熊掌可以兼得,腾讯云推出COS on CDC对象存储服务
01 前言 在云计算时代,各个企业的信息基础设施都在进行云化转型,一时间,似乎万物皆可上云.但是在上云过程中,有不少客户遇到过这样的问题:有部分数据出于合规需求,需要在本地存储与处理,怎么办?一些数据 ...
- 实用干货分享(3)- Git常用操作干货分享
官方学习地址 https://git-scm.com/book/zh/v2 简单的代码提交流程 1. git status 查看工作区代码相对于暂存区的差别: 2. git add . 将当前目录下修 ...
- 如何在BASH中将制表符分隔值(TSV)文件转换为逗号分隔值(CSV)文件?(How do I convert a tab-separated values (TSV) file to a comma-separated values (CSV) file in BASH?)
我有一些TSV文件需要转换为CSV文件. BASH中是否有任何解决方案,例如使用awk来转换这些?我可以这样使用sed,但担心它会出错: sed 's/\t/,/g' file.tsv > fi ...
- conda虚拟环境中设置环境变量
引言 使用conda创建虚拟环境就是为了方便管理,各个环境之间的模块是独立的.有时候我们在做项目的时候需要设置一下环境变量才方便实用,但是不想影响到其他的虚拟环境,因此不能再系统的环境变量里面设置. ...
- Qt音视频开发系列文章导航
文章 链接 1-vlc解码播放 https://qtchina.blog.csdn.net/article/details/107742836 2-vlc回调处理 https://qtchina.bl ...
- Qt 6 中的 Qt Extras 模块
一.前言 Qt 6 是有意识地努力使框架更加高效和易于使用的结果. 我们尝试在每个版本中保持所有公共 API 的二进制和源代码兼容性. 但为了使 Qt 成为更好的框架,一些更改是不可避免的. 其中一项 ...