1```eval_rst 2.. include:: /header.rst 3:github_url: |github_link_base|/get-started/nuttx.md 4``` 5# NuttX RTOS 6 7## What is NuttX? 8 9[NuttX](https://nuttx.apache.org/) is a mature and secure real-time operating system (RTOS) with an emphasis on technical standards compliance and small size. 10It is scalable from 8-bit to 64-bit microcontrollers and microprocessors and compliant with the Portable Operating System Interface (POSIX) and the American National Standards Institute (ANSI) standards and with many Linux-like subsystems. 11The best way to think about NuttX is to think of it as a small Unix/Linux for microcontrollers. 12 13### Highlights of NuttX 14 15- **Small** - Fits and runs in microcontrollers as small as 32 kB Flash and 8 kB of RAM. 16- **Compliant** - Strives to be as compatible as possible with POSIX and Linux. 17- **Versatile** - Supports many architectures (ARM, ARM Thumb, AVR, MIPS, OpenRISC, RISC-V 32-bit and 64-bit, RX65N, x86-64, Xtensa, Z80/Z180, etc.). 18- **Modular** - Its modular design allows developers to select only what really matters and use modules to include new features. 19- **Popular** - NuttX is used by many companies around the world. Probably you already used a product with NuttX without knowing it was running NuttX. 20- **Predictable** - NuttX is a preemptible Realtime kernel, so you can use it to create predictable applications for realtime control. 21 22--- 23 24## Why NuttX + LVGL? 25 26Although NuttX has its own graphic library called [NX](https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=139629474), LVGL is a good alternative because users could find more eye-candy demos and they can reuse code from previous projects. 27LVGL is an [Object-Oriented Component Based](https://blog.lvgl.io/2018-12-13/extend-lvgl-objects) high-level GUI library, that could fit very well for a RTOS with advanced features like NuttX. 28LVGL is implemented in C and its APIs are in C. 29 30### Here are some advantages of using LVGL in NuttX 31 32- Develop GUI in Linux first and when it is done just compile it for NuttX. Nothing more, no wasting of time. 33- Usually, GUI development for low level RTOS requires multiple iterations to get things right, where each iteration consists of **`Change code` > `Build` > `Flash` > `Run`**. 34Using LVGL, Linux and NuttX you can reduce this process and just test everything on your computer and when it is done, compile it on NuttX and that is it. 35 36### NuttX + LVGL could be used for 37 38- GUI demos to demonstrate your board graphics capacities. 39- Fast prototyping GUI for MVP (Minimum Viable Product) presentation. 40- visualize sensor data directly and easily on the board without using a computer. 41- Final products with a GUI without a touchscreen (i.e. 3D Printer Interface using Rotary Encoder to Input data). 42- Final products with a touchscreen (and all sorts of bells and whistles). 43 44--- 45 46## How to get started with NuttX and LVGL? 47 48There are many boards in the [NuttX mainline](https://github.com/apache/incubator-nuttx) with support for LVGL. 49Let's use the [STM32F429IDISCOVERY](https://www.st.com/en/evaluation-tools/32f429idiscovery.html) as an example because it is a very popular board. 50 51### First you need to install the pre-requisites on your system 52 53Let's use the [Windows Subsystem for Linux](https://acassis.wordpress.com/2018/01/10/how-to-build-nuttx-on-windows-10/) 54 55```shell 56$ sudo apt-get install automake bison build-essential flex gcc-arm-none-eabi gperf git libncurses5-dev libtool libusb-dev libusb-1.0.0-dev pkg-config kconfig-frontends openocd 57``` 58 59### Now let's create a workspace to save our files 60 61```shell 62$ mkdir ~/nuttxspace 63$ cd ~/nuttxspace 64``` 65 66### Clone the NuttX and Apps repositories: 67 68```shell 69$ git clone https://github.com/apache/incubator-nuttx nuttx 70$ git clone https://github.com/apache/incubator-nuttx-apps apps 71``` 72 73### Configure NuttX to use the stm32f429i-disco board and the LVGL Demo 74 75```shell 76$ ./tools/configure.sh stm32f429i-disco:lvgl 77$ make 78``` 79 80If everything went fine you should have now the file `nuttx.bin` to flash on your board: 81 82```shell 83$ ls -l nuttx.bin 84-rwxrwxr-x 1 alan alan 287144 Jun 27 09:26 nuttx.bin 85``` 86 87### Flashing the firmware in the board using OpenOCD: 88```shell 89$ sudo openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg -c init -c "reset halt" -c "flash write_image erase nuttx.bin 0x08000000" 90``` 91 92Reset the board and using the 'NSH>' terminal start the LVGL demo: 93```shell 94nsh> lvgldemo 95``` 96 97## Where can I find more information? 98 99- This blog post: [LVGL on LPCXpresso54628](https://acassis.wordpress.com/2018/07/19/running-nuttx-on-lpcxpresso54628-om13098/) 100- NuttX mailing list: [Apache NuttX Mailing List](http://nuttx.incubator.apache.org/community/) 101 102