实时嵌入式操作系统-NuttX
2011-02-28 09:13:14 阿炯

Nuttx是一个实时嵌入式操作系统(RTOS),它有一个小巧是在微控制器的环境中使用。这是完全可扩展,从小型(8位)至中型嵌入式(32位)系统,它的目的还在于要完全符合标准,完全实时,并完全开放。



Nuttx is a real timed embedded operating system (RTOS). Its goals are:

NuttX是一个成熟的实时操作系统,于2007年由Gregory Nutt先生正式开源,2016年被三星选为TizenRT操作系统的内核,2019年在小米的推动下正式进入Apache基金会,经过开源社区多年的不懈努力,NuttX功能丰富,性能稳定,商业化成熟度高,Fitbit最近两代的手环产品和索尼多款消费级产品都是基于NuttX开发的。

Small Footprint
Usable in all but the tightest micro-controller environments, The focus is on the tiny-to-small, deeply embedded environment.

Rich Feature OS Set
The goal is to provide implementations of most standard POSIX OS interfaces to support a rich, multi-threaded development environment for deeply embedded processors.

Highly Scalable
Fully scalable from tiny (8-bit) to moderate embedded (32-bit). Scalability with rich feature set is accomplished with: Many tiny source files, link from static libraries, highly configurable, use of weak symbols when available.

Standards Compliance
NuttX strives to achieve a high degree of standards compliance. The primary governing standards are POSIX and ANSI standards. Additional standard APIs from Unix and other common RTOS's are adopted for functionality not available under these standards or for functionality that is not appropriate for the deeply-embedded RTOS (such as fork()).

Because of this standards conformance, software developed under other standard OSs (such as Linux) should port easily to NuttX.

Real-Time
Fully pre-emptible, fixed priority and round-robin scheduling.

Totally Open
Non-restrictive BSD license.

GNU Toolchains
Compatible GNU toolchains based on buildroot available for download to provide a complete development environment for many architectures.


系统架构


从纵向看,NuttX和传统操作系统一样由调度子系统、文件子系统、网络子系统、图形子系统和驱动子系统组成。从横向看,NuttX向上给应用程序提供了POSIX和ANSI定义的标准C/C++接口。对于没有标准化的组件(比如各种外设),NuttX通常会提供兼容Linux的API。向下NuttX定义了Arch API、块设备驱动接口、网卡驱动接口、display驱动接口,以及各种总线和外设的lower half驱动接口,使得芯片厂商能够规范、快速地完成移植工作。下图中数量众多的蓝色模块就是NuttX实现的各种功能。


子系统介绍

调度子系统
NuttX支持大多数RTOS都没有实现的进程概念,并提供完整的POSIX API,比如pthread、信号量、消息队列、时钟/定时器、信号、环境变量等。同时也支持RTOS上常见的优先级翻转和tickless模式。NuttX支持对称多处理(SMP)和非对称多处理(AMP)两种多核编程模式,开发者可以根据芯片设计的特点和应用场景的需求,选择使用SMP或AMP,甚至同时使用SMP和AMP。NuttX支持所有常见CPU架构,比如Cortex-A/Cortex-R/Cortex-M、AVR、MIPS、32位/64位 RISC-V,X86/X64,Z80,以及Tensilica和CEVA的DSP,并有超过150款芯片成功移植到NuttX上。

文件系统
NuttX设计了一套完整而小巧的虚拟文件系统,除了支持统一的目录和文件操作外,还支持挂载点、字符设备,块设备等高级概念。直接支持10多种常用的文件系统。比如FAT、LittleFS、SmartFS、NFS、ROMFS、TMPFS等。另外,NuttX内置根文件系统,无需挂载即可启动,极大的简化了开发和部署流程。

网络子系统
NuttX实现了完整的网络协议栈,支持以太网、WiFi、802.15.4、蓝牙、CAN等数据链路层协议,支持IPv4、IPv6以及相关的ARP、ICMP、IGMP、MLD等传输层协议,实现了BSD兼容套接字API,除了常见的TCP、UDP协议外,还支持raw packet、unix domain、netlink套接字类型。另外,NuttX还提供了大量的应用层协议实现,比如DHCP、DNS、NTP、Telnet、FTP、SMTP、HTTP等。

驱动子系统
除了接入到文件系统的块设备驱动和接入到TCP/IP协议栈的网络设备驱动外,NuttX还为各种常见总线和外设定义了类似Linux的字符设备驱动。一方面通过NuttX为每类设备定义的标准IOCTL接口,应用程序可以用统一的API访问不同厂商的硬件驱动,另一方面NuttX驱动框架实现了和硬件无关的操作(比如权限控制、buffer管理,睡眠/唤醒等),降低驱动程序的开发难度。最后,NuttX提供了一套基于activity统计的低功耗管理框架,使得驱动程序可以方便地实现低功耗控制。


最新版本:6.2
该版本继续实现 NuttX 电源管理演示,同时支持 PIC32MX1/2 系列微处理器以及整个 NXP LPC43xx 系列,主板增加对 TI/Stellaris EKK-LM3S9B96 的支持。

项目主页:http://nuttx.sourceforge.net/

Xiaomi Vela


小米官宣其底层内核为 NuttX Xiaomi Vela 全面开源。

小米澎湃 OS 于2023年11月中旬宣布,Xiaomi Vela 采用 Apache 2.0 License 面向全球软硬件开发者正式开源。

根据其官网的介绍,Xiaomi Vela 是小米基于开源实时操作系统 NuttX 打造的物联网嵌入式软件平台,Vela 在各种物联网硬件平台上提供统一的软件服务,支持丰富的组件和易用的框架,打通碎片化的物联网应用场景。‘Vela’ 一词源自拉丁语中船帆的含义,也是南方星空中最亮的星座之一。


市场上开源或商业的RTOS非常多,为什么终选择NuttX作为Xiaomi Vela的基础?主要有以下几个原因:
NuttX对POSIX标准有原生兼容:NuttX是可商用化RTOS中唯一一个对POSIX API有原生支持的实时操作系统,所以很多Linux社区的开源软件可以很方便的移植到NuttX上,这样可以极大的简化开源软件移植,方便代码复用,降低学习曲线,其它RTOS需要适配层把POSIX API转成内部API,而且通常只兼容一小部分的POSIX接口。
完成度高:NuttX集成了文件系统、网络协议栈、图形库和驱动框架,减少开发成本。
模块化设计:所有组件甚至组件内部特性,都可以通过配置Kconfig来调整或关闭,可按需对系统进行裁剪,适用于不同产品形态。
代码精简:所有组件都是从头编码,专门对代码和数据做了优化设计。
轻量级:虽然NuttX实现了传统操作系统的所有功能,但是最终生成的代码尺寸还是可以很小(最小配置不到32KB,最大配置不超过256KB)。
和Linux系统的兼容性:因为NuttX整体设计、代码组织,编译过程和Linux非常接近,将会极大地降低Android/Linux开发者的迁移成本。
活跃开放的社区:很多厂商(比如小米、Sony,乐鑫、NXP等)和开源爱好者都在积极回馈社区。


Vela主要特性

高效性能:基于 NuttX 内核,具有高实时性、低功耗、低延迟等特点,适用于各种资源受限的嵌入式设备。
丰富组件:提供了多种常用的组件,如网络、音频、视频、图形、安全等,方便开发者快速构建应用。
易用框架:提供了一套统一的应用框架,支持 Lua、JavaScript 等脚本语言开发应用,并提供了丰富的 API 和文档。
万物互联:支持多种通信协议和标准,如 WiFi、BLE、Zigbee、MQTT 等,并提供了小米妙享技术,实现设备之间的无缝连接和协同。

Xiaomi Vela 系统架构如下


底层 NuttX 内核:提供最基本的任务调度、跨进程间通信、文件系统等基础 OS 功能,同时也提供简洁高效的设备驱动、轻量级的 TCP/IP 协议栈和电源管理等组件。

应用框架:分为上下两层,下层是为扩展系统服务而提供的通用应用框架,上层是针对不同的物联网应用而开发的定制应用框架,例如多媒体应用框架和传感应用框架,提供 Cloud SDK 可以方便开发者更快速的接入小米云服务。

开发者工具:除了常见的 Logger 和 Debugger 工具,Xiaomi Vela 还提供 Emulator 工具来帮助开发者提升调试效率,使用 Emulator,开发者可以利用 PC 端丰富的调试工具和调试信息,降低嵌入式系统开发和调试的难度。


小米于2023年12月上旬正式发布《小米澎湃 OS 技术白皮书》。根据其介绍,小米澎湃 OS 是一个为下一代的计算与多种设备生态设计的系统;也对系统架构进行了详细介绍、包括对各个子系统的架构以及关键技术的阐述,以及开发团队对各个子系统的设计思路。


小米表示:“希望通过分享这些技术成果和见解,激发更多的创意和合作,推动整个行业的进步,共同构建 “人车家全生态” 的未来。”其CEO 雷军在《白皮书》的序言中说道,2016 年,小米就开始研发跨端应用框架。2019 年,开始并行研发纯自研通用系统 Mina OS,并在部分产品上小规模量产验证,同时在实验室中也成功在手机上跑通,其中部分技术成果也已融入小米澎湃 OS。2021 年,小米开启了车机 OS 的研发。2022 年初,小米决定统一 MIUI、Vela、Mina、车机 OS 四个系统的软件架构。自此,小米的操作系统底层合并完成。



该文章最后由 阿炯 于 2023-12-08 11:40:37 更新,目前是第 2 版。