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>
<p>Last Updated: October 27, 2008</p>
</td>
</tr>
</table>
<hr><hr>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<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?
</td>
</tr>
<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="#footprint">Memory Footprint</a>.<br>
Just how big is it? Do I have enough memory to use 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>
<td>
<a href="#history">Release History</a><br>
What has changed in the last release of NuttX?
What unreleased changes are pending in CVS?
</td>
<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).
Its goals are:
<p>
<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: (1) It is not a goal to provide the rich level of OS
features like those provided with Linux.
Small footprint is more important than features.
Standard compliance is more important than small footprint.
(2) There is no MMU-based support for processes.
At present, NuttX assumes a flat address space.
</p>
<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>
<p>
Fully pre-emptible, fixed priority and round-robin scheduling.
</p>
<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>
<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>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<tr>
<td><br></td>
<td>
<p>
<li>Highly configurable.</li>
</p>
</tr>
<li>Easily extensible to new processor architectures, SoC architecture, or board architectures.
A <a href="NuttxPortingGuide.html">Porting Guide</a> is in development.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>POSIX/ANSI-like task controls, named message queues, counting semaphores, clocks/timers, signals, pthreads, environment variables, filesystem.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<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>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Network, USB (device), serial, CAN, driver architecture.</li>
<tr>
<td><br></td>
<td>
<p>
<li>RAMDISK, pipes, FIFO, <code>/dev/null</code>, <code>/dev/zero</code> drivers.</li>
</p>
</tr>
<li>Mount-able volumes. Bind mountpoint, filesystem, and block device driver.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<tr>
<td><br></td>
<td>
<p>
<li>ROMFS filesystem support.</li>
</p>
</tr>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>C Library</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<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>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
<tr>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>USB Device Support</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li><i>Gadget</i>-like architecture for USB device controller drivers and device-dependent USB class drivers.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>USB device controller drivers available for the NXP LPC214x and TI DM320.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Device-dependent USB class drivers available for USB serial.</li>
</p>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Bult-in USB trace functionality for USB debug.</li>
</p>
</tr>
<p>
<b>NuttX Add-Ons</b>.
The following packages are available to extend the basic NuttX feature set:
<p>
<center><table width="90%">
<tr>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>NuttShell (NSH)</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>A small, scalable, bash-like shell for NuttX with rich feature set and small footprint.
See the <a href="NuttShell.html">NuttShell User Guide</a>.</li>
</p>
</tr>
<td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Pascal Compiler with NuttX runtime P-Code interpreter add-on</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>The Pascal add-on is available for download from the
<a href="http://sourceforge.net/project/showfiles.php?group_id=189573">SourceForge</a>
website.</li>
</p>
</tr>
</table></center>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="downloads"><h1>Downloads</h1></a>
</td>
</tr>
</table>
<p><b>nuttx-0.3.16</b>.
The 28th release of NuttX (nuttx-0.3.16) is available for download
from the <a href="http://sourceforge.net/project/showfiles.php?group_id=189573">SourceForge</a>
website.
The change log associated with the release is available <a href="#currentrelease">here</a>.
These unreleased changes are listed <a href="#pendingchanges">here</a>.
<p><b>USB Support</b>.
The nuttx-0.3.16 release includes the first support for USB in NuttX.
A set of USB APIs were added to support USB device controller drivers and bindings to USB device class drivers.
The form of the interface was inspired by the Linux Gadget APIs.
</p>
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
At present USB device controller drivers are included for:
<ul>
<li>
The NXP LPC214x. This driver has been verified and is an early alpha stage in quality.
</li>
<li>
TI DM320. Coding for this driver is complete but it is completely untested as of this release.
</li>
</ul>
</p>
<p>
A controller-independent class driver is also included for:
<ul>
<li>
USB serial class device driver (emulates the Prolific PL2303 serial-to-USB adaptor).
This drver has only been verified with the Linux host PL2303 driver.
</li>
</ul>
</p>
<p><b>Other New Features</b>.
Other new features include:
<ul>
<li>
Add an option to set aside a separate stack for interrupt handling (ARM only).
This is useful when memory is constrained, there are multiple tasks, and
the interrupt stack requirement is high (as when USB is enabled).
</li>
</ul>
</p>
<p><b>Bugs Fixed</b>.
A few bugs were also fixed:
<li>
Fixed the frequency of system timer interrupts in the NXP LPC214x port
(off by 20x in nuttx-0.3.15)
</li>
<li>
Fixed serial driver bugs related to (1) open counts and (2) recognizing
O_NONBLOCK on read.
<li>
Fixed an error in read(); it was not setting the <code>errno</code> on errors returned
from the driver.
</li>
As usual, any feedback about bugs or suggestions for improvement would be greatly appreciated.
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="platforms"><h1>Supported Platforms</h1></a>
</td>
</tr>
</table>
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Linux User Mode</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
A user-mode port of NuttX to the x86 Linux platform is available.
The purpose of this port is primarily to support OS feature development.
<b>STATUS:</b>
Does not support interrupts but is otherwise fully functional.
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
<b>TI TMS320C5471</b> (also called <b>C5471</b> or <b>TMS320DA180</b> or <b>DA180</b>).
NuttX operates on the ARM7 of this dual core processor.
This port uses the <a href="http://www.spectrumdigital.com/">Spectrum Digital</a>
evaluation board with a GNU arm-elf toolchain* under Linux or Cygwin.
<b>STATUS:</b>
This port is complete, verified, and included in the initial NuttX release.
</p>
</td>
</tr>
patacongo
committed
<tr>
<td><br></td>
<td>
<p>
<b>NXP LPC214x</b>.
Support is provided for the NXP LPC214x family of processors. In particular,
support is provided for the mcu123.com lpc214x evaluation board (LPC2148).
This port also used the GNU arm-elf toolchain* under Linux or Cygwin.
patacongo
committed
</p>
<p>
<b>STATUS:</b>
The basic port includes successful booting, timer interrupts, serial console,
USB driver, succesfully passing the OS test, and a NuttShell (NSH) configuration.
patacongo
committed
</p>
</td>
</tr>
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<b>TI TMS320DM320</b> (also called <b>DM320</b>).
NuttX operates on the ARM9 of this dual core processor.
This port uses the
<a href="http://wiki.neurostechnology.com/index.php/Developer_Welcome">Neuros OSD</a>
The basic port (timer interrupts, serial ports, network, etc.) is complete.
All implemented features have been verified with the exception of the USB device-side
driver; that implementation is complete but completely untested.
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>8052 Microcontroller</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
This port uses the <a href="http://www.pjrc.com/">PJRC</a> 87C52 development system
and the <a href="http://sdcc.sourceforge.net/">SDCC</a> toolchain under Linux or Cygwin.
<b>STATUS:</b>
This port is complete but not stable with timer interrupts enabled.
There seems to be some issue when the stack pointer enters into the indirect IRAM
address space during interrupt handling.
This architecture has not been built in some time will likely have some compilation
problems because of SDCC compiler differences.
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
<b>Zilog Z16F</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<b>Zilog z16f Microncontroller</b>.
This port use the Zilog z16f2800100zcog development kit and the Zilog
ZDS-II Windows command line tools.
The initial release of support for the z16f was made available in NuttX version 0.3.7.
</p>
</td>
</tr>
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Zilog eZ80Acclaim!</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<b>Zilog eZ80Acclaim! Microncontroller</b>.
This port uses the ZiLOG ez80f0910200kitg development kit, eZ80F091 part
and the Zilog ZDS-II Windows command line tools.
The development environment is Cygwin under WinXP.
</p>
<p>
<b>STATUS:</b>
This is a work in progress. Verified ez80 support will be announced in a future NuttX release.
</p>
</td>
</tr>
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Zilog Z8Encore!</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<b>Zilog Z8Encore! Microncontroller</b>.
This port uses the either:
</p>
<ul>
<li>Zilog z8encore000zco development kit, Z8F6403 part, or</li>
<li>Zilog z8f64200100kit development kit, Z8F6423 part</li>
</ul>
<p>
and the Zilog ZDS-II Windows command line tools.
The development environment is Cygwin under WinXP.
</p>
<p>
<b>STATUS:</b>
This release has been verified only on the ZiLOG ZDS-II Z8Encore! chip simulation
as of nuttx-0.3.9.
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<b>Z80 Instruction Set Simulator</b>.
This port uses the <a href="http://sdcc.sourceforge.net/">SDCC</a> toolchain
under Linux or Cygwin (verified using version 2.6.0).
This port has been verified using only a Z80 instruction simulator.
That simulator can be found in the NuttX CVS
<a href="http://nuttx.cvs.sourceforge.net/nuttx/misc/sims/z80sim/">here</a>.
</p>
<p>
<b>STATUS:</b>
This port is complete and stable to the extent that it can be tested
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Other ports</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
There are partial ports for the TI TMS320DM270 and for MIPS.
</p>
<blockquote>* A highly modified <a href="http://buildroot.uclibc.org/">buildroot</a>
is available that may be used to build a NuttX-compatible arm-elf toolchain under
Linux or Cygwin.</blockquote>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="environments"><h1>Development Environments</h1></a>
</td>
</tr>
</table>
<center><table width="90%">
<tr>
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Linux + GNU make + GCC/binutils</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
The is the most natural development environment for NuttX.
Any version of the GCC/binutils toolchain may be used.
There is a highly modified <a href="http://buildroot.uclibc.org/">buildroot</a>
available for download from the
<a href="http://sourceforge.net/project/showfiles.php?group_id=189573">NuttX SourceForge</a>
page.
This download may be used to build a NuttX-compatible arm-elf toolchain under Linux or Cygwin.
Additional support for m68k, m68hc11, and m68hc12 is available in the
<a href="http://nuttx.cvs.sourceforge.net/nuttx/misc/buildroot/">NuttX CVS</a>.
</p>
</td>
</tr>
<tr>
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Linux + GNU make + SDCC</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
Also very usable is the Linux environment using the
<a href="http://sdcc.sourceforge.net/">SDCC</a> compiler.
The SDCC compiler provides support for the 8051/2, z80, hc08, and other microcontrollers.
The SDCC-based logic is less well exercised and you will likely find some compilation
issues if you use parts of NuttX with SDCC that have not been well-tested.
</p>
</td>
</tr>
<tr>
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Cygwin + GNU make + GCC/binutils</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
This combination works well too.
It works just as well as the native Linux environment except
that compilation and build times are a little longer.
The custom NuttX buildroot referenced above may be build in
the Cygwin environment as well.
</p>
</td>
</tr>
<tr>
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Cygwin + GNU make + SDCC</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
I have never tried this combination, but it would probably work just fine.
</p>
</td>
</tr>
<tr>
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
<td bgcolor="#5eaee1">
<b>Cygwin + GNU make + Windows Native Toolchain</b>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
This is a tougher environment.
In this case, the Windows native toolchain is unaware of the the
Cygwin <i>sandbox</i> and, instead, operates in the native Windows environment.
The primary difficulties with this are:
</p>
<ul>
<li>
<b>Paths</b>.
Full paths for the native toolchain must follow Windows standards.
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
For example, the path <code>/home/my\ name/nuttx/include</code> my have to be
converted to something like <code>'C:\cygwin\home\my name\nuttx\include'</code>
to be usable by the toolchain.
</li>
<p>
Fortunately, this conversion is done simply using the <code>cygpath</code> utility.
</p>
<li>
<b>Symbolic Links</b>
NuttX depends on symbolic links to install platform-specific directories in the build system.
On Linux, true symbolic links are used.
On Cygwin, emulated symbolic links are used.
Unfortunately, for native Windows applications that operate outside of the
Cygwin <i>sandbox</i>, these symbolic links cannot be used.
</li>
<p>
The NuttX make system works around this limitation by copying the platform
specific directories in place.
These copied directories make work a little more complex, but otherwise work well.
</p>
</ul>
<p>
At present, on the Zilog Z16F port uses a native Windows toolchain
(the Zilog ZDS-II toolchain).
</p.
</td>
</tr>
<tr>
<td valign="top"><img height="20" width="20" src="favicon.ico"></td>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
The primary environmental dependency of NuttX are (1) GNU make,
(2) bash scripting, and (3) Linux utilities (such as sed).
If you have other platforms that support GNU make or make
utilities that are compatible with GNU make, then it is very
likely that NuttX would work in that environment as well (with some
porting effort). If GNU make is not supported, then some significant
modification of the Make system would be required.
</p>
</td>
</tr>
</table></center>
<table width ="100%">
<tr bgcolor="#e4e4e4">
<td>
<a name="footprint"><h1>Memory Footprint</h1></a>
</td>
</tr>
</table>
The build for this ARM7 target that includes most of the OS features and
a broad range of OS tests. The size of this executable as given by the
Linux <tt>size</tt> command is (3/9/07):
<pre>
text data bss dec hex filename
53272 428 3568 57268 dfb4 nuttx
</pre>
This build for the ARM9 target includes a significant subset of OS
features, a filesystem, Ethernet driver, full TCP/IP, UDP and (minimal)
ICMP stacks (via uIP) and a small network test application: (11/8/07,
configuration netconfig, examples/nettest)
</p>
<pre>
text data bss dec hex filename
<p>
Another build for the ARM9 target includes a minimal OS feature