Apache NuttX-9.0.0 Release Notes

This is the first release of NuttX as Apache NuttX (Incubating) and represents our first major milestone as a Podling of the Apache Software Foundation’s Incubator. This release is the culmination of nearly 6 months of hard work and includes several new architectures and drivers, and numerous improvements and bug fixes to the core RTOS, drivers, and networking subsystems.

Note that release consists of two tarballs: apache-nuttx-9.0.0-incubating.tar.gz and apache-nuttx-apps-9.0.0-incubating.tar.gz. These are available from:

https://downloads.apache.org/incubator/nuttx/9.0.0/

Both may be needed (see the top-level nuttx/README.txt file for build information). SHA512 checksums:

cb13d7081fb74d314950b1d04fd9ec97e7a94102eaea232a47fc3d02376e62450c42ff8e45b9ab7cebe09b5f3dd870403d37f7a602f48d492bf9fb924b1c4837  apache-nuttx-9.0.0-incubating.tar.gz
078549269afc3548c5de285d4f653148236c2aaa84a0181c972f830bb3ffd187bedbf5ffbc53b7021a6944d584cbf5a6919569af469154289db5f151053ce897  apache-nuttx-apps-9.0.0-incubating.tar.gz
  • Major Changes to Core OS
    • Bugfixes
      • nxsem_wait_uninterruptible() now returns if the task is canceled.
      • Fix a bug in pthread_condwait() that was improperly re-initializing the mutex.
      • In sched_setpriority(), fix functions called inside a DEBUGASSERT that were eliminated when assertions are disable
  • Compatibility Concerns

    • The configuration option CONFIG_CAN_PASS_STRUCT is now removed. Previously, it was used (at the cost of breaking standards support) to support older versions of the SDCC compiler that couldn’t pass structs/unions as functions’ parameters. A newer version of the compiler has resolved the issue.
  • Major Changes to Build System
    • Add a post-build function that allows extending the build with CPU/board-specific logic.
    • Add build tools to simplify ZDS-II tool usage.
    • mkexport.sh: Deal with ARCHSCRIPT containing multiple files.
    • Various nxstyle improvements.
  • Architectural Support
    • New architecture support
      • Add support for RISCV-64
      • Add support for x86_64 (tested on QEMU)
      • Add support for ELF64
      • Add a port to the NUCLEO-F429ZI board
      • Add support for the STM32H747I-DISCO board
      • Add Z20X board support and bootloader to upload code from the W25 flash to SRAM
      • Add initial support for Litex with softcore CPU VexRiscV SoC
      • Add support for the Digilent ARTY_A7 board to test the Litex port
      • Added initial support for Sipeed Maix Bit board with Kendryte K210 processor
      • New architectural support: ez80f92
      • Flat address x86_64 port of NuttX
      • Support to run NuttX on ESP32 QEMU
      • Initial support for Sipeed Maix Bit board with Kendryte K210 processor
      • Add initial support for Kendryte K210 processor in SMP mode
      • NXP S32K11x (Cortex-M0+) and S32K14x (Cortext-M4F): Add support for NXP automotive boards.
      • XMC 4700 (Cortex-M4F)
    • Architectures with significant improvements
      • ESP32 loadable modules support
      • i.MX RT: FLEXIO clock config logic.
      • Fix the clock configuration for the i.MX RT family
      • i.MX RT: Add ability to run from OCRAM
      • SAMA5D27 peripheral support - USB Host working
      • z20x: Add W25 bootloader
      • i.MX RT: Add USB Device support
      • STM32, STM32F7, STM32H7 add SPI DMATHRESHOLD
      • Improve the simulator timer
      • 64-bit modules on macOS simulator
      • z20x: Add XTP2046 SPI support; add timer support
      • RX65N RTC Driver added
      • NXP Freedom K28F Board SD-Card support
      • STM32H7: support SDRAM via FMC peripheral
      • LM3S6965-ek: Add PROTECTED build support
      • STM32H7: Added IWDG and WWDG, power management (sleep/stop/standby), WKUP pin configuration
      • SAMV71: Add read UID implementation and move flash functions to RAM
      • i.MX RT: Fix interrupts storm (serial & I2C)
      • Various fixes and cosmetic changes to the CxD56xx architecture
      • Fix SiFive FE310 related code (comments, improve serial irq handling, initial int status)
      • Implement QSPI for STM32H7
      • Improvements for the nRF52 port: I2C, SPI, GPIO support
      • Updates for LPC17xx/40xx serial
      • Adds basic support for Microchip SAM E54 Xplained Pro board
      • Adds an Ethernet driver for the SAME5x family (based on the SAMA5 GMAC driver)
      • Add CDC ECM Ethernet over USB 2.0 High Speed (tested on SAMA5D36-Xplained board)
      • Simulator: Reimplement simulator uart on top of serial driver framework
      • NXP S32K1XX peripheral clock fixes
      • Fix syscall stack alignment on armv7-m
      • Fix flash_erase(page) when page >= 256 for STM32L4 family
      • Add partial support for the NETLINK poll() operation.
      • Add serial DMA support for STM32F7
      • Add AM335x Clock Configuration
      • Add I2C support for AM335x
      • Add configuration to fine tune LPI2C Timeout for iMXRT
      • Add CAN support to AM335x
      • Add I2C support to STM32F0/L0/G0
      • Kinetis LPC SDCard improvements
      • Replace the busy polling with work_queue in the ethernet driver of simulator
      • Fix Xtensa’s SMP support to follow same logic from other SMP archs
      • PIC32MZ: SPI transfers can be configured to use DMA.
      • PIC32MZ: Implement cache operations.
  • Driver Support
    • New drivers
      • New driver for the ADS7828 I2C analog to digital converter
      • driver/ioexpander: New driver for PCA9538 I2C I/O expander
      • New driver type for battery monitor ICs.
      • Driver for the BQ769x0 battery monitor IC.
      • Add Support for Quectel EC20 4G LTE Module USB CDC/ACM
      • Add QSPI-based Winbond NOR FLASH driver
    • Drivers with significant improvements
      • Update all the drivers to check return value of nxsem_wait_uninterruptible().
      • MCP9844 shutdown mode support
      • fcntl: add O_CLOEXEC flag, add O_CLOEXEC/FD_CLOEXEC support
      • CDC-ECM Ethernet over USB 2.0 HS
      • smartfs improvements: Handling of duplicate sectors, support fsck to check and repair the smartfs file system, and recover SPI Flash from initial error state.
      • Various fixes for USBDEV driver: Remove unnecessary reset logic, fix descriptor type mismatch when dual speed is enabled, fix invalid/unsupported command processing, and fix string ID calculation.
      • Handle size zero in umm_malloc.c and umm_realloc.c, which causes a system freeze in kernel mode.
      • Fixed compilation issue with poll fds notification.
      • Report POLLHUP and POLLERR in ‘revents’ regardless the requested ‘events’ set.
  • Networking
    • Telnet: Fix/Refine CTRL+C to work on telnet
    • TCP: Fix of faulty TCP sequence increments
    • netdb: Fix netdb to query IPv4 and IPv6 addresses regardless the server address type
    • Netlink sockets may be set to non-blocking
    • Improve TUN and SLIP, refine Control+C Handling in Telnet
    • Sockets: Add socket MSG_DONTWAIT support
    • Network Loopback Driver: Add a configuration option to control packet size
    • Network IOCTLs: Add FIONBIO network IOCTL support
    • NFS: Support IPv4 and TCP
    • Sockets: Add IP and TCP socket options needed by iperf3
    • Netlink: Add support for asynchronous Netlink responses
    • TCP: Monitor TCP_POLL/TCP_NEWDATA/TCP_BACKLOG per the request like UDP counterpart
    • TCP: Minor design improvement to TCP delayed ACKs
    • DNS IPv4/IPv6 Dual Host Support: When IPv4/IPv6 Dual Stack is enabled, queries both types of addresses regardless of whether the DNS server is accessed via IPv4 or IPv6. As a result, getaddrinfo() may return a mixed (IPv4/IPv6) address list.
  • Applications
    • Improvements
      • Extend netutils and netinit to work with only Netlink sockets enabled
      • Add getprime program to check multi-thread performance
      • Improve zmodem send performance
      • Add simple HTS221, LSM303 and LSM6DSL examples
      • Improve to gs2200m wiki performance
      • Improve telnet server and enable it to listen on both IPv4 and IPv6
      • Improve ntpclient logic
      • Improve wapi to save configuration to file system
      • Improve wapi to skip associate if ssid is invalid
      • Improve cmd_nfsmount to use IPv4 and IPv6
      • Improve ostest for SMP and non-SMP configurations
      • Improve UDP to avoid using standard symbols
      • Improve dhcpd to include configurable timeout and retry count
    • Bugfixes
      • Correct format when printing ARP tablet entries
      • Ensure /bin/ping and ping work at the same time
      • Correct backward conditional logic in dhcpd_leaseexpired()
      • Fix several problems on ftpd
      • Fix dhcpd issue reported on Issue #17
      • Fix sendmail example to run on a local SMTP server
      • Fix buffer overflow on netlib
      • Fix compile errors in loopback mode of the tcpblaster
      • Fix stack corruption in ELF task test
      • Fix errors in NoBlockRecv and BlockRecv tests of usrsocktest
      • Fix ipforward IP Header issue for IPv4
      • Fix wrongly swapped parity options of CU program
      • Fix slcd to avoid using priv->fd before initializing it
      • Fix (tcp, udp)blaster to build on macOS
      • Correct the buffer type of base64 program