知识锦囊
OneOS主要特点
灵活裁剪
抢占式实时多任务的RTOS。内存资源占用极小,支持多任务处理、软件定时器、信号量、互斥锁、消息队列、邮箱和实时调度等特性。可灵活裁剪,搭配丰富组件,适应不同客户需求。
跨芯片平台
应用程序可无缝移植,大幅提高软件复用率。支持的主流芯片架构有:ARM Cortex-M、MIPS、RISC-V等。支持几乎所有的MCU和主流的NB-IOT、4G、WIFI、蓝牙通信芯片。
丰富组件
提供丰富的组件功能,如互联互通、端云融合、远程升级、室内外定位、低功耗控制等。同时提供开放的第三方组件管理工具,支持添加各类第三方组件,以便扩展系统功能。
超低功耗设计
支持MCU和外围设备的功耗管理,用户可以根据业务场景选择相应低功耗方案,系统会自动采用相应功耗控制策略,进行休眠和调频调压,有效降低设备整体功耗。
FOTA升级
提供免费的FOTA升级服务。支持加密、防篡改、断点续传等功能,同时支持智能还原和回溯机制,拥有完善的版本管理和灵活的升级策略配置机制。
全面彻底的安全设计
针对物联网设备资源受限、海量连接、网络异构等特点,参考等保2.0及《GB/T 36951-2018 信息安全技术 物联网感知终端应用安全技术要求》等规范,在系统安全、通信安全、数据安全等方面提供多维度安全防护能力。
OpenCPU开发框架
支持通信SoC芯片OpenCPU开发模式,为开发者带来屏蔽复杂通信芯片差异的高效开发方式,提供统一开发体验。同时,在同样的业务功能下,减少了设备额外MCU开销和存储器的使用,大幅降低设备成本。
简易开发
一站式开发工具OneOS Studio可用于对内核和组件的功能进行配置,支持组件自由裁剪,让系统按需进行积木式构建,同时可帮助用户跟踪调试,快速定位问题。
OneOS架构
OneOS 总体架构采用分层设计,主体由内核层、组件层、安全框架组成。采用一个轻量级内核加多个系统组件的模式,使物联网操作系统具备极高的可伸缩性。操作系统整体架构如下图:
内核层
极简的硬实时内核,支持多任务管理调度、任务间同步的信号量和互斥量、任务间通信的消息队列和邮箱、以及内存管理等。
组件层
包括网络协议、OneNET接入、远程升级、虚拟文件系统、SHELL命令行工具、日志系统、测试框架等。采用模块化设计,使各个组件的功能独立,易于灵活裁剪。
安全管理框架
终端侧基于信任根实现轻量级的主动检测和可信度量,提供轻量级的密码算法库及轻量级密钥管理与密钥协商机制,实现端到端安全通信。平台侧基于大数据态势感知技术,帮助用户建立端侧安全画像,根据应用场景制定不同的安全管理策略。
实践操作
任务一:安装OneOS系统
背景知识
我们先下载oneos系统,将压缩包解压到桌面上,打开根目录之后我们可以看到这些文件/文件夹:
根目录下各子目录和文件的功能描述如下:
| 目录或文件名称 | 描述 |
|---|---|
| arch | 存放和 MCU(或 CPU )架构体系相关的代码。 |
| common | 存放一些通用的没有具体业务指向的程序代码,所有模块都可以使用,不通过编译选项控制是否编译,采用默认编译进工程的方式。 |
| components | 存放组件代码,可进行裁剪。 |
| demos | 存放内核或组件的对外接口如何使用的示例程序。 |
| docs | 存放一些文档,如编码规范、编程指南等。 |
| drivers | 存放驱动的抽象层代码和具体外设的驱动代码。 |
| kernel | 存放内核代码,如任务管理及调度、任务间同步以及通信、内存管理等代码。 |
| libc | Libc 库部分硬件相关接口的底层适配。 |
| osal | OneOS操作系统接口抽象层,支持Posix接口、CMSIS接口、RT-Thread接口等 |
| projects | 各种开发板的示例工程 |
| scripts | 存放OneOS-Cube工具在编译构造时所需要的脚本文件。 |
| thirdparty | 存放第三方开源社区或第三方厂家的程序,包括组件、工具、协议实现或对接平台的代码等。 |
| Kconfig | Menuconfig配置文件,代码工程(如projects目录下的示例工程)中的Kconfig文件会引用此文件 |
| SConscript | OneOS操作系统使用Scons构建工具时的根编译脚本,该脚本会引用其它目录的SConscript脚本,若在OneOS操作系统根目录增加新的代码目录,需要修改此文件(参见“从零开始构建代码工程”章节)。 |
| LICENSE | License 授权说明。 |
熟悉了系统中的目录结构之后,接下来我们将OneOS编译安装到Wio LTE开发板上。
首先我们需要大致了解下整个流程原理:
- 首先完成OneOS的开发板适配工作(课程中默认使用的OneOS系统已经适配Wio LTE开发板)。
- 在对应的project目录下编写好自己的代码。
- 使用OneOS-Cube编译固件(当用户代码有更新时,就需要重新编译固件)。
- 将固件烧录到Wio LTE开发板上
- 使用串口工具连接到开发板(波特率115200)。
- 使用命令调出OneOS指令列表运行代码。
编译上传
下载并解压OneOS系统之后,打开文件夹进入 projects\Seeed_atsamd21g18a 路径,然后在空白处鼠标右键选择“OneOS-Cube Here”打开
注意OneOS保存路径不能出现中文!

打开之后输入编译命令“scons -j8”然后按“回车”键即可开始编译固件。

当提示“scons: done building targets.”代表完成编译
编译完成的“oneos.bin ”文件在“OneOS_Wio_LTE\out\Seeed_atsamd21g18a”路径
接下来在“我的电脑”中打开以下目录:“C:\Users\你的用户名\AppData\Local\Arduino15\packages\Seeeduino\tools\bossac\1.7.0-arduino3”
然后按住“shift”键,再点击鼠标右键选择打开Power shell 
接下来利用Power shell 将固件烧录到开发板中:
首先使用数据线将开发板连接到电脑,然后快速点击2次开发板上的“RST”按键,此时电脑会显示一个新的可移动磁盘接入,然后在打开的Power shell中输入以下命令:
.\bossac.exe -e -w -v -b C:\Users\Administrator\Desktop\OneOS_Wio_LTE\out\Seeed_atsamd21g18a\oneos.bin -R
注意输入命令时你需要将其中的“C:\Users\Administrator\Desktop\OneOS_Wio_LTE\out\Seeed_atsamd21g18a\”替换为你的oneos.bin生成目录(参考下图)
然后敲击几次“回车”键运行命令,当出现下图提示时代表OneOS系统烧录成功。
任务二:在OneOS中点亮RGB LED
烧录成功OneOS之后,接下来我们该运行系统了!让我们从一个简单的点亮RGB灯的示例开始。(在课程中使用的OneOS已经编写好了RGB灯的驱动,我们直接调用即可)
需要注意的是当我们烧录成功OneOS之后,我们不能直接通过USB数据线来访问系统,我们需要一个USB转串口模块连接到主控板的UART接口,然后将USB转串口模块连接到电脑使用。
操作如下:将套件中的Grove转杜邦线与USB转串口模块拿出来,然后Grove一端接入主控板的UART接口,Grove转杜邦线的另外一头会有红黑白黄四根线,
我们再将这4根线分别接:
红>>>3V3
黑>>>GND
白>>>RXD
黄>>>TXD
成功连接USB转串口模块之后,将USB转串口模块接入电脑的USB接口。此时在设备管理器中应该有一个COM口显示,请记住这个COM口(在下一步连接的时候需要用到)。
如果打开设备管理器显示一个未安装驱动的设备,那么你就需要下载CP210x_UART_Driver.zip驱动并安装就可以正确识别到了。
接下来下载安装一个串口工具“MobaXterm”软件打开之后应该如下图所示:
我们点击“Session”选择“serial”再选择正确的COM 将波特率设置为115200,点击“ok”连接到OneOS系统。
连接成功之后在命令区编写“help”然后回车 验证OneOS有没有正常启动,如果正常启动应该有下图的返回信息。
接下来你可以在命令区输入“ neopixel XXX ”(这里XXX是亮度值范围是 0-255 ) 就可以使用OneOS来来点亮RGB LED灯。

如果你想要改变灯的颜色那么你可以打开以下路径“OneOS_Wio_LTE\projects\Seeed_atsamd21g18a\application”打开“ws2813.c”文件(这是OneOS驱动RGB灯的代码)。
在代码的第86、87、88更改RGB值,范围为1-16然后保存程序。再按照任务一的操作重新编译系统和烧录。再次输入“neopixel XXX”来查看效果。
