NuttX实时操作系统

时间:2021-01-20 20:18:26

NuttX 是一个实时操作系统(RTOS),其重点遵从特定的标准并且尽量小型化。 可伸缩良好且可适应从8位到32位单片机环境,Nuttx主要遵循的标准是 Posix和ANSI标准。 其他的一些来自于Unix或者其他常规的实时操作系统(比如VxWorks)的标准的API,要么是因为该功能不在如上标准中,要么是因为该功能不适合嵌入式环境(比如fork())。


NuttX首次由格雷戈里•纳特于2007年在宽松的BSD许可下发布 。



关键特性
标准兼容。
核心任务管理。
模块化设计。
完全抢占的。
可扩展性好。
高度可配置的。
容易移植到新的处理器架构,SoC架构,或板级的架构。
先进先出、循环和“分散”调度机制。
实时的、确定性的、并且支持优先级继承。
动态始终操作。
类似于POSIX / ANSI的任务控制,有名消息队列,计数信号量,时钟/定时器、信号,线程,健壮的互斥锁,(线程)取消点,环境变量、文件系统。
与VxWorks相类似的任务管理和看门狗定时器。
BSD套接字接口。
对管理抢占式特性的扩展。
具有地址环境的可选任务(的处理 )。
对称多处理(SMP)
可加载内核模块;轻量的嵌入式的共享库。
内存配置:(1)平面地址空间嵌入构建(所有函数都在一个地址空间内,没有虚拟地址导致的地址重叠情况),(2)由微处理器情况的保护构建,(3)有MMU情况下的内核构建。
内存分配器:(1)标准堆内存分配,(2)粗粒度分配器,(3)共享内存,(4)基于每个进程动态大小的堆。
线程本地存储(TLS)
可继承的“控制终端”和I / O重定向。伪终端。
按需分页。
系统日志记录。
可以构建作为一个开放单一镜像平面式的嵌入式实时操作系统(内存地址空间唯一)或分开构建,构建一个具有系统调用控制接口的安全内核(类似Linux方式)
内置线程级CPU负载测量。
客制化的NuttX C库
NuttX用户指南很好的描述了应用程序接口 。


支持的平台
ARM
ARM7TDMI (TI TMS320 C5471, Calypso, MoxART, NXP LPC214x, LPC2378, STMicro STR71x)
ARM920T (Freescale i.MX1)
ARM926EJS (TI DM320, NXP LPC31xx)
ARM Cortex-A5 (Atmel SAMA5D2, SAMA5D3, SAMA5D4)
ARM Cortex-A8 (Allwinner A10)
ARM Cortex-A9 (NXP/Freescale i.MX6)
ARM Cortex-R4/R4F (TI TMS570)
ARM Cortex-M0 (nuvoTon NUC120, NXP/Freescale KL25Z, KL26Z, Atmel SAMD20/21, SAML21, ST Micro STM32 F0)
ARM Cortex-M3 (ST Micro STM32 F1/L4/F2, TI/Stellaris LM3S, NXP LPC17xx, Atmel SAM3U/3X, SiliconLabs EFM32)
ARM Cortex-M4 (with/without floating point unit: ST Micro STM32 F3/F4/L4, TI/Stellaris LM4F/TM4C, NXP LPC43xx, Freescale Kinetis K20/K40/60/64/66, Atmel SAM4C/4E/4S/4L, Infineon XMC4xxx)
ARM Cortex-M7 (Atmel SAMV71/SAME70, ST Micro STM32 F7)
Atmel AVR
Atmel 8-bit AVR (AT90USB, ATmega)
AVR32
Freescale M68HCS12
Intel
80×86
MIPS
MicroChip PIC32MX (MIPS32 24Kc)
MicroChip PIC32MZ (MIPS32 M14k)
Misoc

LM32 (Qemu)

Renesas/Hitachi
Renesas/Hitachi SuperH
Renesas M16C/26
RISC-V
Xtensa LX6
Expressif ESP32
Zilog
Zilog Z16F ZNeo
Zilog eZ80 Acclaim!
Zilog Z8Encore!
Zilog Z80


文件系统
简洁的基于内存的,伪根文件系统 。
虚拟文件系统(VFS)
可挂载的卷。 绑定挂载点、文件系统和块设备驱动程序。
通用的系统日志(SYSLOG)支持。
FAT12/16/32文件系统的支持。
NFS客户端。 客户端支持网络文件系统(NFS版本3,基于UDP)。
NXFFS。简洁的具有磨损平衡特性的NuttX闪存文件系统。
SMART。来自于肯•佩蒂特的闪存文件系统。
ROMFS文件系统的支持。
BINFS伪文件系统支持。
HOSTFS文件系统支持(模拟)。
联合文件系统。 支持合并和覆盖文件系统
procfs 伪文件系统。
基于SPI总线的 MMC / SD / SDH卡的通用驱动程序。
支持以下格式的一个二进制加载程序 :
1.分开链接的ELF模块。
2.分开链接的NXFLAT 模块。NXFLAT一个是可以在文件系统中芯片内执行的二进制格式。
PATH环境变量的支持。
通过TFTP和FTP进行文件传输(get和put方法),HTML(wget),Zmodem(sz,rz)。
英特尔十六进制转换。


设备驱动程序
VFS支持字符和块设备驱动程序。
异步输入/输出(AIO)。
网络,USB(主机),USB(设备)、串口、I2C、i2,NAND,CAN,ADC、DAC、PWM、正交编码器(Quadrature Encoder),通用定时器和看门狗定时器驱动架构。
RAMDISK,管道(PIPE)、FIFO、/ dev / null,/dev/zero /dev/random和回环设备驱动。
基于SPI总线的 MMC / SD / SDH卡的通用驱动程序。
电源管理 子系统。
ModBus协议通过内建的1.5.0版本的 FreeModBus 来支持。
图形设备:帧缓存驱动,图形和段式LCD驱动程序
音频子系统:编解码器、音频输入和输出驱动程序。 命令行和图形化的媒体播放器应用程序。
Crytopgraphic子系统。
输入设备:触摸屏、USB键盘、USB鼠标,模拟/数字的摇杆、基于GPIO接口的按钮和键盘。
内存技术设备
模拟设备:支持模拟数字转换(ADC),数模转换(DAC)、多路复用器和放大器。
系统日志记录设备。


C / C++库
标准C库已经完全集成进了操作系统。
通过一个标准的数学库来支持浮点运算。
附加的 uClibc + + 模块组件提供标准c++库,该库支持输入输出流,字符串,STL,RTTI,异常等等。(LGPL)。
Libc++中的构架编译器(LLVM)相关的最新接口也可以使用(c++11标准)。


网络
支持多网络接口; 支持多网络链路层。
IPv4,IPv6、TCP / IP、UDP、ARP、ICMP、ICMPv6,IGMPv2(客户端)堆栈。
用户空间栈
流、数据报和原始数据包的套接字
支持原始套接字和本地,Unix域套接字
DNS域名解析/ NetDB
IEEE 802.11 完全的物理访问控制子层
IEEE 802.15.4 MAC + 6 lowpan协议栈服务
串行线路接口协议(SLIP),TUN / PPP,本地回环设备
一个cJSON端口
占用空间小。
BSD层套接字兼容。
网络实用程序(DHCP服务器和客户端,SMTP客户端,TELNET客户机,FTP服务器和客户端,TFTP客户机,HTTP服务器和客户端,PPPD,NTP客户端)。 可继承的TELNET会话(类似于“控制终端”)。 VNC服务器。
ICMPv6自主自动配置。
NFS客户端。 客户端支持网络文件系统(NFS 第三版,UDP)。
Jeff Poskanzer 的THTTPD HTTP服务器基于nuttx被移植并且与NXFLAT一起被集成用以提供嵌入式公共网关接口(CGI)。
物理层链接状态管理。
UDP广播网络发现。
XML RPC服务器。
支持网络模块(如TI CC3000 WLAN模块)。


闪存支持
先进的接口用于内存技术接口设备。
NAND闪存的支持。
FTL:在闪存文件系统上支持简单的闪存转换层。
NXFFS。 NuttX具有磨损平衡特性的闪存文件系统。
支持基于SPI的闪存设备。、


USB支持
USB主机支持
USB主机架构包含USB主机控制器驱动程序和设备相关的USB类驱动程序。
USB主机控制器驱动程序在Atmel SAMA5Dx,NXP LPC17xx,LPC31xx,意法半导体STM32等控制器上可用。
USB大容量存储类,CDC / ACM,HID接口的键盘/鼠标,Xbox游戏控制器等设备相关usb类驱动可用。
无缝支持USB集线器。
USB设备支持
类似于GADGET 式架构的USB设备控制器驱动程序和依赖设备的USB类驱动程序。
USB设备控制器驱动程序在PIC32,Atmel AVR,SAM3,SAM4,SAMA5Dx,NXP LPC17xx,LPC214x,LPC313x,LPC43xx,芯科科技EFM32,意法半导STM32 F1,F2,F3,F4,德州仪器 DM320等芯片上可用。
USB大容量存储类,CDC / ACM串口,PL2303仿真等设备相关的USB类驱动程序可用。
内置用于USB调试的 USB跟踪 功能。


图形支持
帧缓冲驱动。
基于并行和SPI接口的LCD,OLED等设备的图形液晶驱动程序支持。
段式LCD驱动程序
虚拟网络控制台(VNC)服务器

NX图形子系统 :一个可以工作在帧缓存或者LCD驱动的图形库,库中包含窗口系统和字体支持.
NuttX小部件 :集成在NX图形系统中的一个用保守C++(使用基本的c++特性)写的图形用户接口。
NuttX窗口管理器 :一个基于 NX图形子系统 和 NuttX小部件 的简洁的窗口管理器。



附加组件
NuttShell
用于NuttX的一个小的灵活的、类似于bash shell的包含丰富的功能集并且空间占用小的shell程序。 

Pascal语言运行环境
Pascal组件已经可用,可以在bitbucket.org网站上下载。


应用程序包
应用程序包严格意义上来说并不是NuttX的一的部分但是仍与NuttX保存在同一个GIT仓库中但是与NuttX作为一个分开的版本包发布。应用程序包包含NuttX应用程序的集合(包括NuttShell),网络工具,测试工具和例子,程序原型,和NSH的扩展命令等等。