Newer
Older
<html>
<head>
<title>NuttX</title>
</head>
<body background="backgd.gif">
<hr><hr>
<table width ="100%">
<tr align="center" bgcolor="#e4e4e4">
<td>
<h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
Gregory Nutt
committed
<p>Last Updated: April 9, 2018</p>
</td>
</tr>
</table>
<hr><hr>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
Gregory Nutt
committed
<h1>Table of Contents</h1>
</td>
</tr>
</table>
<center><table width ="80%">
<tr>
<td>
<table>
<tr>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td>
<a href="#overview">Overview</a>.<br>
What is NuttX? Look at all those files and features... How can it be a tiny OS?
<tr>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td>
<a href="#group">NuttX Discussion Group</a>.<br>
Do you want to talk about NuttX features? Do you need some help? Problems? Bugs?
</td>
</tr>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td>
<a href="#downloads">Downloads</a>.<br>
Where can I get NuttX? What is the current development status?
</td>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td>
<a href="#platforms">Supported Platforms</a>.<br>
What target platforms has NuttX been ported to?
</td>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td>
<a href="#environments">Development Environments</a>.<br>
What kinds of host cross-development platforms can be used with NuttX?
</td>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td>
<a href="#licensing">Licensing</a>.<br>
Are there any licensing restrictions for the use of NuttX? (Almost none)
Will there be problems if I link my proprietary code with NuttX? (No)
</td>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<a href="https://bitbucket.org/nuttx/nuttx/src/master/ReleaseNotes">Release Notes</a>
What has changed in the last release of NuttX?
Gregory Nutt
committed
Are there any <a href="#changelogs">unreleased changes</a>.
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td>
<a href="#TODO">Bugs, Issues, <i>Things-To-Do</i></a>.<br>
Software is never finished nor ever tested well enough.
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td>
<a href="#documentation">Other Documentation</a>.<br>
What other NuttX documentation is available?
</td>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td>
<a href="#trademarks">Trademarks</a>.<br>
Some of the words used in this document belong to other people.
</td>
</table></center>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="overview"><h1>Overview</h1></a>
</td>
</tr>
</table>
NuttX is a real timed embedded operating system (RTOS).
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Small Footprint</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
Usable in all but the tightest micro-controller environments,
The focus is on the tiny-to-small, deeply embedded environment.
</p>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Rich Feature OS Set</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
The goal is to provide implementations of most standard POSIX OS interfaces
to support a rich, multi-threaded development environment for deeply embedded
NON-GOALS: It is not a goal to provide the level of OS features like those provided by Linux.
In order to work with smaller MCUs, small footprint must be more important than an extensive feature set.
But standard compliance is more important than small footprint.
Surely a smaller RTOS could be produced by ignoring standards.
Think of NuttX is a tiny Linux work-alike with a much reduced feature set.
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Highly Scalable</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
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.
</p>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Standards Compliance</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
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 <code>fork()</code>).
</p>
<p>
Because of this standards conformance, software developed under other
standard OSs (such as Linux) should port easily to NuttX.
</p>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Real-Time</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
Gregory Nutt
committed
Fully pre-emptible; fixed priority, round-robin, and "sporadic" scheduling.
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Totally Open</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<tr>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>GNU Toolchains</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
Compatible GNU toolchains based on <a href="http://buildroot.uclibc.org/">buildroot</a>
available for
<a href="https://bitbucket.org/nuttx/buildroot/downloads/">download</a>
to provide a complete development environment for many architectures.
</p>
</tr>
<p>
<b>Feature Set</b>.
Key features of NuttX include:
<p>
<center><table width="90%">
<tr>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Standards Compliant Core Task Management</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<tr>
<td><br></td>
<td>
<p>
<li>Highly configurable.</li>
</p>
<li>
Easily extensible to new processor architectures, SoC architecture, or board architectures.
A <a href="NuttxPortingGuide.html">Porting Guide</a> is available.
</tr>
<tr>
<td><br></td>
<td>
<p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Realtime, deterministic, with support for priority inheritance</li>
<tr>
<td><br></td>
<td>
<p>
<li>Tickless Operation</li>
</p>
</tr>
<li>POSIX/ANSI-like task controls, named message queues, counting semaphores, clocks/timers, signals, pthreads, robust mutexes, cancellation points, environment variables, filesystem.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
</tr>
<tr>
<td><br></td>
<td>
<p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<tr>
<td><br></td>
<td>
<p>
<li>Optional tasks with address environments (<i>Processes</i>).</li>
</p>
<li>Loadable kernel modules; lightweight, embedded shared libraries.</li>
<tr>
<td><br></td>
<td>
<p>
<li>Memory Configurations: (1) Flat embedded build, (2) Protected build with MPU, and (3) Kernel build with MMU.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Memory Allocators: (1) standard heap memory allocation, (2) granule allocator, (3) shared memory, and (4) dynamically sized, per-process heaps.</li>
</p>
<li>Inheritable "controlling terminals" and I/O re-direction. Pseudo-terminals</li>
<tr>
<td><br></td>
<td>
<p>
<li>On-demand paging.</li>
</p>
patacongo
committed
<li>System logging.</li>
<li>May be built either as an open, flat embedded RTOS or as a separately built, secure, monolithic kernel with a system call interface.</li>
<li>Well documented in the NuttX <a href="NuttxUserGuide.html">User Guide</a>.</li>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>File system</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Virtual file system (VFS) supports drivers and mountpoints.</li>
</tr>
<tr>
<td><br></td>
<td>
<p>
Mount-able volumes. Bind mountpoint, filesystem, and block device driver.
<tr>
<td><br></td>
<td>
<p>
<li>Generic system logging (SYSLOG) support.</li>
</p>
FAT12/16/32 filesystem support with optional FAT long file name support<small><sup>1</sup></small>.
<tr>
<td><br></td>
<td>
<p>
<li>
NFS Client. Client side support for a Network File System (NFS, version 3, UDP).
</li>
</p>
NXFFS. The tiny NuttX wear-leveling FLASH file system.
<tr>
<td><br></td>
<td>
<p>
<li>
SMART. FLASH file system from Ken Pettit.
</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>TMPFS RAM filesystem support.</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>BINFS pseudo-filesystem support.</li>
</p>
<tr>
<td><br></td>
<td>
<p>
<li>HOSTFS filesystem support (simulation only).</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Union filesystem - Supports combining and overlaying file systems.</li>
</p>
</td>
<tr>
<td><br></td>
<td>
<p>
<li>UserFS - User application file system.</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li><code>procfs/</code> pseudo-filesystem support.</li>
</p>
<tr>
<td><br></td>
<td>
<p>
A <a href="NuttXBinfmt.html">binary loader</a> with support for the following formats:
<ul>
<li>Separately linked ELF modules.</li>
<li>
Separately linked <a href="NuttXNxFlat.html">NXFLAT</a> modules.
NXFLAT is a binary format that can be XIP from a file system.
</li>
<li>
"Built-In" applications.</li>
</li>
<tr>
<td><br></td>
<td>
<p>
<li>PATH variable support.</li>
</p>
<tr>
<td><br></td>
<td>
<p>
<li>
File transfers via TFTP and FTP (<code>get</code> and <code>put</code>), HTML (<code>wget</code>), and Zmodem (<code>sz</code> and <code>rz</code>).
</li>
<li>
Intel HEX file conversions.
</li>
<tr>
<td><br></td>
<td>
<p><small>
<sup>1</sup>
FAT long file name support may be subject to certain Microsoft patent restrictions if enabled.
See the top-level <code>COPYING</code> file for details.
</small></p>
</tr>
<tr>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Device Drivers</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Supports character and block drivers as well as specialized driver interfaces.</li>
<tr>
<td><br></td>
<td>
<p>
<li>Full VFS integration.</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Asynchronous I/O (AIO)</li>
</p>
</td>
</tr>
Network, USB (host), USB (device), serial, I2C, I2S, NAND, CAN, ADC, DAC, PWM, Quadrature Encoder, I/O Expander, Wireless, generic timer, and watchdog timer driver architectures.
RAMDISK, pipes, FIFO, <code>/dev/null</code>, <code>/dev/zero</code>, <code>/dev/random</code>, and loop drivers.
<li>Generic driver for SPI-based or SDIO-based MMC/SD/SDH cards.</li>
<li>
Graphics: framebuffer drivers, graphic- and segment-LCD drivers.
VNC server.
</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Audio subsystem: CODECs, audio input and output drivers. Command line and graphic media player applications.</li>
<tr>
<td><br></td>
<td>
<p>
<li><a href="NuttxPortingGuide.html#pwrmgmt">Power Management</a> sub-system.</li>
<tr>
<td><br></td>
<td>
<p>
<li>ModBus support provided by built-in <a href="http://freemodbus.berlios.de/">FreeModBus</a> version 1.5.0.</li>
</p>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Standard C Library Fully integrated into the OS.</li>
<tr>
<td><br></td>
<td>
<p>
<li>Includes floating point support via a Standard Math Library.</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
patacongo
committed
<li>Add-on <a href="http://cxx.uclibc.org/">uClibc++</a> module provides Standard C++ Library (LGPL).</li>
</p>
</td>
</tr>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Networking</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Multiple network interface support; multiple network link layer support.</li>
</p>
</td>
</tr>
<li>IPv4, IPv6, TCP/IP, UDP, ICMP, IGMPv2 (client) stacks.</li>
<tr>
<td><br></td>
<td>
<p>
<li>IP Forwarding (routing) support.</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>User space stacks.</li>
</p>
</td>
</tr>
<li>Stream and datagram sockets.</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Address Families: IPv4/IPv6 (<code>AF_INET</code>/<code>AF_INET6</code>), Raw socket (<code>AF_PACKET</code>), raw IEEE 802.15.4 (<code>AF_IEEE802154</code>), and local, Unix domain socket support (<code>AF_LOCAL</code>).</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Special <code>INET</code> protocol sockets: Raw ICMP and ICMPv6 protocol ping sockets (<code>IPPROTO_ICMP</code>/<code>IPPROTO_ICMP6</code>).</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Custom user sockets.</li>
<tr>
<td><br></td>
<td>
<p>
<li>IP Forwarding.</li>
</p>
</td>
</tr>
<li>DNS name resolution / NetDB</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>IEEE 802.11 FullMac</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Radio Network Drivers: IEEE 802.15.4 MAC, Generic Packet Radio</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>6LoWPAN for radio network drivers (IEEE 802.15.4 MAC and generic packet radios)</li>
<tr>
<td><br></td>
<td>
<p>
Gregory Nutt
committed
<li>SLIP, TUN/PPP, Local loopback devices</li>
<tr>
<td><br></td>
<td>
<p>
<li>A port cJSON</li>
</p>
</td>
</tr>
</tr>
<tr>
<td><br></td>
<td>
<p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Networking utilities (DHCP server and client, SMTP client, Telnet server and client, FTP server and client, TFTP client, HTTP server and client, PPPD, NTP client).
Inheritable TELNET server sessions (as "controlling terminal").
<tr>
<td><br></td>
<td>
<p>
<li> ICMPv6 autonomous auto-configuration</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>
NFS Client. Client side support for a Network File System (NFS, version 3, UDP).
</li>
</p>
<tr>
<td><br></td>
<td>
<p>
<li>
A NuttX port of Jeff Poskanzer's <a href="http://acme.com/software/thttpd">THTTPD</a> HTTP server
integrated with the NuttX <a href="NuttXBinfmt.html">binary loader</a> to provide true, embedded CGI.
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>
PHY Link Status Management.
</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>
UDP Network Discovery (Contributed by Richard Cochran).
</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>
XML RPC Server (Contributed by Richard Cochran).
</li>
</p>
</td>
Alan Carvalho de Assis
committed
Support for networking modules (e.g., ESP8266).
<tr>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>FLASH Support</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li><i>MTD</i>-inspired interface for <i>M</i>emory <i>T</i>echnology <i>D</i>evices.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>NAND support.</li>