Skip to content
README.txt 77.1 KiB
Newer Older
Gregory Nutt's avatar
Gregory Nutt committed
  The current NuttX build system supports *only* the new compressed,
  defconfig configuration files generated using the kconfig-frontends tools
Bill Morgan's avatar
Bill Morgan committed
  as described in the preceding section.  Support for the older, legacy,
  manual configurations was eliminated in NuttX 7.0; support for
Gregory Nutt's avatar
Gregory Nutt committed
  uncompressed .config-files-as-defconfig files was eliminated after
  NuttX-7.21.  All configurations must now be done using the
  kconfig-frontends tool.  The older manual configurations and the new
  kconfig-frontends configurations are not compatible.  Old legacy
  configurations can *not* be used with the kconfig-frontends tool and,
  hence, cannot be used with releases of NuttX 7.0 and beyond:

  If you run 'make menuconfig' with a legacy configuration the resulting
  configuration will probably not be functional.

  Q: How can I tell if a configuration is a new kconfig-frontends
     configuration or an older, manual configuration?

  A: Only old, manual configurations will have an appconfig file


  Q: How can I convert a older, manual configuration into a new,
     kconfig-frontends toolchain.

  A: Refer to http://www.nuttx.org/doku.php?id=wiki:howtos:convertconfig
Gregory Nutt's avatar
Gregory Nutt committed
  ***** WARNING *****

  As described above, whenever you use a configuration, you really should
Bill Morgan's avatar
Bill Morgan committed
  always refresh the configuration with the following command *before* you
  make NuttX:
Gregory Nutt's avatar
Gregory Nutt committed

    make oldconfig

Gregory Nutt's avatar
Gregory Nutt committed
  OR

    make olddefconfig

Gregory Nutt's avatar
Gregory Nutt committed
  This will make sure that the configuration is up-to-date in the event that
  it has lapsed behind the current NuttX development (see the paragraph
  "Refreshing Configurations" above).  But this only works with *new*
Gregory Nutt's avatar
Gregory Nutt committed
  configuration files created with the kconfig-frontends tools.

  Further, this step is *NOT* optional with the new, compressed defconfig
  files.  It is a necessary step that will also uncompress the defconfig
  file, regenerating the .config and making it usable for NuttX builds.
Gregory Nutt's avatar
Gregory Nutt committed

  Never do 'make oldconfig' (OR 'make menuconfig') on a  configuration that
  has not been converted to use the kconfig-frontends tools!  This will
  damage your configuration (see
  http://www.nuttx.org/doku.php?id=wiki:howtos:convertconfig).

patacongo's avatar
patacongo committed
NuttX Configuration Tool under DOS
----------------------------------
patacongo's avatar
patacongo committed

patacongo's avatar
patacongo committed
  Recent versions of NuttX support building NuttX from a native Windows
  console window (see "Native Windows Build" below).  But kconfig-frontends
Gregory Nutt's avatar
Gregory Nutt committed
  is a Linux tool.  At one time this was a problem for Windows users, but
  now there is a specially modified version of the kconfig-frontends tools
  that can be used:
  http://uvc.de/posts/linux-kernel-configuration-tool-mconf-under-windows.html
patacongo's avatar
patacongo committed

Gregory Nutt's avatar
Gregory Nutt committed
  The configuration steps most recent versions of NuttX require the
  kconfig-tweak tool that is not not available in the the above.  However,
  there has been an update to this Kconfig Windows tools that does include
  kconfig-tweak:  http://reclonelabs.com/more-kconfig-awesomeness-for-windows/

  Source code is available here: https://github.com/reclone/kconfig-frontends-win32
  and https://github.com/reclone/kconfig-frontends-win32/releases

Gregory Nutt's avatar
Gregory Nutt committed
  It is also possible to use the version of kconfig-frontends built
  under Cygwin outside of the Cygwin "sandbox" in a native Windows
  environment:
patacongo's avatar
patacongo committed

  1. You can run the configuration tool using Cygwin.  However, the
     Cygwin Makefile.win will complain so to do this will, you have
     to manually edit the .config file:

      a. Delete the line: CONFIG_WINDOWS_NATIVE=y
      b. Change the apps/ directory path, CONFIG_APPS_DIR to use Unix
         style delimiters.  For example, change "..\apps" to "../apps"

     And of course, after you use the configuration tool you need to
     restore CONFIG_WINDOWS_NATIVE=y and the correct CONFIG_APPS_DIR.

  2) You can, with some effort, run the Cygwin kconfig-mconf tool
     directly in the Windows console window.  In this case, you do not
     have to modify the .config file, but there are other complexities:
patacongo's avatar
patacongo committed

      a. You need to temporarily set the Cygwin directories in the PATH
         variable then run kconfig-mconf manually like:
patacongo's avatar
patacongo committed

patacongo's avatar
patacongo committed

Gregory Nutt's avatar
Gregory Nutt committed
         There is a Windows batch file at tools/kconfig.bat that automates
patacongo's avatar
patacongo committed
         these steps:

         tools/kconfig menuconfig

       b. There is an issue with accessing DOS environment variables from
          the Cygwin kconfig-mconf running in the Windows console.  The
          following change to the top-level Kconfig file seems to work
          around these problems:
patacongo's avatar
patacongo committed
          config APPSDIR
              string
          -   option env="APPSDIR"
          +   default "../apps"

patacongo's avatar
patacongo committed
TOOLCHAINS
^^^^^^^^^^

Cross-Development Toolchains
----------------------------
patacongo's avatar
patacongo committed

  In order to build NuttX for your board, you will have to obtain a cross-
  compiler to generate code for your target CPU.  For each board,
  configuration, there is a README.txt file (at configs/<board-name>/README.txt).
  That README file contains suggestions and information about appropriate
  tools and development environments for use with your board.

  In any case, the PATH environment variable will need to be updated to
  include the location where the build can find the toolchain binaries.
patacongo's avatar
patacongo committed

NuttX Buildroot Toolchain
-------------------------
patacongo's avatar
patacongo committed

  For many configurations, a DIY set of tools is available for NuttX.  These
  tools can be downloaded from the NuttX Bitbucket.org file repository.  After
patacongo's avatar
patacongo committed
  unpacking the buildroot tarball, you can find instructions for building
  the tools in the buildroot/configs/README.txt file.

Bill Morgan's avatar
Bill Morgan committed
  Check the README.txt file in the configuration directory for your board
patacongo's avatar
patacongo committed
  to see if you can use the buildroot toolchain with your board (this
  README.txt file is located in configs/<board-name>/README.txt).

  This toolchain is available for both the Linux and Cygwin development
  environments.

  Advantages:  (1) NuttX header files are built into the tool chain,
  and (2) related support tools like NXFLAT tools, the ROMFS
  genromfs tools, and the kconfig-frontends tools can be built into your
  toolchain.

  Disadvantages:  This tool chain is not was well supported as some other
  toolchains.  GNU tools are not my priority and so the buildroot tools
  often get behind.  For example, until recently there was no EABI support
  in the NuttX buildroot toolchain for ARM.

  NOTE: For Cortex-M3/4, there are OABI and EABI versions of the buildroot
  toolchains.  If you are using the older OABI toolchain the prefix for
Gregory Nutt's avatar
Gregory Nutt committed
  the tools will be arm-nuttx-elf-; for the EABI toolchain the prefix will
  be arm-nuttx-eabi-.  If you are using the older OABI toolchain with
  an ARM Cortex-M3/4, you will need to set CONFIG_ARMV7M_OABI_TOOLCHAIN
  in the .config file in order to pick the right tool prefix.
  If the make system ever picks the wrong prefix for your toolchain, you
  can always specify the prefix on the command to override the default
  like:

    make CROSSDEV=arm-nuttx-elf

SHELLS
^^^^^^

  The NuttX build relies on some shell scripts.  Some are inline in the
  Makefiles and many are executable scripts in the tools/. directory.  The
  scripts were all developed using bash and many contain bash shell
  dependencies.

  Most of the scripts begin with #!/bin/bash to specifically select the
  bash shell.  Some still have #!/bin/sh but I haven't heard any complaints
  so these must not have bash dependencies.

  There are two shell issues that I have heard of:

  1. Linux where /bin/sh refers to an incompatible shell (like ksh or csh).

     In this case, bash is probably available and the #!/bin/bash at the
     beginning of the file should do the job.  If any scripts with #!/bin/sh
Gregory Nutt's avatar
Gregory Nutt committed
     fail, try changing that to #!/bin/bash and let me know about the change.

  2. FreeBSD with the Bourne Shell and no bash shell.

     The other, reverse case has also been reported on FreeBSD setups that
     have the Bourne shell, but not bash.  In this base, #!/bin/bash fails
     but #!/bin/sh works okay.  My recommendation in this case is to create
     a symbolic link at /bin/bash that refers to the Bourne shell.

     There may still be issues, however, with certain the bash-centric scripts
     that will require modifications.

patacongo's avatar
patacongo committed
BUILDING NUTTX
^^^^^^^^^^^^^^

patacongo's avatar
patacongo committed
Building
patacongo's avatar
patacongo committed

  NuttX builds in-place in the source tree.  You do not need to create
  any special build directories.  Assuming that your Make.defs is setup
  properly for your tool chain and that PATH environment variable contains
  the path to where your cross-development tools are installed, the
  following steps are all that are required to build NuttX:
patacongo's avatar
patacongo committed

Gregory Nutt's avatar
Gregory Nutt committed
    cd{TOPDIR}
patacongo's avatar
patacongo committed
    make

  At least one configuration (eagle100) requires additional command line
Gregory Nutt's avatar
Gregory Nutt committed
  arguments on the make command.  Read{TOPDIR}/configs/<board-name>/README.txt
patacongo's avatar
patacongo committed
  to see if that applies to your target.

Gregory Nutt's avatar
Gregory Nutt committed
Re-building
patacongo's avatar
patacongo committed

  Re-building is normally simple -- just type make again.

  But there are some things that can "get you" when you use the Cygwin
  development environment with Windows native tools.  The native Windows
  tools do not understand Cygwin's symbolic links, so the NuttX make system
  does something weird:  It copies the configuration directories instead of
  linking to them (it could, perhaps, use the NTFS 'mklink' command, but it
  doesn't).

  A consequence of this is that you can easily get confused when you edit
  a file in one of the linked (i.e., copied) directories, re-build NuttX,
  and then not see your changes when you run the program.  That is because
  build is still using the version of the file in the copied directory, not
  your modified file!

  Older versions of NuttX did not support dependencies in this
  configuration.  So a simple work around this annoying behavior in this
  case was the following when you re-build:
patacongo's avatar
patacongo committed
     make clean_context all
  This 'make' command will remove of the copied directories, re-copy them,
patacongo's avatar
patacongo committed
  then make NuttX.
patacongo's avatar
patacongo committed

  However, more recent versions of NuttX do support dependencies for the
  Cygwin build.  As a result, the above command will cause everything to be
  rebuilt (because it removes and will cause recreating the
  include/nuttx/config.h header file).  A much less gracefully but still
  effective command in this case is the following for the ARM configuration:

    rm -rf arch/arm/src/chip arch/arm/src/board

  This "kludge" simple removes the copied directories.  These directories
  will be re-created when you do a normal 'make' and your edits will then be
  effective.

Build Targets and Options
-------------------------
  Below is a summary of the build targets available in the top-level
  NuttX Makefile:

  all

    The default target builds the NuttX executable in the selected output
    formats.

  clean

    Removes derived object files, archives, executables, and temporary
    files, but retains the configuration and context files and directories.

  distclean

    Does 'clean' then also removes all configuration and context files.
    This essentially restores the directory structure to its original,
    unconfigured stated.

  Application housekeeping targets.  The APPDIR variable refers to the user
  application directory.  A sample apps/ directory is included with NuttX,
  however, this is not treated as part of NuttX and may be replaced with a
  different application directory.  For the most part, the application
  directory is treated like any other build directory in the Makefile script.
  However, as a convenience, the following targets are included to support
  housekeeping functions in the user application directory from the NuttX
  build directory.

  apps_clean

    Perform the clean operation only in the user application directory

  apps_distclean

    Perform the distclean operation only in the user application directory.
    The apps/.config file is preserved so that this is not a "full" distclean
Gregory Nutt's avatar
Gregory Nutt committed
    but more of a configuration "reset" for the application directory.

  export

    The export target will package the NuttX libraries and header files into
    an exportable package.  Caveats: (1) These needs some extension for the KERNEL
    build. (2) The logic in tools/mkexport.sh only supports GCC and, for example,
    explicitly assumes that the archiver is 'ar'

  download

    This is a helper target that will rebuild NuttX and download it to the target
    system in one step.  The operation of this target depends completely upon
    implementation of the DOWNLOAD command in the user Make.defs file.  It will
    generate an error an error if the DOWNLOAD command is not defined.

  The following targets are used internally by the make logic but can be invoked
  from the command under certain conditions if necessary.

  depend

    Create build dependencies. (NOTE:  There is currently no support for build
    dependencies under Cygwin using Windows-native toolchains.)

  context

    The context target is invoked on each target build to assure that NuttX is
    properly configured.  The basic configuration steps include creation of the
    the config.h and version.h header files in the include/nuttx directory and
    the establishment of symbolic links to configured directories.

  clean_context

    This is part of the distclean target.  It removes all of the header files
    and symbolic links created by the context target.

  Build Options:
  Of course, the value any make variable an be overridden from the make command
  line.  However, there is one particular variable assignment option that may
  be useful to you:

  V=1
    This is the build "verbosity flag."  If you specify V=1 on the make command
    line, you will see the exact commands used in the build. This can be very
    useful when adding new boards or tracking down compile time errors and
    warnings (Contributed by Richard Cochran).
  The beginnings of a Windows native build are in place but still not often
  used as of this writing.  The build was functional but because of lack of
  use may find some issues to be resolved with this build configuration.
  The windows native build logic initiated if CONFIG_WINDOWS_NATIVE=y is
  defined in the NuttX configuration file:

  This build:

    - Uses all Windows style paths
    - Uses primarily Windows batch commands from cmd.exe, with
patacongo's avatar
patacongo committed
    - A few extensions from GNUWin32

  In this build, you cannot use a Cygwin or MSYS shell. Rather the build must
  be performed in a Windows console window. Here is a better terminal than the
  standard issue, CMD.exe terminal:  ConEmu which can be downloaded from:
  https://sourceforge.net/projects/conemu/ or https://conemu.github.io/ .

  Build Tools.  The build still relies on some Unix-like commands.  I use
  the GNUWin32 tools that can be downloaded from http://gnuwin32.sourceforge.net/
  using the 'Download all' selection.  Individual packages can be download
  instead if you know what you are doing and want a faster download (No, I
  can't tell you which packages you should or should not download).
  Host Compiler:  I use the MingGW GCC compiler which can be downloaded from
  http://www.mingw.org/.  If you are using GNUWin32, then it is recommended
  the you not install the optional MSYS components as there may be conflicts.

patacongo's avatar
patacongo committed
  This capability should still be considered a work in progress because:
    (1) It has not been verified on all targets and tools, and
    (2) it still lacks some of the creature-comforts of the more mature
        environments.
patacongo's avatar
patacongo committed
  The Windows native build will depend upon a few Unix-like tools that can be
  provided either by MSYS or GNUWin32.  The GNUWin32 are available from
  http://gnuwin32.sourceforge.net/.  GNUWin32 provides ports of tools with a
  GPL or similar open source license to modern MS-Windows (Microsoft Windows
  2000 / XP / 2003 / Vista / 2008 / 7).  See
  http://gnuwin32.sourceforge.net/packages.html for a list of all of the tools
  available in the GNUWin32 package.
patacongo's avatar
patacongo committed
  The SourceForge project is located here:
  http://sourceforge.net/projects/gnuwin32/.  The project is still being
  actively supported (although some of the Windows ports have gotten very old).
patacongo's avatar
patacongo committed
  Some commercial toolchains include a subset of the GNUWin32 tools in the
  installation.  My recommendation is that you download the GNUWin32 tools
  directly from the sourceforge.net website so that you will know what you are
  using and can reproduce your build environment.
patacongo's avatar
patacongo committed
  GNUWin32 Installation Steps:
patacongo's avatar
patacongo committed
  The following steps will download and execute the GNUWin32 installer.
patacongo's avatar
patacongo committed
  1. Download GetGNUWin32-x.x.x.exe from
     http://sourceforge.net/projects/getgnuwin32/files/.  This is the
     installer.  The current version as of this writing is 0.6.3.
patacongo's avatar
patacongo committed
  2. Run the installer.
patacongo's avatar
patacongo committed
  3. Accept the license.
patacongo's avatar
patacongo committed
  4. Select the installation directory.  My recommendation is the
     directory that contains this README file (<this-directory>).
patacongo's avatar
patacongo committed
  5. After running GetGNUWin32-0.x.x.exe, you will have a new directory
     <this-directory>/GetGNUWin32
  Note that the GNUWin32 installer didn't install GNUWin32.  Instead, it
patacongo's avatar
patacongo committed
  installed another, smarter downloader.  That downloader is the GNUWin32
  package management tool developed by the Open SSL project.
patacongo's avatar
patacongo committed
  The following steps probably should be performed from inside a DOS shell.
patacongo's avatar
patacongo committed
  6. Change to the directory created by GetGNUWin32-x.x.x.exe
patacongo's avatar
patacongo committed
    cd GetGNUWin32
patacongo's avatar
patacongo committed
  7. Execute the download.bat script.  The download.bat script will download
     about 446 packages!  Enough to have a very complete Linux-like environment
     under the DOS shell.  This will take awhile.  This step only downloads
     the packages and the next step will install the packages.
patacongo's avatar
patacongo committed
     download
patacongo's avatar
patacongo committed
  8. This step will install the downloaded packages.  The argument of the
     install.bat script is the installation location.  C:\gnuwin32 is the
     standard install location:
patacongo's avatar
patacongo committed
     install C:\gnuwin32
patacongo's avatar
patacongo committed
  NOTE:  This installation step will install *all* GNUWin32 packages... far
  more than you will ever need.  If disc space is a problem for you, you might
  need to perform a manual installation of the individual ZIP files that you
  will find in the <this directory>/GetGNUWin32/packages directory.
patacongo's avatar
patacongo committed
CYGWIN BUILD PROBLEMS
^^^^^^^^^^^^^^^^^^^^^

Performance
-----------

  Build performance under Cygwin is really not so bad, certainly not as good
  as a Linux build.  However, often you will find that the performance is
  not just bad but terrible.  If you are seeing awful performance.. like two
  or three compilations per second.. the culprit is usually your Windows
  Anti-Virus protection interfering with the build tool program execution.

  I use Cygwin quite often and I use Windows Defender.  In order to get good
  build performance, I routinely keep the Windows Defender "Virus & Threat
  Protections Settings" screen up:  I disable "Real-Time Protection" just
  before entering 'make' then turn "Real-Time Protection" back on when the
  build completes.  With this additional nuisance step, I find that build
  performance under Cygwin is completely acceptable.

---------------------
  If you see strange behavior when building under Cygwin then you may have
  a problem with your PATH variable.  For example, if you see failures to
  locate files that are clearly present, that may mean that you are using
  the wrong version of a tool.  For example, you may not be using Cygwin's
  'make' program at /usr/bin/make.  Try:
patacongo's avatar
patacongo committed

Gregory Nutt's avatar
Gregory Nutt committed
    which make
patacongo's avatar
patacongo committed
    /usr/bin/make

  When you install some toolchains (such as Yargarto or CodeSourcery tools),
  they may modify your PATH variable to include a path to their binaries.
  At that location, they make have GNUWin32 versions of the tools.  So you
  might actually be using a version of make that does not understand Cygwin
  paths.
patacongo's avatar
patacongo committed

patacongo's avatar
patacongo committed

  1. Edit your PATH to remove the path to the GNUWin32 tools, or
  2. Put /usr/local/bin, /usr/bin, and /bin at the front of your path:
patacongo's avatar
patacongo committed

Gregory Nutt's avatar
Gregory Nutt committed
     export PATH=/usr/local/bin:/usr/bin:/bin:$PATH
patacongo's avatar
patacongo committed

------------------------------

  There are many popular Windows native toolchains that may be used with NuttX.
  Examples include CodeSourcery (for Windows), devkitARM, and several vendor-
  provided toolchains.  There are several limitations with using a and Windows
  based toolchain in a Cygwin environment.  The three biggest are:

  1. The Windows toolchain cannot follow Cygwin paths.  Path conversions are
     performed automatically in the Cygwin makefiles using the 'cygpath' utility
     but you might easily find some new path problems.  If so, check out 'cygpath -w'

  2. Windows toolchains cannot follow Cygwin symbolic links.  Many symbolic links
     are used in Nuttx (e.g., include/arch).  The make system works around these
     problems for the Windows tools by copying directories instead of linking them.
     But this can also cause some confusion for you:  For example, you may edit
     a file in a "linked" directory and find that your changes had no effect.
     That is because you are building the copy of the file in the "fake" symbolic
     directory.  If you use a Windows toolchain, you should get in the habit of
     making like this:

       make clean_context all

     An alias in your .bashrc file might make that less painful.  The rebuild
     is not a long as you might think because there is no dependency checking
     if you are using a native Windows toolchain.  That bring us to #3:

General Pre-built Toolchain Issues
----------------------------------

  To continue with the list of "Window Native Toolchain Issues" we can add
  the following.  These, however, are really just issues that you will have
  if you use any pre-built toolchain (vs. building the NuttX toolchain from
  the NuttX buildroot package):

  There may be incompatibilities with header files, libraries, and compiler
Bill Morgan's avatar
Bill Morgan committed
  built-in functions detailed below.  For the most part, these issues
  are handled in the existing make logic.  But if you are breaking new ground,
Gregory Nutt's avatar
Gregory Nutt committed
  then you may encounter these:

  4. Header Files.  Most pre-built toolchains will build with a foreign C
Gregory Nutt's avatar
Gregory Nutt committed
     library (usually newlib, but maybe uClibc or glibc if you are using a
     Linux toolchain).  This means that the header files from the foreign
     C library will be built into the toolchain.  So if you "include <stdio.h>",
     you will get the stdio.h from the incompatible, foreign C library and
     not the nuttx stdio.h (at nuttx/include/stdio.h) that you wanted.

Bill Morgan's avatar
Bill Morgan committed
     This can cause confusion in the builds and you must always be
     sure the -nostdinc is included in the CFLAGS.  That will assure that
Gregory Nutt's avatar
Gregory Nutt committed
     you take the include files only from

  5. Libraries.  What was said above header files applies to libraries.
     You do not want to include code from the libraries of any foreign
     C libraries built into your toolchain.  If this happens you will get
Gregory Nutt's avatar
Gregory Nutt committed
     perplexing errors about undefined symbols.  To avoid these errors,
     you will need to add -nostdlib to your CFLAGS flags to assure that
     you only take code from the NuttX libraries.

     This, however, may causes other issues for libraries in the toolchain
     that you do want (like libgcc.a or libm.a).  These are special-cased
     in most Makefiles, but you could still run into issues of missing
     libraries.

  6. Built-Ins.  Some compilers target a particular operating system.
     Many people would, for example, like to use the same toolchain to
     develop Linux and NuttX software.  Compilers built for other
     operating systems may generate incompatible built-in logic and,
     for this reason, -fno-builtin should also be included in your
     C flags

  And finally you may not be able to use NXFLAT.

  7. NXFLAT. If you use a pre-built toolchain, you will lose all support
     for NXFLAT.  NXFLAT is a binary format described in
     Documentation/NuttXNxFlat.html.  It may be possible to build
     standalone versions of the NXFLAT tools; there are a few examples
Gregory Nutt's avatar
Gregory Nutt committed
     of this in the buildroot repository at https://bitbucket.org/nuttx/buildroot
     However, it is possible that there could be interoperability issues
     with your toolchain since they will be using different versions of
Gregory Nutt's avatar
Gregory Nutt committed
     binutils and possibly different ABIs.
Gregory Nutt's avatar
Gregory Nutt committed
Building Original Linux Boards in Cygwin
----------------------------------------
Gregory Nutt's avatar
Gregory Nutt committed

  Some default board configurations are set to build under Linux and others
  to build under Windows with Cygwin.  Various default toolchains may also
  be used in each configuration.  It is possible to change the default
  setup.  Here, for example, is what you must do in order to compile a
  default Linux configuration in the Cygwin environment using the
  CodeSourcery for Windows toolchain.  After instantiating a "canned"
Gregory Nutt's avatar
Gregory Nutt committed
  NuttX configuration, run the target 'menuconfig' and set the following
  items:

    Build Setup->Build Host Platform->Windows
    Build Setup->Windows Build Environment->Cygwin
    System Type->Toolchain Selection->CodeSourcery GNU Toolchain under Windows

  In Windows 7 it may be required to open the Cygwin shell as Administrator
  ("Run As" option, right button) you find errors like "Permission denied".

Recovering from Bad Configurations
----------------------------------
Gregory Nutt's avatar
Gregory Nutt committed

  Many people make the mistake of configuring NuttX with the "canned"
  configuration and then just typing 'make' with disastrous consequences;
  the build may fail with mysterious, uninterpretable, and irrecoverable
  build errors.  If, for example, you do this with an unmodified Linux
  configuration in a Windows/Cgwin environment, you will corrupt the
  build environment.  The environment will be corrupted because of POSIX vs
  Windows path issues and with issues related to symbolic links.  If you
  make the mistake of doing this, the easiest way to recover is to just
  start over: Do 'make distclean' to remove every trace of the corrupted
  configuration, reconfigure from scratch, and make certain that the set
  the configuration correctly for your platform before attempting to make
  again.

  Just fixing the configuration file after you have instantiated the bad
  configuration with 'make' is not enough.

patacongo's avatar
patacongo committed
DOCUMENTATION
^^^^^^^^^^^^^

patacongo's avatar
patacongo committed
Additional information can be found in the Documentation/ directory and
patacongo's avatar
patacongo committed
also in README files that are scattered throughout the source tree.  The
documentation is in HTML and can be access by loading the following file
into your Web browser:

  Documentation/index.html

NuttX documentation is also available online at http://www.nuttx.org.

Below is a guide to the available README files in the NuttX source tree:
patacongo's avatar
patacongo committed

Gregory Nutt's avatar
Gregory Nutt committed
nuttx/
patacongo's avatar
patacongo committed
 |
 |- arch/
 |   |
patacongo's avatar
patacongo committed
 |   |   `- src
 |   |       `- lpc214x/README.txt
 |   |- renesas/
patacongo's avatar
patacongo committed
 |   |   |- include/
 |   |   |   `-README.txt
 |   |   |- src/
 |   |   |   `-README.txt
 |   |- x86/
 |   |   |- include/
 |   |   |   `-README.txt
 |   |   `- src/
 |   |       `-README.txt
patacongo's avatar
patacongo committed
 |   `- z80/
 |   |   `- src/
patacongo's avatar
patacongo committed
 |   |       |- z80/README.txt
 |   |       `- z180/README.txt, z180_mmu.txt
patacongo's avatar
patacongo committed
 |   `- README.txt
 |- audio/
 |   `-README.txt
 |- binfmt/
 |   `-libpcode/
 |       `-README.txt
patacongo's avatar
patacongo committed
 |- configs/
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- arduino-mega2560/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- avr32dev1/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- c5471evm/
 |   |   `- README.txt
 |   |- clicker2-stm32
 |   |   `- README.txt
 |   |- cloudctrl
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- demo0s12ne64/
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- dk-tm4c129x/
 |   |   `- README.txt
 |   |- ea3131/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- ea3152/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- eagle100/
 |   |   `- README.txt
 |   |- efm32-g8xx-stk/
 |   |   `- README.txt
 |   |- ekk-lm3s9b96/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- ez80f910200kitg/
 |   |   |- ostest/README.txt
 |   |   `- README.txt
 |   |- ez80f910200zco/
 |   |   |- dhcpd/README.txt
 |   |   |- httpd/README.txt
 |   |   |- nettest/README.txt
 |   |   |- nsh/README.txt
 |   |   |- ostest/README.txt
 |   |   |- poll/README.txt
 |   |   `- README.txt
 |   |   `- README.txt
 |   |- flipnclick-pic32mz/
 |   |   `- README.txt
 |   |- flipnclick-sam3x/
 |   |   `- README.txt
 |   |- freedom-k66f/
 |   |   `- README.txt
 |   |- freedom-kl25z/
 |   |   `- README.txt
 |   |- freedom-kl26z/
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- hymini-stm32v/
patacongo's avatar
patacongo committed
 |   |   `- README.txt
 |   |- kwikstik-k40/
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- launchxl-tms57004/
 |   |   `- README.txt
 |   |- lincoln60/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- lm3s6432-s2e/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- lm3s6965-ek/
 |   |   `- README.txt
 |   |- lm3s8962-ek/
 |   |- lpc4330-xplorer/
 |   |   `- README.txt
 |   |- lpc4337-ws/
 |   |   `- README.txt
 |   |- lpc4357-evb/
 |   |   `- README.txt
 |   |- lpc4370-link2/
 |   |   `- README.txt
 |   |- lpcxpresso-lpc1768/
 |   |   `- README.txt
 |   |- lpcxpresso-lpc54628/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- mbed/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- mcu123-lpc214x/
 |   |   `- README.txt
 |   |- micropendous3/
 |   |   `- README.txt
 |   |- mirtoo/
 |   |   `- README.txt
 |   |- misoc/
 |   |   `- README.txt
 |   |- moteino-mega/
 |   |   `- README.txt
 |   |- ne63badge/
 |   |   `- README.txt
 |   |- nrf52-pca10040/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- ntosd-dm320/
 |   |   |- doc/README.txt
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- nucleo-144/
 |   |   `- README.txt
 |   |- nucleo-f072rb/
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- nucleo-f091rc/
 |   |   `- README.txt
 |   |- nucleo-f303re/
 |   |   `- README.txt
 |   |- nucleo-f334r8/
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- nucleo-l432kc/
 |   |   `- README.txt
 |   |- nucleo-l452re/
 |   |   `- README.txt
 |   |- nucleo-l476rg/
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- nucleo-l496zg/
 |   |   `- README.txt
 |   |- nutiny-nuc120/
 |   |   `- README.txt
 |   |- olimex-efm32g880f129-stk/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- olimex-lpc1766stk/
patacongo's avatar
patacongo committed
 |   |   `- README.txt
 |   |- olimex-lpc2378/
patacongo's avatar
patacongo committed
 |   |   `- README.txt
 |   |- olimex-lpc-h3131/
 |   |   `- README.txt
 |   |- olimex-stm32-h405/
 |   |   `- README.txt
 |   |- olimex-stm32-h407/
 |   |   `- README.txt
 |   |- olimex-stm32-p107/
 |   |   `- README.txt
 |   |- olimex-stm32-p207/
 |   |   `- README.txt
 |   |- olimex-stm32-p407/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- olimex-strp711/
patacongo's avatar
patacongo committed
 |   |   `- README.txt
 |   |- open1788/
 |   |   `- README.txt
 |   |- p112/
 |   |   `- README.txt
 |   |- pcblogic-pic32mx/
 |   |   `- README.txt
 |   |- pic32mx7mmb/
 |   |   `- README.txt
 |   |- pic32mz-starterkit/
 |   |   `- README.txt
 |   |- pizero/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- sabre-6quad/
 |   |   `- README.txt
 |   |- sama5d2-xult/
 |   |   `- README.txt
 |   |- sama5d4-ek/
 |   |   `- README.txt
 |   |- samd20-xplained/
 |   |   `- README.txt
 |   |- samd21-xplained/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- sam3u-ek/
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- sam4cmp-db
 |   |   `- README.txt
 |   |- sam4e-ek/
 |   |   `- README.txt
 |   |- sam4s-xplained/
 |   |   `- README.txt
 |   |- sam4s-xplained-pro/
 |   |   `- README.txt
 |   |- same70-xplained/
 |   |   `- README.txt
 |   |- samv71-xult/
patacongo's avatar
patacongo committed
 |   |- sim/
Gregory Nutt's avatar
Gregory Nutt committed
 |   |   |- include/README.txt
patacongo's avatar
patacongo committed
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- skp16c26/
 |   |   `- README.txt
 |   |- stm3210e-eval/
 |   |   |- RIDE/README.txt
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- stm3220g-eval/
 |   |   |-ide/nsh/iar/README.txt
 |   |   |-ide/nsh/uvision/README.txt
patacongo's avatar
patacongo committed
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- stm3240g-eval/
 |   |   `- README.txt
 |   |- stm32f103-minumum/
 |   |   `- README.txt
 |   |- stm32f3discovery/
 |   |   `- README.txt
 |   |- stm32f4discovery/
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- stm32f411e-disco/
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |   |- fb/README.txt
 |   |   |- ide/ltcd/uvision/README.txt
 |   |- stm32f746g-disco/
 |   |   `- README.txt
 |   |- stm32f769i-disco/
 |   |   `- README.txt
 |   |- stm32l476-mdk/
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- stm32l476vg-disco/
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |   `- README.txt
 |   |- sure-pic32mx/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |   `- README.txt
 |   |   `- README.txt
 |   |- tm4c123g-launchpad/
 |   |   `- README.txt
 |   |- tm4c1294-launchpad/
 |   |   `- README.txt
 |   |- twr-k60n512/
 |   |   `- README.txt
 |   |- twr-k64f120m/
 |   |   `- README.txt
 |   |- u-blox-co27/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- us7032evb1/
 |   |   `- README.txt
 |   |- viewtool-stm32f107/
 |   |   `- README.txt
 |   |- xmc5400-relax/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- z16f2800100zcog/
 |   |   |- ostest/README.txt
 |   |   |- pashello/README.txt
 |   |   `- README.txt
 |   |- z80sim/
 |   |   `- README.txt
 |   |- z8encore000zco/
 |   |   |- ostest/README.txt
 |   |   `- README.txt
 |   |- z8f64200100kit/
 |   |   |- ostest/README.txt
 |   |   `- README.txt
 |   |- zkit-arm-1769/
 |   |   `- README.txt
 |   |- zp214xpa/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- eeprom/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- lcd/
 |   |   | README.txt
 |   |   `- pcf8574_lcd_backpack_readme.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- mtd/
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   |- sensors/
 |   |   `- README.txt
 |   `- README.txt
patacongo's avatar
patacongo committed
 |- fs/
 |   |- binfs/
 |   |   `- README.txt
 |   |- cromfs/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |   |- mmap/
 |   |   `- README.txt
 |   |- smartfs/
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |       `- README.txt
patacongo's avatar
patacongo committed
 |- graphics/
 |   `- README.txt
 |   `- README.txt
 |   |- nxfongs
 |   |   `- README.txt
patacongo's avatar
patacongo committed
 |- libxx/
 |   `- README.txt
patacongo's avatar
patacongo committed
 |- mm/
patacongo's avatar
patacongo committed
 |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |- net/
 |   |- sixlowpan
 |   |   `- README.txt
Gregory Nutt's avatar
Gregory Nutt committed
 |   `- README.txt
 |- syscall/