Skip to content
Snippets Groups Projects
NuttX.html 70 KiB
Newer Older
patacongo's avatar
patacongo committed
<html>
<head>
<title>NuttX</title>
</head>
<body background="backgd.gif">
patacongo's avatar
patacongo committed
<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: January 15, 2011</p>
patacongo's avatar
patacongo committed
    </td>
  </tr>
</table>
<hr><hr>
<table width ="100%">
  <tr bgcolor="#e4e4e4">
    <td>
patacongo's avatar
patacongo committed
    </td>
  </tr>
</table>

<center><table width ="80%">
<tr>
<td>
<table>
<tr>
patacongo's avatar
patacongo committed
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
  <td>
    <a href="#overview">Overview</a>.<br>
patacongo's avatar
patacongo committed
    What is NuttX?  Look at all those files and features... How can it be a tiny OS?
patacongo's avatar
patacongo committed
<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>
patacongo's avatar
patacongo committed
  <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>
patacongo's avatar
patacongo committed
</tr>
<tr>
patacongo's avatar
patacongo committed
  <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>
patacongo's avatar
patacongo committed
</tr>
<tr>
patacongo's avatar
patacongo committed
  <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>
patacongo's avatar
patacongo committed
</tr>
<tr>
patacongo's avatar
patacongo committed
  <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>
patacongo's avatar
patacongo committed
</tr>
<tr>
patacongo's avatar
patacongo committed
  <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>
patacongo's avatar
patacongo committed
</tr>
<tr>
patacongo's avatar
patacongo committed
  <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>
patacongo's avatar
patacongo committed
</tr>
patacongo's avatar
patacongo committed
<tr>
patacongo's avatar
patacongo committed
  <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.
patacongo's avatar
patacongo committed
    (Do you want to help develop NuttX?  If so, send me an email).
patacongo's avatar
patacongo committed
</tr>
patacongo's avatar
patacongo committed
<tr>
patacongo's avatar
patacongo committed
  <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>
patacongo's avatar
patacongo committed
</tr>
patacongo's avatar
patacongo committed
<tr>
patacongo's avatar
patacongo committed
  <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>
patacongo's avatar
patacongo committed
</tr>
patacongo's avatar
patacongo committed
</table>
</td>
patacongo's avatar
patacongo committed
</tr>
patacongo's avatar
patacongo committed
</table></center>

<table width ="100%">
  <tr bgcolor="#e4e4e4">
  <td>
    <a name="overview"><h1>Overview</h1></a>
  </td>
  </tr>
</table>

patacongo's avatar
patacongo committed
<p>
patacongo's avatar
patacongo committed
  <b>Goals</b>.
patacongo's avatar
patacongo committed
  Nuttx is a real timed embedded operating system (RTOS).
  Its goals are:
<p>
patacongo's avatar
patacongo committed
<center><table width="90%">
<tr>
patacongo's avatar
patacongo committed
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
patacongo's avatar
patacongo committed
  <td bgcolor="#5eaee1">
    <b>Small Footprint</b>
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
patacongo's avatar
patacongo committed
    <p>
      Usable in all but the tightest micro-controller environments,
      The focus is on the tiny-to-small, deeply embedded environment.
    </p>
patacongo's avatar
patacongo committed
</tr>
<tr>
patacongo's avatar
patacongo committed
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
patacongo's avatar
patacongo committed
  <td bgcolor="#5eaee1">
    <b>Rich Feature OS Set</b>
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
patacongo's avatar
patacongo committed
    <p>
patacongo's avatar
patacongo committed
      The goal is to provide implementations of most standard POSIX OS interfaces
      to support a rich, multi-threaded development environment for deeply embedded
patacongo's avatar
patacongo committed
      processors.
patacongo's avatar
patacongo committed
    </p>
patacongo's avatar
patacongo committed
      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.
patacongo's avatar
patacongo committed
      (2) There is no MMU-based support for processes.
      At present, NuttX assumes a flat address space.
    </p>
patacongo's avatar
patacongo committed
</tr>
<tr>
patacongo's avatar
patacongo committed
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
patacongo's avatar
patacongo committed
  <td bgcolor="#5eaee1">
    <b>Highly Scalable</b>
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
patacongo's avatar
patacongo committed
    <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>
patacongo's avatar
patacongo committed
</tr>
<tr>
patacongo's avatar
patacongo committed
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
patacongo's avatar
patacongo committed
  <td bgcolor="#5eaee1">
    <b>Standards Compliance</b>
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
patacongo's avatar
patacongo committed
    <p>
      NuttX strives to achieve a high degree of standards compliance.
patacongo's avatar
patacongo committed
      The primary governing standards are POSIX and ANSI standards.
patacongo's avatar
patacongo committed
      Additional standard APIs from Unix and other common RTOS's are
      adopted for functionality not available under these standards
patacongo's avatar
patacongo committed
      or for functionality that is not appropriate for the deeply-embedded
patacongo's avatar
patacongo committed
      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>
patacongo's avatar
patacongo committed
</tr>
<tr>
patacongo's avatar
patacongo committed
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
patacongo's avatar
patacongo committed
  <td bgcolor="#5eaee1">
    <b>Real-Time</b>
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
patacongo's avatar
patacongo committed
    <p>
      Fully pre-emptible, fixed priority and round-robin scheduling.
    </p>
patacongo's avatar
patacongo committed
</tr>
<tr>
patacongo's avatar
patacongo committed
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
patacongo's avatar
patacongo committed
  <td bgcolor="#5eaee1">
    <b>Totally Open</b>
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
patacongo's avatar
patacongo committed
    <p>
      Non-restrictive BSD license.
    </p>
patacongo's avatar
patacongo committed
</tr>
patacongo's avatar
patacongo committed
<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://sourceforge.net/project/showfiles.php?group_id=189573&package_id=224585">download</a>
      to provide a complete development environment for many architectures.
    </p>
</tr>
patacongo's avatar
patacongo committed
</table></center>
patacongo's avatar
patacongo committed

patacongo's avatar
patacongo committed
<p>
  <b>Feature Set</b>.
  Key features of NuttX include:
<p>
<center><table width="90%">

<tr>
patacongo's avatar
patacongo committed
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
patacongo's avatar
patacongo committed
  <td bgcolor="#5eaee1">
    <b>Standards Compliant Core Task Management</b>
  </td>
</tr>

<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Modular, micro-kernel</li>
patacongo's avatar
patacongo committed
    </p>
</tr>

<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Fully pre-emptible.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>

<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Naturally scalable.</li>
patacongo's avatar
patacongo committed
<tr>
  <td><br></td>
  <td>
    <p>
      <li>Highly configurable.</li>
    </p>
</tr>

patacongo's avatar
patacongo committed
<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Easily extensible to new processor architectures, SoC architecture, or board architectures.
          A <a href="NuttxPortingGuide.html">Porting Guide</a> is in development.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>

<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>FIFO and round-robin scheduling.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>

<tr>
  <td><br></td>
  <td>
    <p>
      <li>Realtime, deterministic, with support for priority inheritance</li>
patacongo's avatar
patacongo committed
    </p>
</tr>

<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>POSIX/ANSI-like task controls, named message queues, counting semaphores, clocks/timers, signals, pthreads, environment variables, filesystem.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>

<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>VxWorks-like task management and watchdog timers.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>

<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>BSD socket interface.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>

<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Extensions to manage pre-emption.</li>
patacongo's avatar
patacongo committed
<tr>
  <td><br></td>
  <td>
    <p>
      <li>On-demand paging.</li>
    </p>
</tr>

patacongo's avatar
patacongo committed
<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Well documented in the NuttX <a href="NuttxUserGuide.html">User Guide</a>.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>

<tr>
patacongo's avatar
patacongo committed
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
patacongo's avatar
patacongo committed
  <td bgcolor="#5eaee1">
    <b>File system</b>
  </td>
</tr>

<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Tiny in-memory, root pseudo-file-system.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>

<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Supports character and block drivers.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>

<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Network, USB (host), USB (device), serial, CAN, driver architectures.</li>
patacongo's avatar
patacongo committed
<tr>
  <td><br></td>
  <td>
    <p>
      <li>RAMDISK, pipes, FIFO, <code>/dev/null</code>, <code>/dev/zero</code> drivers.</li>
    </p>
</tr>
patacongo's avatar
patacongo committed
<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Mount-able volumes.  Bind mountpoint, filesystem, and block device driver.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>FAT12/16/32 filesystem support.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>
patacongo's avatar
patacongo committed
<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Generic driver for SPI-based MMC/SD/SDH cards.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>
patacongo's avatar
patacongo committed
<tr>
  <td><br></td>
  <td>
    <p>
      <li>ROMFS filesystem support.</li>
    </p>
</tr>
patacongo's avatar
patacongo committed
<tr>
  <td><br></td>
  <td>
    <p>
      <li><a href="NuttXNxFlat.html">NXFLAT</a>.
      A new binary format call NXFLAT that can be used to 
      execute separately linked programs in place in a file system.
    </p>
</tr>
patacongo's avatar
patacongo committed
<tr>
patacongo's avatar
patacongo committed
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
patacongo's avatar
patacongo committed
  <td bgcolor="#5eaee1">
    <b>C Library</b>
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Fully integrated into the OS.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>

<tr>
patacongo's avatar
patacongo committed
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
patacongo's avatar
patacongo committed
  <td bgcolor="#5eaee1">
    <b>Networking</b>
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>TCP/IP, UDP, ICMP, IGMPv2 (client) stacks.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Small footprint (based on uIP).</li>
patacongo's avatar
patacongo committed
    </p>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>BSD compatible socket layer.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Networking utilities (DHCP, SMTP, TELNET, TFTP, HTTP)</li>
patacongo's avatar
patacongo committed
    </p>
</tr>
patacongo's avatar
patacongo committed
<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 <a href="NuttXNxFlat.html">NXFLAT</a> to provide true, embedded CGI.
      </li>
    </p>
</tr>
patacongo's avatar
patacongo committed

patacongo's avatar
patacongo committed
<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><i>FTL</i>.  Simple <i>F</i>lash <i>T</i>ranslation <i>L</i>ayer support file systems on FLASH.</li>
    </p>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
      <li>Support for SPI-based FLASH devices.</li>
    </p>
</tr>

patacongo's avatar
patacongo committed
<tr>
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
  <td bgcolor="#5eaee1">
    <b>USB Host Support</b>
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
      <li>USB host architecture for USB host controller drivers and device-dependent USB class drivers.</li>
    </p>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
      <li>USB host controller drivers available for the NXP LPC17xx.</li>
    </p>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
      <li>Device-dependent USB class drivers available for USB mass storage.</li>
    </p>
</tr>

patacongo's avatar
patacongo committed
<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>
patacongo's avatar
patacongo committed
      <li>USB device controller drivers available for the NXP LPC17xx, LPC214x, LPC313x, STMicro STM32 and TI DM320.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Device-dependent USB class drivers available for USB serial and for USB mass storage.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>
patacongo's avatar
patacongo committed
<tr>
  <td><br></td>
  <td>
    <p>
patacongo's avatar
patacongo committed
      <li>Built-in USB trace functionality for USB debug.</li>
patacongo's avatar
patacongo committed
    </p>
</tr>
patacongo's avatar
patacongo committed

patacongo's avatar
patacongo committed
<tr>
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
  <td bgcolor="#5eaee1">
    <b>Graphics Support</b>
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
      <li>Framebuffer drivers.</li>
    </p>
</tr>
patacongo's avatar
patacongo committed
<tr>
  <td><br></td>
  <td>
    <p>
      <li>LCD drivers for both parallel and SPI LCDs and OLEDs.</li>
    </p>
</tr>
patacongo's avatar
patacongo committed
<tr>
  <td><br></td>
  <td>
    <p>
      <li>
patacongo's avatar
patacongo committed
         NX: A graphics library, tiny windowing system and tiny font support that works with either framebuffer or LCD drivers.
         Documented in the <a href="NXGraphicsSubsystem.html">NX Graphics Subsystem</a>
         manual.
      </li>
patacongo's avatar
patacongo committed
    </p>
</tr>
patacongo's avatar
patacongo committed
</table></center>

patacongo's avatar
patacongo committed
<p>
  <b>NuttX Add-Ons</b>.
  The following packages are available to extend the basic NuttX feature set:
patacongo's avatar
patacongo committed
</p>
patacongo's avatar
patacongo committed
<center><table width="90%">

patacongo's avatar
patacongo committed
<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>

patacongo's avatar
patacongo committed
<tr>
patacongo's avatar
patacongo committed
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
patacongo's avatar
patacongo committed
  <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>
patacongo's avatar
patacongo committed
  </td>
</tr>
</table></center>

<p>
  <b>Look at all those files and features... How can it be a tiny OS?</b>.
  The NuttX feature list (above) is fairly long and if you look at the NuttX
  source tree, you will see that there are hundreds of source files comprising
  NuttX.  How can NuttX be a tiny OS with all of that?
patacongo's avatar
patacongo committed
</p>
<center><table width="90%">

<tr>
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
  <td bgcolor="#5eaee1">
    <b>Lots of Features -- More can be smaller!</b>
  </td>
</tr>

<tr>
  <td><br></td>
  <td>
    <p>
      The philosophy behind that NuttX is that lots of features are great... <i>BUT</i>
      also that if you don't use those features, then you should not have to pay a penalty
      for the unused features.
      And, with NuttX, you don't!  If you don't use a feature, it will not
      be included in the final executable binary.
      You only have to pay the penalty of increased footprint for the features
      that you actually use.
    </p>
    <p>
      Using a variety of technologies, NuttX can scale from the very tiny to
      the moderate-size system.  I have executed NuttX with some simple applications
      in as little as 32Kb <i>total</i> memory (code and data).
      On the other hand, typical, richly featured NuttX builds require more like 64Kb
      (and if all of the features are used, this can push 100Kb).
patacongo's avatar
patacongo committed
    </p>
  </td>
patacongo's avatar
patacongo committed
</tr>
patacongo's avatar
patacongo committed

<tr>
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
  <td bgcolor="#5eaee1">
    <b>Many, many files -- More really is smaller!</b>
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
      One may be intimidated by the size NuttX source tree.  There are hundreds of source files!
      How can that be a tiny OS?
      Actually, the large number of files is one of the tricks to keep NuttX small and
      as scalable as possible.
      Most files contain only a single function. 
      Sometimes just one tiny function with only a few lines of code.
      Why?
    </p>
    <ul>
      <li>
        <b>Static Libraries</b>.
        Because in the NuttX build processed, objects are compiled and saved into
        <i>static libraries</i> (<i>archives</i>).
        Then, when the file executable is linked, only the object files that are needed
        are extracted from the archive and added to the final executable.
        By having many, many tiny source files, you can assure that no code that you do
        not execute is ever included in the link.
        And by having many, tiny source files you have better granularity --
        if you don't use that tiny function of even just a few lines of code, it will
        not be included in the binary.
      </li>
    </ul>
  </td>
</tr>

<tr>
  <td valign="top" width="22"><img height="20" width="20" src="favicon.ico"></td>
  <td bgcolor="#5eaee1">
    <b>Other Tricks</b>
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
    <p>
      As mentioned above, the use of many, tiny source files and linking from static
      libraries keeps the size of NuttX down.
      Other tricks used in NuttX include:
    </p>
    <ul>
      <li>
         <b>Configuration Files</b>.
         Before you build NuttX, you must provide a configuration file that specifies
         what features you plan to use and which features you do not.
         This configuration file contains a long list of settings that control
         what is built into NuttX and what is not.
         There are hundreds of such settings
         (see the <a href="NuttxPortingGuide.html#apndxconfigs">NuttX Porting Guide</a>
         for a partial list that excludes platform specific settings).
         These many, many configuration options allow NuttX to be highly tuned to
         meet size requirements.
         The downside to all of these configuration options is that it greatly
         complicates the maintenance of NuttX -- but that is my problem, not yours.
      </li>
      <li>
         <b>Weak Symbols</b>
         The GNU toolchain supports <i>weak</i> symbols and these also help to keep
         the size of NuttX down.
         Weak symbols prevent object files from being drawn into the link even if they
         are accessed from source code.
         Careful use of weak symbols is another trick for keep unused code out of the
         final binary.
      </li>
    </ul>
  </td>
</tr>

patacongo's avatar
patacongo committed
</table></center>

patacongo's avatar
patacongo committed

<table width ="100%">
  <tr bgcolor="#e4e4e4">
  <td>
    <a name="group"><h1>NuttX Discussion Group</h1></a>
  </td>
  </tr>
</table>

<p>
  Most Nuttx-related discussion occurs on the <a href="http://tech.groups.yahoo.com/group/nuttx/" target="_top"><i>Yahoo!</i> NuttX group</a>.
  You are cordially invited to <a href="http://groups.yahoo.com/group/nuttx/join" target="_top">join</a>.
  I make a special effort to answer any questions and provide any help that I can.
</p>


patacongo's avatar
patacongo committed
<table width ="100%">
  <tr bgcolor="#e4e4e4">
  <td>
    <a name="downloads"><h1>Downloads</h1></a>
  </td>
  </tr>
</table>
patacongo's avatar
patacongo committed

patacongo's avatar
patacongo committed
<p><b>nuttx-5.16 Release Notes</b>:
patacongo's avatar
patacongo committed
  The 63<sup>rd</sup> release of NuttX, Version 5.16, was made on January 10, 2010 and is available for download from the
patacongo's avatar
patacongo committed
  <a href="http://sourceforge.net/project/showfiles.php?group_id=189573">SourceForge</a> website.
patacongo's avatar
patacongo committed
  The change log associated with the release is available <a href="#currentrelease">here</a>.
patacongo's avatar
patacongo committed
  Unreleased changes after this release are available in CVS.
patacongo's avatar
patacongo committed
  These unreleased changes are listed <a href="#pendingchanges">here</a>.
patacongo's avatar
patacongo committed
</p>
patacongo's avatar
patacongo committed
<p>
patacongo's avatar
patacongo committed
  This release includes initial support for USB host in NuttX.
  The USB host infrstruture is new to NuttX.
  This initial USB host release is probably only beta quality;
  it is expected the some bugs remain in the logic and that the functionality requires extension.
patacongo's avatar
patacongo committed
</p>
patacongo's avatar
patacongo committed
<p>
patacongo's avatar
patacongo committed
  Below is a summary of the NuttX USB host implementation as extracted from the
  <a href="NuttxPortingGuide.html">NuttX Porting Guide</a>:
</p>
<ul>
  <h3>6.3.9 USB Host-Side Drivers</h3>

patacongo's avatar
patacongo committed
  <ul>
patacongo's avatar
patacongo committed
    <li>
patacongo's avatar
patacongo committed
      <p>
        <b><code>include/nuttx/usb/usbhost.h</code></b>.
        All structures and APIs needed to work with USB host-side drivers are provided in this header file.
      </p>
    </li>
    <li>
      <p>
        <b><code>struct usbhost_driver_s</code></b>.
        Each USB host controller driver must implement an instance of <code>struct usbhost_driver_s</code>.
        This structure is defined in <code>include/nuttx/usb/usbhost.h</code>.
      </p>
      <p>
        <b>Examples</b>:
        <code>arch/arm/src/lpc17xx/lpc17_usbhost.c</code>.
      </p>
patacongo's avatar
patacongo committed
    </li>
    <li>
patacongo's avatar
patacongo committed
      <p>
        <b><code>struct usbhost_class_s</code></b>.
        Each USB host class driver must implement an instance of <code>struct usbhost_class_s</code>.
        This structure is also defined in <code>include/nuttx/usb/usbhost.h</code>.
      </p>
      <p>
        <b>Examples</b>:
        <code>drivers/usbhost/usbhost_storage.c</code>
      </p>
patacongo's avatar
patacongo committed
    </li>
    <li>
patacongo's avatar
patacongo committed
      <p>
        <b>USB Host Class Driver Registry</b>.
        The NuttX USB host infrastructure includes a <i>registry</i>.
        During its initialization, each USB host class driver must call the interface, <code>usbhost_registerclass()</code>
        in order add its interface to the registery.
        Later, when a USB device is connected, the USB host controller will look up the USB host class driver that is needed to support the connected device in this registry.
      </p>
      <p>
        <b>Examples</b>:
        <code>drivers/usbhost/usbhost_registry.c</code>, <code>drivers/usbhost/usbhost_registerclass.c</code>, and <code>drivers/usbhost/usbhost_findclass.c</code>,
      </p>
patacongo's avatar
patacongo committed
    </li>
    <li>
patacongo's avatar
patacongo committed
      <p>
        <b>Detection and Enumeration of Connected Devices</b>.
        Each USB host device controller supports two methods that are used to detect and enumeration newly connected devices
        (and also detect disconnected devices):
      </p>
      <p>
        <ul>
          <li>
            <p>
              <code>int (*wait)(FAR struct usbhost_driver_s *drvr, bool connected);</code>
            </p>
            <p>
              Wait for a device to be connected or disconnected.
            </p>
          </li>
          <li>
            <p>
              <code>int (*enumerate)(FAR struct usbhost_driver_s *drvr);</code>
            </p>
            <p>
              Enumerate the connected device.
              As part of this enumeration process, the driver will
              (1) get the device's configuration descriptor,
              (2) extract the class ID info from the configuration descriptor,
              (3) call <code>usbhost_findclass(</code>) to find the class that supports this device,
              (4) call the <code>create()</code> method on the <code>struct usbhost_registry_s interface</code> to get a class instance, and
              finally (5) call the <code>connect()</code> method of the <code>struct usbhost_class_s</code> interface.
              After that, the class is in charge of the sequence of operations.
            </p>
        </ul>
      </p>
patacongo's avatar
patacongo committed
    </li>
    <li>
patacongo's avatar
patacongo committed
      <p>
        <b>Binding USB Host-Side Drivers</b>.
        USB host-side controller drivers are not normally directly accessed by user code,
        but are usually bound to another, higher level USB host class driver.
        The class driver exports the standard NuttX device interface so that the connected USB device can be accessed just as with other, similar, on-board devices.
        For example, the USB host mass storage class driver (<code>drivers/usbhost/usbhost_storage.c</code>) will register a standard, NuttX block driver interface (like <code>/dev/sda</code>)
        that can be used to mount a file system just as with any other other block driver instance.
        In general, the binding sequence is:
      </p>
      <p>
        <ol>
          <li>
            <p>
              Each USB host class driver includes an intialization entry point that is called from the
              application at initialization time.
              This driver calls <code>usbhost_registerclass()</code> during this initialization in order to makes itself available in the event the the device that it supports is connected.
            </p>
            <p>
              <b>Examples</b>:
              The function <code>usbhost_storageinit()</code> in the file <code>drivers/usbhost/usbhost_storage.c</code>
            </p>
          </li>
          <li>
            <p>
              Each application must include a <i>waiter</i> thread thread that (1) calls the USB host controller driver's <code>wait()</code> to detect the connection of a device, and then
              (2) call the USB host controller driver's <code>enumerate</code> method to bind the registered USB host class driver to the USB host controller driver.
            </p>
            <p>
              <b>Examples</b>:
              The function <code>nsh_waiter()</code> in the file <code>configs/nucleus2g/src/up_nsh.c</code> and
              the function <code>nsh_waiter()</code> in the file <code>configs/olimex-lpc1766stk/src/up_nsh.c</code>.
            </p>
          </li>
          <li>
            <p>
              As part of its operation during the binding operation, the USB host class driver will register an instances of a standard NuttX driver under the <code>/dev</code> directory.
              To repeat the above example, the USB host mass storage class driver (<code>drivers/usbhost/usbhost_storage.c</code>) will register a standard, NuttX block driver interface (like <code>/dev/sda</code>)
              that can be used to mount a file system just as with any other other block driver instance. 
            </p>
            <p>
              <b>Examples</b>:
              See the call to <code>register_blockdriver()</code> in the function <code>usbhost_initvolume()</code> in the file <code>drivers/usbhost/usbhost_storage.c</code>.
            </p>
          </li>
        </ol>
      </p>
patacongo's avatar
patacongo committed
    </li>
patacongo's avatar
patacongo committed
  </ul>
patacongo's avatar
patacongo committed
</ul>
patacongo's avatar
patacongo committed

patacongo's avatar
patacongo committed
<table width ="100%">
  <tr bgcolor="#e4e4e4">
  <td>
    <a name="platforms"><h1>Supported Platforms</h1></a>
  </td>
  </tr>
</table>
patacongo's avatar
patacongo committed

patacongo's avatar
patacongo committed
<center><table width="90%">
<tr>
patacongo's avatar
patacongo committed
  <td valign="top"><img height="20" width="20" src="favicon.ico"></td>
patacongo's avatar
patacongo committed
  <td bgcolor="#5eaee1">
    <b>Linux User Mode</b>
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
patacongo's avatar
patacongo committed
    <p>
patacongo's avatar
patacongo committed
      A user-mode port of NuttX to the x86 Linux/Cygwin platform is available.
patacongo's avatar
patacongo committed
      The purpose of this port is primarily to support OS feature development.
patacongo's avatar
patacongo committed
    </p>
patacongo's avatar
patacongo committed
    <ul>
      <p>
        <b>STATUS:</b>
        Does not support interrupts but is otherwise fully functional.
      </p>
    </ul>
patacongo's avatar
patacongo committed
   </td>
</tr>
<tr>
patacongo's avatar
patacongo committed
  <td valign="top"><img height="20" width="20" src="favicon.ico"></td>
patacongo's avatar
patacongo committed
  <td bgcolor="#5eaee1">
patacongo's avatar
patacongo committed
    <b>ARM7TDMI</b>.
patacongo's avatar
patacongo committed
  </td>
</tr>
<tr>
  <td><br></td>
  <td>
patacongo's avatar
patacongo committed
    <p>
patacongo's avatar
patacongo committed
      <b>TI TMS320C5471</b> (also called <b>C5471</b> or <b>TMS320DA180</b> or <b>DA180</b>).
patacongo's avatar
patacongo committed
      NuttX operates on the ARM7 of this dual core processor.
      This port uses the <a href="http://www.spectrumdigital.com/">Spectrum Digital</a>
patacongo's avatar
patacongo committed
      evaluation board with a GNU arm-elf toolchain* under Linux or Cygwin.
patacongo's avatar
patacongo committed
    </p>
patacongo's avatar
patacongo committed
    <ul>
      <p>
        <b>STATUS:</b>
        This port is complete, verified, and included in the initial NuttX release.
      </p>