中国移动oneos框架基础及其组件解析

本文详细介绍了中国移动的OneOS操作系统,它是一个轻量级物联网操作系统,支持多种芯片架构和标准接口。OneOS的开发环境基于命令行,采用分层设计,包括内核、组件和安全框架。内核功能包括任务管理、同步通信等,与FreeRTOS有细微差别。系统移植涉及内核适配和组件转换,可能存在效率损失。OneOS支持设备框架、自动初始化、Shell工具和单元测试,还集成了MicroPython。文章还讨论了Python在嵌入式开发中的应用。

<关键字> 中国移动oneos 、开发环境 、开机自启动、 shell 、单元测试、 源码分析

1、oneos系统

1.1 开发手册

OneOS是中国移动针对物联网领域推出的轻量级操作系统,具有可裁剪、跨平台、低功耗、高安全等特点,支持ARM Cortex-M、MIPS、RISC-V等主流芯片架构,兼容POSIX、CMSIS等标准接口,支持MicroPython语言开发,提供图形化开发工具,能够有效提升开发效率并降低开发成本,集成公共组件,适用于安全易用的物联网产品。

移动官网提供完善的oneos开发文档 https://os.iot.10086.cn/v2/doc/homePage
在这里插入图片描述

也可参考RT-Thread的资料,https://www.rt-thread.org/document/site/#/

1.2 开发工具

OneOS开发环境是基于命令行的OneOS-Cube,在对应工程目录下,执行menuconfig配置系统,scons编译构造。具体操作说明:https://os.iot.10086.cn/v2/doc/detailPage/documentHtml?idss=157071776529260544&proId=156799478777782272
在这里插入图片描述

1.3 软件框架

OneOS总体架构采用分层设计,主体由驱动、内核、组件、安全框架组成,采用一个轻量级内核加多个系统组件的模式。
在这里插入图片描述
与freeRTOS只包括内核相比,oneos支持通用组件或第三方库,尤其对接移动平台方便,遵循 Apache 2.0 license 开源协议,任意使用。

1.4 内核

Oneos内核提供任务管理调度、任务间同步与通信、定时器、内存管理等常用RTOS功能,与常规的RTOS如freeRTOS相比,仅有几点小区别:

1、任务,创建task后需要额外调用才启动,不同于freeRTOS创建所有的task后统一启动调度,全部task都开始执行。这种各task独立启动的,需要注意先后关系,不能task1启动后就向task2的队列发消息,此时队列可能为NULL且发送前没有判断,会导致重启。

2、消息队列,其动态创建和发送接口类似,但接收队列消息需要传入的参数不同,需要传入期望接收的字节大小。巧合的是项目使用的消息队列都是同一个结构体,如果不一致,需要特殊处理。

3、工作队列,将task进行了一定封装,不需要为处理某个事件而新建task,交给系统提前创建的task统一执行,执行结束后触发回调函数,这样多个长时间运行但不经常触发的,可以交给工作队列处理,该功能在UIS8910中系统自带。

4、邮箱,Oneos特有的,可理解为简化版的消息队列。

关于freeRTOS基础可以参考FreeRTOS基础及其应用 (入门简化版)。

1.5 组件

正如前面提到,如何使用oneos,移动官网有详细的说明,本文只是介绍oneos的基本开发流程,分析其部分功能的实现方式,后续以其设备框架、SHELL和单元测试三部分为主。

2、系统移植

2.1 开发流程

基于oneos的开发方式和以往不同,先将原始工程编译生成库,全部复制到oneos工程,再基于oneos系统开发业务逻辑,其开发环境和原始工程开发环境无关。Oneos工程编译生成的bin文件下载到设备,完整版本支持microPython,可以导入python文件直接运行。
在这里插入图片描述

可能部分功能比较特殊,使用原始库文件无法实现,例如获取系统某个参数。
在原始工程开发,可以直接将客制化代码插入某个接口拦截,基于oneos开发时尽量避免,但是实在不行也只能这样。这样操作后,原始工程编译成功,但链接肯定失败,但不影响结果,只要输出lib库即可。

2.2 操作系统适配

如果没有原始SDK,要运行oneos,直接将原始库,例如STM32原厂HAL库复制到oneos/thirdparty即可;但是有基础SDK,且SDK是基于其它RTOS开发,则其库要在oneos运行,需要进行适配转换,存在两种方式。

以目前支持cat1网络比较火的两个芯片平台为例。
紫光展锐UIS8910平台使用freeRTOS,且基本开源,因此可以将UIS8910工程中的freeRTOS系统接口,其函数内容替换使用oneos的接口实现。

翱捷ASR1603平台使用threadX,且已封库,因此是在oneos工程,将oneos的系统内核接口函数内容使用ASR1603提供的库实现。

在这里插入图片描述

前者UIS8910是oneos直接在底层替换了freeRTOS,相当于只运行了一套较为干净的oneos;后者完全是将两套RTOS的接口互相匹配,且中间并不是一对一替换。

2.3 风险与限制

原始工程开发函数是直接调用,引入oneos框架后,内核适配、驱动框架增加了代码量,运行效率也存在一定损失。
对网络modem相关的操作,oneos使用AT通信,其阻塞方式对原有应用逻辑存在较大影响,不如原始API便捷。

3、系统组件

3.1 编译器关键字

重点介绍section关键字,后续章节都与其有关,section主要作用是将函数或者变量放在指定段中,可在指定的地方取函数执行。

//main.c  
//section demo  
#include "stdio.h"  
	  
int __attribute__((section("my_fun"))) test1(int a,int b)  
{
   
     
	return (a+b);  
}

int test(int b)  
{
   
     
	return 2*b;  
}

int __attribute__((section("my_fun"))) test0(int a,int b)  
{
   
     
	return (a*b);  
}  
	  
int __attribute__((section("my_val"))) chengi;  
int __attribute__((section("my_val"))) chengj;  
	  
int main(void)  
{
   
     
	int sum,c,j; 	  
	chengi=1,chengj=2;  
	  
	sum=test1(chengi,chengj);  
	c=test(100);  
	j=test0(chengi,chengj);  
	      
	 printf("sum=%d,c=%d,j=%d\r\n",sum,c,j);  

	 return 0;  
}  

编译生成map文件:


                
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值