NuttX实时操作系统概述
NuttX是一个嵌入式实时操作系统(Embedded RTOS),它很小巧,在微控制器环境中使用。NuttX主要遵循POSIX和ANSI标准开发,可从8位微控制器环境扩展到32位微控制器环境,对于在上述标准下不可用的功能,或者对于不适合嵌入式环境(如fork())的功能,采用了Unix和其他常见RTOS的其他标准API(例如VxWorks)。NuttX支持ARM、Atmel AVR、x86、MIPS、OpenRISC、Renesas、RISC-V、Zilog、Misoc等多种CPU体系结构。
实时系统指系统的计算正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。如果未满足系统的时间约束,则认为系统失效。一个实时操作系统面对变化的负载(从最小到最坏的情况)时必须确定性地保证满足时间要求。实时系统指系统必须要满足确定性,而不是要求速度足够快。例如,如果使用足够强大的CPU,Windows在CPU空闲时可以提供非常短的典型中断响应,但是,当某些后台任务正在运行时,有时候响应会变得非常漫长,以至于某一个简单的读取文件的任务会长时间无响应,甚至直接挂死。并不是Windows不够快或效率不够高,而是因为它不能提供确定性,因此,Windows不是一个实时操作系统。
NuttX功能特性
- 任务管理。
- 模块化设计。
- 完全抢占。
- 可扩展。
- 高度可配置。
- 可以轻松扩展到新的处理器架构。
- 支持FIFO, round-robin, and “sporadic”调度。
- 强实时,确定性并支持优先级继承。
- 任务管理,消息队列,计数信号量,时钟/计时器,信号,pthread线程,互斥锁,环境变量,文件系统。
- 类似于VxWorks的任务管理和看门狗计时器。
- BSD套接字接口。
- 对称多处理(SMP)
- 可加载的内核模块;轻量级的嵌入式共享库。
- 线程本地存储(TLS)
- 内置线程CPU负载测量。
- 自定义NuttX C库。
NuttX文件系统
- 微小的内存根伪文件系统
- 虚拟文件系统(VFS)
- 通用系统日志记录(SYSLOG)支持
- FAT12 / 16/32文件系统支持
- NFS网络文件系统支持
- NXFFS。微型NuttX磨损均衡FLASH文件系统
- SPIFFS。FLASH文件系统,最初由Peter Anderson撰写
- LittleFS。来自ARM mbed的FLASH文件系统
- ROMFS文件系统支持
- CROMFS文件系统支持(压缩)
- BINFS伪文件系统支持
- HOSTFS文件系统支持(仅模拟)
- UserFS。提供用户应用程序文件系统。
- procfs 伪文件系统。
NuttX网络协议栈
- 支持IPv4,IPv6,TCP/IP,UDP,ARP,ICMP,ICMPv6,IGMPv2。
- 流,数据报和原始数据包套接字
- 地址族:IPv4/IPv6(AF_INET,AF_INET6),原始套接字(AF_PACKET),原始IEEE 802.15.4(AF_IEEE802154),原始蓝牙(AF_BLUETOOTH)和本地Unix域套接字支持(AF_LOCAL)
- 特殊的INET协议套接字:原始ICMP和ICMPv6协议ping套接字(IPPROTO_ICMP,IPPROTO_ICMP6)
- IP转发
- DNS名称解析
- BSD兼容套接字层
- 网络实用程序(DHCP服务器和客户端,SMTP客户端,TELNET服务器和客户端,FTP服务器和客户端,TFTP客户端,HTTP服务器和客户端,NTP客户端)
- ICMPv6自主自动配置
- NFS客户端网络文件系统(NFS,版本3,UDP)的支持
- PHY链接状态管理
- XML RPC服务器
- 支持网络模块(如ESP8266)