This is the second release of NuttX as Apache NuttX (Incubating).
Note that release consists of two tarballs: apache-nuttx-9.1.0-incubating.tar.gz and apache-nuttx-apps-9.1.0-incubating.tar.gz. These are available from:
Both may be needed (see the top-level nuttx/README.txt file for build information). SHA512 checksums:
39011fcecca399f497da9a17eb71d3da97341808f0527314e5ccdb3c4813d8a971f999f1c56d1adc530e57d48270cceeb0543b3bd0a6ef15dcb7ea1abf2a6988 apache-nuttx-9.1.0-incubating.tar.gz 6a3fa9f0a13b85a6bf56070389d0d4737f8e976efd4238daff4a2c1cf131c7e084dea6e315333f2584a8b170daca605ea59b084fc909e50d11d37d1df9546c30 apache-nuttx-apps-9.1.0-incubating.tar.gz
PR-965 PR-980 PR-984 ioctl is now always in the variadic form. Syscalls in KERNEL builds are also more efficient with this as well now. Previously the ioctl prototype was normally defined as:
int ioctl(int fd, int cmd, unsigned long arg);
unless the CONFIG_LIBC_IOCTL_VARIADIC was enabled in which case it was
int ioctl(int fd, int cmd, …); This form is now the form defined by opengroup and is also inline with Linux. Prior to this change there were issues with making ioctl calls on 64-bit arch since the implementation assumed that (void *) would be of size long. There is more discussion of this issue in the GitHub issue ticket here:
PR-962 PR-964 Add new interface sched_get_stackinfo that simplifies interfaces for things like TLS There are some security imposed rules for using this interface Any thread may query its own stack, A kernel thread may query the stack of any other thread Application threads, however, may query only the stacks of threads within the same task group, i.e., the main thread and any of the child pthreads created with the main thread as a parent or grandparent or great-grandparent.
PR-1141 Handle custom stack allocations sched_releasetcb() will normally free the stack allocated for a task. However, a task with a custom, user-managed stack may be created using nxtask_init() followed by nxtask_activate(). If such a custom stack is used then it must not be freed in this manner or a crash will most likely result.
This change adds a flag call TCB_FLAG_CUSTOM_STACK that may be passed in the the pre-allocated TCB to nxtask_init(). This flag is not used internally anywhere in the OS except that if set, it will prevent sched_releasetcb() from attempting to free that custom stack.
Many private architecture interfaces were using ‘up_’ instead of the arch name ‘arm_’ This fix is carried over many PRs such as PR-924. Many files also carried this same error in naming convention and were converted as well.
Major Changes to the Build System:
Parts of the build system have been refactored to reduce duplication and simplify Makefile and Make.defs files across many directories. These changes are particularly beneficial for boards.
Please note that if you develop your own custom boards, you may need to make some modifications to keep your board’s build scripts up-to-date with the rest of NuttX and avoid a broken or defective build. For details, see Compatibility Concerns, Changes to Build System, in these release notes.
PR-894 openamp and libmetal can now be downloaded and configured by build system - PR-941 Remove ‘u’ prefix from userspace library in FLAT Build so it is the same for all build types - PR-1044 ARM: Remove support for old redundant gcc toolchains
This removes support for the Codesourcery, Atollic, DevKitArm, Raisonance, and CodeRed toolchains. Not only are these tools old and no longer used but they are all equivalent to the standard ARM EABI toolchains. Retaining specific support was not meaningful (and they are still supported, but now just as generic EABI toolchains).
PR-1148 PR-1149 Improve build time especially on non-Linux platforms by providing a C version of incdir.sh
Bug Fixes: Many small changes to resolve dependency resolution issues that would sometimes appear during parallel builds. Parallel builds should be much more reliable now and bugs filed against any issues found.
PR-879 ARMv8-M support - PR-1051 STM32G474 support
Initial architectural support for the STM32G474 family of microcontrollers. In terms of peripherals, currently there is basic support for the RCC and UART, allowing NuttX to boot to a functional NSH prompt on this family. Other peripherals on the SoC are not yet supported and/or not tested yet. Contributions to enable other peripherals are welcome. This adds support for these variants:
STM32G474C STM32G474M STM32G474R STM32G474Q STM32G474V
PR-745 The full line of STM32H7 chips are now defined This adds support for these variants:
STM32H743AG STM32H743AI STM32H743BG STM32H743BI STM32H743IG STM32H743II STM32H743VG STM32H743VI STM32H743XG STM32H743XI STM32H743ZG STM32H753AI STM32H753BI STM32H753VI STM32H753XI STM32H753ZI
PR-811 i486: Fix corruption of esp register on full context restore This resolves a long standing issue with running the x86 port under QEMU where it would crash shortly after boot.
PR-1041 STM32H7: Improve IDMA transfer and cache handling This resolves an issue where the sdmmc driver crashes at boot when using writeback cache.
This also simplifies the sdmmc driver when the IDMA is in use. There is no need to mix IDMA and interrupt based transfers; instead, when making unaligned data tranfers, just make IDMA into an internal aligned buffer and then copy the data. This method also enables multiblock transfers, and transfers from/to data buffers which are not aligned on cache boundary.
PR-1110 STM32H7: Use FDCANSEL to determin FDCAN clock source if possible - PR-1165 STM32H7: SPI transaction appears to be completed before the data has actually been flushed TX DMA completes before the data has been actually sent out from the SPI fifo. This is expected, but the exchange should actually wait for spi tx to finish instead of dma to the fifo to finish. This replaces the dma completion event with the SPI TXC event for detecting end of transmission.
PR-1200 The boards_button_initialize and boards_userled_initialize functions now return the number of buttons and leds, thus their prototypes have changed from: void board_button_initialize(void) void board_userled_initialize(void)
uint32_t board_button_initialize(void) uint32_t board_userled_initialize(void).
PR-185 PR-828 nshlib Add the source command. Avoid use of sh where it is not needed since it pollutes the parent environment including the working directory and variables.