You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 32 Next »

Work In Progress

Work In Progress

NuttX 10.0 has not been released yet. These Release Notes are a work-in-progress in preparation for the next release of NuttX.  There is a board tracking the PRs that need to be looked at to add to this doc for the OS TODO ADD LINK and for the Apps TODO ADD LINK

What's New In This Release

Major Changes to Core OS

New Features

Major changes to the internal, OS timer (wdog) interfaces.  The change includes:

  • The wdog timer call backs used to support a variable number of arguments.  Now they support only a single argument (PR #1565).  This eliminates (1) the configuration option CONFIG_MAX_WDOGPARMS and the OS interfaces wd_create() and wd_delete()
  • wdog timer data structures are no longer pre-allocated.  Now they are allocated by the caller of wd_start().  This (1) eliminates the configuration options CONFIG_PREALLOC_WDOGS and CONFIG_WDOG_INTRESERVE, (2) eliminates the type WDOG_ID which was a pointer type to struct wdog_s, and (3) change the type of the first argument of all remaining wdog interfaces functions from WDOG_ID to FAR struct wdog_s *.

Because of these changes, all proprietary drivers maintained by all NuttX users will require modification.  The following summaries the required modifications:

  • Most drivers have a field in structure like WDOG_ID wdog;  That must be changed to struct wdog_s wdog;  That changes the field from a pointer to a struct wdog_s to the struct wdog_s storage itself.
  • Eliminate all calls to wd_create().   The WDOG_ID is not longer managed by the timing subsystem and the wd_create() interface has been removed.
  • The wd_delete() interface has also been removed, but more care will need to be exercised:  wd_delete() also cancels any running timer so, in many case, calls to wd_delete() should be replaced with calls to wd_cancel().  If you are certain that the timer has never been started, then you must remove the call to wd_delete() altogether.  Calling wd_cancel() with an un-initialized struct wdog_s instance may well cause a fatal crash.
  • Replace the first parameter of all remaining wdog function calls from.  For example, replace a call like ret = wd_cancel(priv->wdog) where priv->wdog was type WDOG_ID with the call ret = wd_cancel(&priv->wdog)where priv->wdog is now type struct wdog_s.

PR-1877 libc: Implement "j" modifier for scanf

PR-1864 libc: fs: Add relative path support

PR-1863 libc: Implement access()

PR-1866 libc: uio: enable writev() for sockets

PR-1853 libc: Implement popcount/popcountl/popcountll

PR-1850 Add tool for parsing the callstack for Trace32

PR-1840 Add POLLPRI for exception condition on the file descriptor

PR-1828 Implement mkdtemp syscall

PR-1826 libc: Add "tm_zone" member to tm

PR-1824 Implement etpriority syscall

PR-1821 Implement gettid syscall

PR-1818 Implement pipe2 syscall

PR-1779 libc: Minimal umask implementation

PR-1758 mm: Add lock to protect call to mm_addregion

PR-1756 libc: Implement gethrtime, getrlimit, setrlimit

PR-1658 libc: Add stubs for utimes

PR-1619 Fix inverted errno in mq_open

PR-1615 libc: Implement tm::tm_gmtoff field

PR-1611 libc: Allocate file_struct dynamically

Bug Fixes

PR-1911 init_section was not being emitted resulting in C++ static constructors not being called.

PR-1889 Fix build error for ::setbuf  if CONFIG_STDIO_DISABLE_BUFFERING is set

Major Changes to the Build System

New Features

Bug Fixes

Architectural Support

New Architecture Support

PR-1847 ARM: Initial support for ARMV6M to support CortexM0+

Architectures With Significant Improvements

cxd56xx

PR-1753 cxd56xx: Use spinlock in gpioint to improve SMP performance

PR-1650 cxd56xx: Use spinlock in rtc to improve SMP performance

PR-1621 cxd56xx: Use spinlock in serial to improve SMP performance

ESP32

PR-1422 ESP32: Add SPI driver (Master & Slave)

PR-1435 ESP32: Add I2C driver

PR-1491 ESP32: Add SPI Flash driver

PR-1525 ESP32: Add Ethernet driver

PR-1610 ESP32: Improve SPI transmision (DMA, IOMUX, software CS)

PR-1630 ESP32: Add support for HW RNG

PR-1830 ESP32: Add Power Management of Force-Sleep

PR-1859 ESP32: Add hist timer and improve the oneshot timer logic

PR-1754 ESP32: Add support for external SPIFLASH

PR-1613  ESP32: Add function for switching CPU from 80MHz to 240MHz

IMXRT

PR-1868 IMXRT: Add ADC driver

Kinetis

PR-1624 Kinetis: USBHOST improvements to avoid race condition durring freeing for queue head structure by using Async Advance Doorbell.

NRF52

PR-1418 NRF52: Add Timer and RTC drivers

PR-1432 NRF52: Add timer lowerhalf

PR-1635 NRF52: Add support for RTC event handling

PR-1636 NRF52: Add support for PPI peripheral

PR-1681 NRF52: Add support for GPIOTE task mode

PR-1726 NRF52: Extend systimer support

PR-1773 NRF52: Add ADC and PWM support

PR-1915 NRF52: Add serial termios support (no flow control)

PR-1907 NRF52: Add basic error handing for i2c in polling mode to support i2ctool.  Still not handled in DMA mode.

PR-1839 NRF52: Add missing SPI callback register hooks to support drivers like mmcsd

PR-1646 NRF52: Better differentiation between NRF52840 and NRF52832

RISCV

PR-1858 RISCV: Add missing CSR macros listed in RISC-V spec V1.10.

RX65N

PR-1622 RX65N: Add I2C(RIIC) support

PR-1894 RX65N: Add USB device support

PR-1899 RX65N: Add DTC driver

PR-1910 RX65N: Add SPI driver support

SAMD5E5

PR-1515 SAMD5E5: Add Watchdog timer support

PR-1574 SAMD5E5: Add USB host support

PR-1594 SAMD5E5: Freerun timer, oneshot timer and tickless support

PR-1816 SAMD5E5: Add MTD progmem support and NVM USER PAGE IOTCLs

SIM

PR-1914 SIM: SIGUSR1 handling now uses NuttX interrupt logic

PR-1767 SIM: Allow access to tty interfaces for better termios support

PR-1655 SIM: Add support for Linux HCI Socket as a NuttX BLE adapter.  Full NuttX BLE stack can be run against any Linux Bluetooth adapter in sim.

PR-1558 SIM: Add support for Stack Smashing Protector.

STM32F4

PR-1865 STM32F4:  Add support for STM32F412CE fixing I2C2/I2C3 and USART1 alt

STM32H7

PR-1714 STM32H7: Fix I2C driver interrupt storm

Bug Fixes

CXD56xx

PR-1789 CXD56xx: Fix deadlock issue in up_txinit() in SMP mode.

PR-1620 cxd56xx: Fix IRQ control in cxd56_dmac.c

NRF52

PR-1928 NRF52: Fix PPI group disable and add group clear

PR-1885 NRF52: Fix SPI driver structures when SPI_EXCHANGE is not set

PR-1799 NRF52: Fix SPI_MASTER entry in kconfig

PR-1787 NRF52: Fix base address for SPIM{1,2,3}

PR-1777 NRF52: Handle case where rx or tx buffer could be 0 but data would still be transferred. Also error if more than max data is requested.

PR-1770 NRF52: Fix bug where SPI cmddata was not properly mapped for SPIM 0,2,3

RISC-V

PR-1909 RISC-V: MIE instead of MPIE register was being used in up_schedule_sigaction for storing interrupt state

SIM

PR-1903 SIM: Fix complication issue for WPCAP in Cygwin build

PR-1888 SIM: Fix EOVERFLOW returned when CONFIG_SIM_M32 is set

STM32

PR-1841 STM32: Remove broken overdriver support

PR-1556 STM32: Fix IO compentation support in STM32F7 and remove incorrect reference in STM32F0/L0/G0

STM32F7

PR-1898 STM32F7: Fixes data loss bug in UART5 with TX DMA

PR-1553 STM32F7: Fix possible interrupt blocking in serial TXDMA ISR

Driver Support

Bug Fixes

PR-1896 spi_xx25xx EEPROM: return the number of bytes written instead of 0 or error

PR-1891 serial: Don't mangle PID when ISIG is changed

PR-1856 pipe: In case of empty pipe with no writers, return EOF instead of EAGAIN

PR-1796 vfs: Fix memory leak calling pseudorename

PR-1794 vfs: Fix issue where opendir would remove the trailing whitespace or /

PR-1793 vfs: Make sure that rename of mount point uses pseudorename.  Previously mv on a mountpoint would return err 88.

PR-1836 stmpe811: Fix incorrect GPIO interrupt register logic

PR-1741 mmcsd_sdio: Properly arm the write completion detection

PR-1737 vfs: reuse file_dup2 direction in file_dup to prevent segfault issue

New Driver Support

PR-1797 leds: WS2812 LED controller (aka Adafruit NeoPixel)

PR-1851 kbd: Add support for SolderParty BlackBerry Q10 Keyboard

PR-1618 BQ27426 fuel gague


Drivers With Significant Improvements

PR-1800 vfs: Add FIOCLEX/FIONCLEX ioctl support

PR-1798 mmcsd: Allow setting IDMODE_CLOCK via kconfig

PR-1816 stmpe811: Add SPI support for touch screen controller

Board Support

Significant Improvements

PR-1618 metro-m4: Add support for: SmartFS initialization, AT24 EEPROM, GPIO dev, BQ27426 gague initialization

New Board Support

PR-1664 NRF52: Add support for NRF52832 MakerDiary MDK board

PR-1633 NRF52: Add support for Sparkfun NRF52832 Breakout Board


Boards With Significant Improvements

PR-1644: stm32f746g-disco: Move serial console from USART6 to USART1 which is attached to the USB virtual COM port.

File System

Bug Fixes

Significant Improvements

PR-1554 CROMFS: Add support for hard links

Networking

Bug Fixes

Significant Improvements

PR-1666 Bluetooth:  Bluetooth sockets now use Linux sockaddr types of sockaddr_l2 sockaddr_hci sockaddr_rc.  There are slight breaking changes here that may require applications to be updated, but this brings the interface inline with Linux.

Applications

Significant Improvements


Bug Fixes

Security Issues Fixed In This Release

Compatibility Concerns

Changes to Build System

In Apps, Change $(TOPDIR) to $(APPDIR)

In the 'apps' repo, Makefiles are now using $(APPDIR) instead of $(TOPDIR).

In your custom app's Makefile, it is recommended to change $(TOPDIR) to $(APPDIR).

Replace this line:

include $(TOPDIR)/Make.defs

With this:

include $(APPDIR)/Make.defs

See PR-326, git commit # deaa6c5b7bf8445b4a300691525f60aa506be0d7 in the NuttX 'apps' repository.

Custom Boards Don't Need ARCHINCLUDES and ARCHXXINCLUDES Definitions

As part of an effort to unify support for uClibc++ and libc++, the C/C++ include search path definitions ARCHINCLUDES and ARCHXXINCLUDES are now defined in one central place in tools/Config.mk. It is no longer necessary to define these in every board's scripts/Make.defs. Boards included in the NuttX repository have been updated, but if you are building NuttX for a custom board and are using C++, you may want to make the following changes:

In your board's configuration, ensure that you have enabled either CONFIG_UCLIBCXX or CONFIG_LIBCXX as appropriate.

In your custom board's scripts/Make.defs file, remove lines like these:

CINCPATH := ${shell $(INCDIR) -s "$(CC)" $(TOPDIR)$(DELIM)include}
CXXINCPATH := ${shell $(INCDIR) -s "$(CC)" $(TOPDIR)$(DELIM)include$(DELIM)cxx}
ARCHINCLUDES += $(CINCPATH)
ARCHXXINCLUDES += $(CINCPATH) $(CXXINCPATH)

In case your scripts/Make.defs uses different names, such as ARCHINCLUDESXX instead of ARCHXXINCLUDES, you'll need to find all uses of that variable and update them to use ARCHXXINCLUDES.

See PR-1396, git commit #d32e9c38dfb0659a7f3c0cf586ba1584cd7eb3d6 in the main NuttX repository.

See also PR-1399, git commit #6abd03d53ff9164fb17ea4aca701a49fbbf751c0.

Custom Boards Don't Need HOSTCC and HOSTCFLAGS Definitions

The NuttX build system uses several binary utilities that it compiles and runs on the host computer. To build these binaries, it needs to know the host C compiler and C flags. Previously, every board's scripts/Make.defs file had to provide this information via HOSTCC and HOSTCFLAGS Definitions. As part of an effort to simplify the build system, these definitions are now automatically provided by logic in tools/Config.mk. Boards included in the NuttX repository have been updated, but if you are building NuttX for a custom board, you may want to make the following changes:

In your custom board's scripts/Make.defs file, remove lines like these:

HOSTCC = gcc
HOSTCFLAGS = -Wall -Wstrict-prototypes -Wshadow -Wundef -g -pipe

Sometimes they may look like this:

ifeq ($(CONFIG_WINDOWS_NATIVE),y)
  HOSTCC = mingw32-gcc.exe
else
  HOSTCC = gcc
endif

Note: These changes are OPTIONAL.

You may still set these definitions in your board's scripts/Make.defs, and your definitions will override the ones in tools/Config.mk.

Also, you may override these definitions for a single run by providing them on the make command line. This is useful if, for example, you wish to build debug versions of these host binaries: define HOSTCFLAGS with -g on the command line.

See PR-1398, git commit #ee875b2a260cb4cc532b8ca303c2515e24c39b4e in the main NuttX repository.

Removal of Unused ARCHCCVERSION and ARCHCCMAJOR

The ARCHCCVERSION and ARCHCCMAJOR variables are unused. Historically they were defined in many boards' scripts/Make.defs. These were removed from all boards in the NuttX repository, but if you are building NuttX for a custom board, you may want to remove this unnecessary boilerplate.

In your custom board's scripts/Make.defs file, remove lines like these:


ARCHCCVERSION = ${shell $(CC) -v 2>&1 | sed -n '/^gcc version/p' | sed -e 's/^gcc version \([0-9\.]\)/\1/g' -e 's/[-\ ].*//g' -e '1q'}
ARCHCCMAJOR = ${shell echo $(ARCHCCVERSION) | cut -d'.' -f1}

See PR-1344, git commit #f5311de6b42466ab5c6ef299dab0ecc417131bbe in the main NuttX repository.

Custom Boards May Not Need EXTRA_LIBS and EXTRA_LIBPATHS Definitions

The EXTRA_LIBS and EXTRA_LIBPATHS make variables were previously defined in many boards' scripts/Make.defs files. These are now defined in a more central location: arch/*/src/*/Toolchain.defs. Your board's scripts/Make.defs usually includes this file. Boards included in NuttX have been updated, but if you are building NuttX for a custom board, you may need to update your board's scripts/Make.defs file to ensure you build with the correct definitions.

If you have lines like these:

EXTRA_LIBPATHS = -L "${shell dirname "$(LIBSUPXX)"}"
EXTRA_LIBS = -lsupc++

You may want to do one of the following:

  • If they are redundant to the definitions provided in the included arch/*/src/*/Toolchain.defs, remove these lines, or
  • If they contain additional needed libraries and paths not present in arch/*/src/*/Toolchain.defs, remove any redundant definitions and change the assignment '=' to '+='.

See PR-1404, git commit #4910d43ab0fc360dbddb1f8a31db2a3ee383b46d in the main NuttX repository.

Custom Boards May Not Need CC, CXX, CPP, LD, STRIP, AR, NM, OBJCOPY, and OBJDUMP Definitions

These make variables were previously defined in many boards' scripts/Make.defs files with copy-paste duplication spanning many hundreds of files. These are now defined in a more central location: arch/*/src/*/Toolchain.defs. Your board's scripts/Make.defs usually includes this file. Boards included in NuttX have been updated, but if you are building NuttX for a custom board, you may need to update your board's scripts/Make.defs file to ensure you build with the correct definitions.

If you have lines that define CC, CXX, CPP, LD, STRIP, AR, NM, OBJCOPY, and OBJDUMP, such as these:

CC = $(CROSSDEV)gcc
CXX = $(CROSSDEV)g++
CPP = $(CROSSDEV)gcc -E -P -x c
LD = $(CROSSDEV)ld
STRIP = $(CROSSDEV)strip --strip-unneeded
AR = $(ARCROSSDEV)ar rcs
NM = $(ARCROSSDEV)nm
OBJCOPY = $(CROSSDEV)objcopy
OBJDUMP = $(CROSSDEV)objdump


You may want to do one of the following:

  • If they are redundant to the definitions provided in the included arch/*/src/*/Toolchain.defs, remove these lines, or
  • If they are different from the definitions in arch/*/src/*/Toolchain.defs, leave them as-is and they will take precedence.

See PR-1426, git commit #b329e2377dd8816f37ad0408279926829efdf85d in the main NuttX repository.

Consolidated ARCROSSDEV and CROSSDEV

The ARCROSSDEV and CROSSDEV variables always had identical values. Therefore ARCROSSDEV has been removed and CROSSDEV is used instead. Boards included in NuttX have been updated, but if you are building NuttX for a custom board, you may need to update your board's build scripts to use the CROSSDEV variable.

See PR-1439, git commit #5efa93ec26fd8a3fd85b24a2008bb743f96027fb in the main NuttX repository.

Known Problems In This Release

More Information

How to Download

Release artifacts for all current and past NuttX releases can be downloaded at:

How to Clone the Git Repository

The Apache NuttX project uses Git SCM as its version control system.

There are two primary repositories:

  • nuttx - The real time operating system itself.
  • apps - Optional applications and example programs for the operating system. You can use this repository or make your own custom one.

The main "Single Source of Truth" repositories are hosted by the ASF:

These are synchronized with repositories hosted at GitHub:

How to Contact the Community

The main forum for project communication, to ask a question, get involved, or contribute to NuttX, is our mailing list, dev@nuttx.apache.org. The list is publicly archived and searchable at https://lists.apache.org/list.html?dev@nuttx.apache.orgFor more information, see NuttX Community.

Enthusiastic Contributors Welcome!

NuttX is a free open-source project. If you'd like to participate, whether it's to enhance documentation (even these release notes) or dive into the nitty gritty of some low-level drivers, please join us! You can join the conversation at our dev mailing list by emailing dev-subscribe@nuttx.apache.org. The mailing list is open to the public and archived. You can browse older messages at https://lists.apache.org/list.html?dev@nuttx.apache.org.


  • No labels