NuttX is a real-time operating system (RTOS) with an emphasis on standards compliance and small footprint. Scalable from 8-bit to 32-bit microcontroller environments, the primary governing standards in NuttX are Posix and ANSI standards. Additional standard APIs from Unix and other common RTOS’s (such as VxWorks) are adopted for functionality not available under these standards, or for functionality that is not appropriate for deeply-embedded environments (such as fork()). NuttX was first released in 2007 by Gregory Nutt under the permissive BSD license.
NuttX is a POSIX RTOS. You don’t need to learn a new API to program it. You can write an application in a POSIX Operating System like Linux or MacOS, validate it, and then compile it to run on NuttX. If you don’t want to create an application from scratch, you can grab some small Linux libraries and perform some minor modifications to get them working on NuttX.
NuttX also has many subsystems that resemble equivalent subsystems in Linux. For instance, Virtual File System (VFS), Memory Technology Device (MTD), Audio subsystem, USB system with USB Composite support, and many others. Actually, you can run a basic version of NuttX on low cost microcontrollers with less than 32KB of Flash and less than 8KB of RAM. Of course, if you want to include additional features in your firmware — USB, Ethernet/WiFi with IPv6, CAN, etc. — then it will be better to use a microcontroller with more than 64KB of Flash and at least 32KB of RAM.
Key features of NuttX
- Standards Compliant.
- Core Task Management.
- Modular design.
- Fully preemptible.
- Naturally scalable.
- Highly configurable.
- Easily extensible to new processor architectures, SoC architecture, or board architectures. See Porting Guide.
- FIFO, round-robin, and “sporadic” scheduling.
- Realtime, deterministic, with support for priority inheritance.
- Tickless operation.
- POSIX/ANSI-like task controls, named message queues, counting semaphores, clocks/timers, signals, pthreads, robust mutexes, cancellation points, environment variables, filesystem.
- Standard default signal actions (optional).
- VxWorks-like task management and watchdog timers.
- BSD socket interface.
- Extensions to manage pre-emption.
- Optional tasks with address environments (Processes).
- Symmetric Multi-Processing (SMP)
- Loadable kernel modules; lightweight, embedded shared libraries.
- Memory Configurations: (1) Flat embedded build, (2) Protected build with MPU, and (3) Kernel build with MMU.
- Memory Allocators: (1) standard heap memory allocation, (2) granule allocator, (3) shared memory, and (4) dynamically sized, per-process heaps.
- Thread Local Storage (TLS)
- Inheritable “controlling terminals” and I/O redirection. Pseudo-terminals.
- On-demand paging.
- System logging
- May be built either as an open, flat embedded RTOS or as a separtely built, secure kernel with a system call gate interface.
- Built-in, per-thread CPU load measurements.
- Custom NuttX C library
NuttX supported many Platforms. Visit list.
NuttX supported many Graphics Support, USB Device Support, USB Host Support, Flash Support.
- Standard C Library Fully integrated into the OS.
- Includes floating point support via a Standard Math Library.
- Add-on uClibc++ module provides Standard C++ Library supportng iostreams, strings, STL, RTTI, exceptions, etc. (LGPL).
- Contemporary port of the C++11 LLVM libc++ is also available.
Projects using NuttX
- Thingsee IoT development device.
- Autopilot PX4 is using NuttX to control a variety of autonomous platforms.
- Pixhawk: An Advanced, User-Friendly Autopilot.
- Biffer Board supports NuttX besides many other RTOS.
- MP3 player implemented with NuttX.
- OsmocomBB is using NuttX to develop an operating system for cell phones.
- A homebrew steer-by-wire system implemented using NuttX.
- Video Performance Measurement Device.
- Low Power Embedded Software Optimization for the NuttX RTOS.
- Motorola Moto Z.
- Sony is using NuttX in their audio processors.
- Samsung announces TizenRT based on NuttX RTOS.