To start developing on Apache NuttX, we need to get the source code, configure it, compile it, and get it uploaded onto an embedded computing board. These instructions are for Ubuntu Linux and macOS Catalina. If you’re using a different version, you may need to change some of the commands.


  1. Install system packages

$ sudo apt install \
bison flex gettext texinfo libncurses5-dev libncursesw5-dev \
gperf automake libtool pkg-config build-essential gperf genromfs \
libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev \
libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux
  1. Give yourself access to the serial console device

This is done by adding your Linux user to the dialout group:

$ sudo usermod -a -G dialout $USER
$ # now get a login shell that knows we're in the dialout group:
$ su - $USER
$ brew install x86_64-elf-gcc  # Used by simulator
$ brew install u-boot-tools  # Some platform integrate with u-boot

If you are are building Apache NuttX on windows and using WSL follow that installation guide for Linux. This has been verified against the Ubunutu 18.04 version.

There may be complications interacting with programming tools over USB. Recently support for USBIP was added to WSL 2 which has been used with the STM32 platform, but it is not trivial to configure:

Download and install Cygwin using the minimal installation in addition to these packages:

make              bison             libmpc-devel
gcc-core          byacc             automake-1.15
gcc-g++           gperf             libncurses-devel
flex              gdb               libmpfr-devel
git               unzip             zlib-devel

To complete the installation of prerequisites, you need to install kconfig-frontends as instructed in the Quickstart guide.

Install a Cross-Compiler Toolchain

To build Apache NuttX you need the appropriate toolchain according to your target platform. Some Operating Systems such as Linux distribute toolchains for various architectures. This is usually an easy choice however you should be aware that in some cases the version offered by your OS may have problems and it may better to use a widely used build from another source.

The following example shows how to install a toolchain for ARM architecture:

$ apt install gcc-arm-none-eabi binutils-arm-none-eabi

First, create a directory to hold the toolchain:

$ usermod -a -G users $USER
$ # get a login shell that knows we're in this group:
$ su - $USER
$ sudo mkdir /opt/gcc
$ sudo chgrp -R users /opt/gcc
$ sudo chmod -R u+rw /opt/gcc
$ cd /opt/gcc

Download and extract toolchain:

$ HOST_PLATFORM=x86_64-linux   # use "mac" for macOS.
$ # For windows there is a zip instead (
$ wget${HOST_PLATFORM}.tar.bz2
$ tar xf gcc-arm-none-eabi-9-2019-q4-major-${HOST_PLATFORM}.tar.bz2

Add the toolchain to your PATH:

$ echo "export PATH=/opt/gcc/gcc-arm-none-eabi-9-2019-q4-major/bin:$PATH" >> ~/.bashrc

You can edit your shell’s rc files if you don’t use bash.


There are hints on how to get the latest tool chains for most supported architectures in the Apache NuttX CI helper script and Docker container

Get Source Code

Now that all required tools are installed, you need to download NuttX source-code.

Apache NuttX is actively developed on GitHub. If you intend to contribute changes or you simply need the absolute latest version, you should clone the Git repositories:

$ mkdir nuttx
$ cd nuttx
$ git clone nuttx
$ git clone apps

The development source code is also available as a compressed archive, should you need it:

$ curl -OL
$ curl -OL
# optionally, zipball is also available (for Windows users).

Apache NuttX releases are published on the project Downloads page and distributed by the Apache mirrors. Be sure to download both the nuttx and apps tarballs.

Next up is Compiling.