
RIOT意思为The friendly Operating System for the Internet of Things,即友好的物联网操作系统。
RIOT官方的口号是:if your tiny IoT device can't run Linux, use RIOT(如果你的资源受限,设备运行不了Linux操作系统,就用RIOT)。
RIOT是面向开发者的、开源的、适合物联网的操作系统。它的背后没有某个公司的支持,完全是由社区驱动。RIOT OS是一种开源社区项目,自从2008年就启动了,其致力于开发者友好、资源友好、物联网友好,关键的功能包括C/C++支持、多线程、能量效率、部分遵守POSIX标准等。RIOT能够在众多平台上运行,包括嵌入式设备、PC、传感器等。
RIOT OS拥有易于使用的API。该操作系统因用电量和资源需求方面能够做到高效而闻名。RIOS的硬件要求是1.5KB内存和5KB闪存,要求几乎与Tiny OS一样低。不过,它也提供了诸多功能,比如多线程、动态内存管理、硬件抽象、部分的POSIX(Portable Operating System Interface of UNIX)可移植操作系统接口标准兼容和C++支持,这些功能在Linux中很常见,而在轻量级实时操作系统中却是不常见的功能。其他功能包括:低中断延迟(约40个时钟周期)、基于优先级的调度等。其可以在Linux下进行开发,使用原生移植版,部署到嵌入式设备中。
RIOT OS的一些特性如下:
● 标准的C/C++编程。
● 标准的GCC编译环境。
● 可以运行在8位、16位和32位的嵌入式系统上。
● 部分的POSIX接口标准兼容(以后的目标是全兼容)。
● 支持在Linux/UNIX的虚拟机上运行。
● 实时性,快速的中断响应(~50 clock cycles)。
● 微内核,组件都可以动态加载,并且通过Message来实现服务。
● 极小开销的多线程支持(< 25 bytes per thread)。
● 丰富的网络支持:6LoWPAN, IPv6, RPL, CoAP and CBOR。
● 高精度的定时器。
● 丰富的工具(System shell, SHA-256, Bloom filters……)
RIOT的CPU的IP驱动基本都有一套统一接口,但是没有任何抽象层,被放在源代码的cpu\\periph中。这意味着在做新的平台支持时,需要注意驱动的接口要和API文档里的一致,比如ADC的adc_init和adc_read函数。板级驱动的源代码则放在drivers\下,比如NXP的MMA8541,利用I2C统一接口来访问。
由于是微内核(microkernel)的实现,所有的系统服务包括时钟、网络协议栈、网络服务等,都是通过创建独立的线程来实现。在线程中都有event_loop来接收服务请求,处理并发送服务结果。RIOT中最关键的是GNRC(Generic networkstack)网络协议栈,它实现了从MAC层一直到传输层的各种协议,如6LowPan、IPv4/v6、RPL、TCP/UDP。并且这些不同的协议栈之间通过netapi统一接口开放给用户。对于应用层来说,GNRC提供了conn和socket两种API。在安全方面,802.15.4这层似乎没有加入AES的支持,只提供tinyDTLS在应用层给用户使用。由于RIOT的POSIX的部分兼容性,以及提供BSD socket的接口,很多应用都可以方便地移植过来,在pkg/下能找到例如libcoap和openwsn这样的应用。

RIOT OS架构框图
RIOT OS最早是由柏林自由大学开发的,目前完全由社区维护。
总之,RIOT OS是一个很有想法的微内核,加上开发环境对于之前熟悉Linux的开发者来讲很友好,应该是个潜力股。
RIOT物联网操作系统是嵌入式系统中最好用、生态最好的Linux OS。空间小于1.5KB,支持芯片多。RIOT的官网提供了一个强大的功能,即函数、文件、名称查找功能。可以通过RIOT提供的例程去学习,是一个很好的学习方法,例程里面包含了数据联网层的无线通信、UDP无线通信、RPL、border routers,以及COAP协议等功能。
RIOT是一个纯C语言编写的操作系统,确实是很好用的操作系统。

几个物联网操作系统比较
注:√表示完全支持;●表示部分支持;×表示不支持。
参考
● RIOT操作系统的源代码网址为https://github.com/RIOT-OS/RIOT。
● RIOT操作系统官网的网址为https://riot-os.org/#nutshell。
● 关于代码下载的网页为https://github.com/RIOT-OS/RIOT。
● RIOT的官网提供了函数、文件、名称查找功能,网址是http://www.riot-os.org/api/index.html。


