RIOT 技术笔记-01 RIOT介绍
一、资源
维基 https://github.com/RIOT-OS/RIOT/wiki
代码 https://github.com/RIOT-OS/RIOT
网页 https://www.riot-os.org/
API http://riot-os.org/api/index.html
http://riot-fork.readthedocs.io/en/latest/README.html
二、简介
RIOT操作系统针对物联网场景的特殊要求而设计。这些要求包括低内存占用,高能效,实时功能,模块化和可配置的通信堆栈,并支持各种低功耗设备。
RIOT基于微内核架构,这意味着它针对非常低的资源需求进行了优化,并且支持实时和多线程处理。它兼容16/32位MCU架构,还有一个本机端口可用于在Linux或MacOS上作为进程运行,从而可以使用标准开发工具,如GNU编译器集合,GNU调试器,Valgrind或Wireshark 。
RIOT具有多种功能集成,支持C/C++语言,并提供shell,加密库,各种数据结构等功能。操作系统集成了对IPv6或6LoWPAN等网络堆栈的支持,以及UDP,TCP,RPL和CoAP网络协议。操作系统还具有各种硬件的驱动程序,如传感器,无线电收发器和MCU。
支持的平台
RIOT支持ARM Cortex-M0,M3,M4和ARM7架构,从而支持各种开发板,如Arduino Due,基于Atmel ATmega2560 MCU(例如Arduino Mega 2560)或蓝牙设备如北欧nRF51822 SoC。
支持的网络协议栈
RIOT不仅仅支持TCP/IP网络协议栈,还支持IPv6,6lowpan等,另外,它还通过CCN Lite提供了对CCN协议的支持。
系统框架
RIOT的代码库分为五组。
- 内核 (core)
- 平台特定的代码 (cpu; boards)
- 设备驱动 (drivers)
- 库和网络代码 (sys; pkg)
- 演示功能和测试的应用程序 (examples; tests)
此外,RIOT还包括各种任务的脚本集合(dist)以及用于生成文档(soc)的预定义环境。
core
core文件夹包含了RIOT的内核文件,包括线程管理,消息管理,关键数据结构,一些格式定义等。其中最关键的是,它包含了RIOT中主线程和空闲线程的创建。
board
board文件夹中包含了RIOT支持的硬件平台的所有定义和实现,其中包括ARM、TI等公司的产品。通常,硬件平台由控制器的固定配置和一些外部设备(如传感器或无线电)组成。该文件夹的主要作用是把硬件平台编译需要的文件联系起来,这样硬件平台才能够编译,它包含有关GPIO引脚,MCU时钟和器件驱动程序配置的所有方面。
cpu
cpu文件夹包含所有特定于CPU的源文件。在多个CPU共享相同架构的情况下,实现被分为几个CPU特定的部分和架构部分(例如arm7_common和lpc2387)。cpu这个文件夹非常重要,前期的编程会频繁的使用到这个文件夹内的文件。
drivers
drivers文件夹包含特定设备的所有类型的驱动程序,比如enc28j60,dht11等,同时它还包含了硬件平台底层驱动的头文件。
sys
sys是一个非常重要的文件夹,里面包含了RIOT的精华部分,我们就很少去直接使用cpu文件夹的内容,而是直接使用sys中的一些函数,因为cpu文件夹中的东西是底层的,而sys中的应用是高层的。
而sys文件夹下的net文件夹更是重中之重,这里面包含了RIOT网络部分的文件,其中包括数据链路层、网络层、传输层和应用层的。因此,我们可以找到sixlowpan,udp,rpl,border routers等功能。RIOT提供了强大的gnrc模块,在无线传输方面十分方便。
examples
examples文件夹里面提供了几个经典的例程,这几个例程非常非常的重要,可以说只要掌握了这几个例程的功能,RIOT的大部分功能就学会了。只要明白了shell命令去调试之后就可以很简单的去解析这些程序了。
tests
tests文件夹提供了各个功能的详细测试程序。RIOT里面包含的功能几乎都可以在这里面找到测试的实例。而且这些功能机会支持所有的硬件平台。只要按照自己选择的硬件平台去编译就能根据测试结果去辅助学习了。
pkg
pkg文件夹提供了一些外部库驱动,比如libcoap、openwsn等库驱动。
dist、doc
dist文件夹提供了一些工具,doc文件夹提供了一些文档。