NXDART: Distributed Automated Build and Runtime Test Environment for Apache NuttX RTOS

Here goes  my latest technical publication from the world of embedded systems and electronics, authored by Tomasz Cedro (1,2,5,6), Gregory Nutt (1), Lup Yuen Lee (1), Grzegorz Południewski (2,6), Szymon Wilk (2,4), and Wojciech Glinkowski (2,3), from the (1) Apache NuttX RTOS; (2) Polish Telemedicine and e-Health Society; (3) Warsaw Medical University, Poland; (4) Poznan University of Technology, Poland; (5) CeDeROM, Poland, (6) IQCREDO, Poland.

Paper was published in the International Journal of Electronics and Telecommunications Vol. 72 No. 3 (2026) and is available online in open-access at IJET [1] and NuttX [2] websites.

Abstract

This paper presents the concept and initial implementation of a distributed automated build and runtime test environment for NuttX, called NXDART. NuttX is Apache 2.0 licensed Free and Open-Source (FOSS) Real-Time Operating System (RTOS), created by Gregory Nutt and released to the public in 2007, with strong focus on portability, small footprint, scalability, and compatibility with POSIX, ANSI, and other stan dards commonly used by Unix and other RTOSes (e.g. VxWorks).

NuttX community consists of volunteering hobbyists, academia, and small/medium/large enterprise professionals from around the world. NuttX supports over 15 different 8..64-bit CPU architectures (RISC-V, ARM, ARM64, AVR, CEVA, HC, MIPS, Misoc, OpenRISC, Renesas, SPARC, TriCore, x86, AMD64, Xtensa, Z16, Z80, FPGA) on over 340 unique hardware boards with over 1600 example target firmware configurations. Project development intensity is measured in thousands of files changed every month with hundreds thousands of code lines modifications.

In order to assure self-compatibility and long term maintenance for supported platform all new source code contributions are always processed manually by independent reviewers and automated Continuous Integration (CI) software tools. Unfortunately, not all breaking changes can be detected that way. Code may build for various architectures and even run correctly on emulators but it may still not work as expected on real world hardware. Therefore, comprehensive runtime tests are required.

Hardware testing of hundreds of different devices in one place turned out impossible for our free and community driven project. To address this problem we have invented distributed hardware-in-the-loop (HIL) test environment that is easy to set up and maintain as it reuses hardware components already owned by hundreds of users around the world. This approach assures maximum coverage of possible boards and build environments, independence and uninterrupted redundant availability of build and runtime test automation, with feedback logs reporting directly to the project upstream, at virtually zero cost.

[1] https://ijet.pl/index.php/ijet/article/view/10.24425-ijet.2026.157953
[2] https://nuttx.apache.org/articles

Python Matplotlib macOS backend

Matplotlib is a nice Matlab-like environment for Python. If you encounter a backend related problem while using Matplotlib [1] on a Python Virtualenv [2], then you need to explicitly select one (i.e. backend : Qt5Agg) in a ~/.config/matplotlib/matplotlibrc (or directly in a matplotlib file located in current working directory) configuration file. Then remember to use modern interpreter and meet dependencies requirements. Example below:

$ mkdir ~/.matplotlib
$ echo "backend : Qt5Agg" >> ~/.config/matplotlib/matplotlibrc
$ echo "backend : Qt5Agg" >> matplotlibrc
$ python3.6 -m venv venv-mac-36
$ source venv-mac-36/bin/activate
$ which python
$ pip install matplotlib pyqt5

Now you can use Matplotlib inside created Python Virtualenv (assuming you had Python 3.6 and Qt5 [3] already installed on your system). Other backends are: TKAgg, GTKAgg, Qt4Agg, Qt5Agg, WXAgg [4].

[1] https://matplotlib.org/
[2] https://www.python.org/
[3] https://www.qt.io/
[4] https://matplotlib.org/faq/usage_faq.html

JTAGulator

I just did a self-assembly of JTAGulator. This simple and amazing device indeed works and shortens JTAG pinout search from days to seconds. AMAZING! I have some spare devices to sale cheap in EU, if you want one let me know! :-)

JTAGulator is an open source hardware tool, created by Joe Grand / Grand Idea Studio, that assists in identifying OCD connections from test points, vias, or component pads on a target device. All you need is a target device, bunch of tap wires / cables, USB-Mini cable, and serial terminal to operate JTAGulator.



On-chip debug (OCD) interfaces can provide chip-level control of a target device and are a primary vector used by engineers, researchers, and hackers to extract program code or data, modify memory contents, or affect device operation on-the-fly. Depending on the complexity of the target device, manually locating available OCD connections can be a difficult and time consuming task, sometimes requiring physical destruction or modification of the device.

LibSWD-0.7 RELEASE

It is my great pleasure to inform you folks that, almost after four years, I did a new release of LibSWD-0.7 [1], a low-level embedded systems access open framework. Special thanks goes to Andrew Parlane of Carallon Ltd [2] for his much appreciated contributions! Well now I feel like I need to invent some nice small device based on ARM Cortex-M0 CPU :-)

[1] https://github.com/cederom/LibSWD
[2] http://www.carallon.com/

PIP and Python Modules inside Blender

If you want to install additional Python [1] modules inside your Blender [2] environment, you can install PIP using this recommended script [3], then use PIP to install all modules that you want. Note Blender’s Python Virtualenv location is /path_to_blender/blender_version/python/bin/python and you need to use this particular interpreter to launch the script.

[1] https://www.python.org/
[2] https://www.blender.org/
[3] https://pip.pypa.io/en/stable/installing/

Is Blend4Web a Blender Game Engine replacement?

You just need to see this awsome Mars Curiosity [1] simuluator [2] made by NASAJPL [3] with Blender3D [4] Blend4Web [5] HTML5 [6] WebGL [7] Free and Open-Source Software :-)

Screen Shot 2017-01-15 at 15.25.15

[1] https://www.nasa.gov/mission_pages/msl
[2] https://eyes.nasa.gov/curiosity
[3] http://www.jpl.nasa.gov
[4] https://www.blender.org
[5] https://www.blend4web.com
[6] https://www.w3.org/TR/html5
[7] https://www.khronos.org/webgl

Google Android Nexus Device Un-Brick

GoogleNexus

If you happen to brick your Google Nexus device you can always use stock ROM images [1] to revert it to a default and operational state. Package contains not only OS but also bootloader and radio firmware images!

I have bricked my device by installing custom firmware that messed partitions layout inside a Flash Memory. I have seen lots of people having similar problem of endless bootloader-loop. There is no need to send a device to a service when bootloader is operational. All you need is a stock firmware image from Google [1], USB cable, and fastboot utility from Android SDK. If you happen to damage a bootloader, then hardware manipulation at low-level is necessary over JTAG, I can help to recover your device in that case.. no worries :-)

[1] https://developers.google.com/android/nexus/images

OpenOCD and LibSWD integration complete

Patches that integrate LibSWD with OpenOCD has been already sent, so the platform independent Serial Wire Debug in Open-Source becomes a reality! Mr. Gerrit takes care of the source code review part, while Mr. Jenkins takes care of proper binary build for various platforms and operating systems. This is the right moment to make use of developers mailing list for feedback, asking questions, blaming, testing, adding new features and voting to accept the patches, so the code becomes an integral part of the OpenOCD release! :-)

Orange Labs provided R&D environment for initial stages of the research. Warsaw University of Technology made this possible as part of my MSc and PhD thesis. Krzysztof Kajstura designed and provided his generic KT-LINK (FT2232H based) interface to work with. David Brownell first introduced the Transport layer in OpenOCD in 2010 to split Target from JTAG. Simon Qian was working in parallel on his own SWD implementation for a Versaloon interface (as part of intelligent firmware). Øyvind HarboePeter StugeSpencer Oliver, Rodrigo Rosa helped me on GIT usage and OpenOCD internals,  Freddie Chopin helped me a lot with commited patches to match OpenOCD coding standards, Akos Vandra helped me to test functionality as the program was created… and my other friends should be also noted here for their support :-)

Power of the few outweights power of the many! Thank you for your support! :-)