| 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 |
Major changes to the internal, OS timer (wdog) interfaces. The change includes:
CONFIG_MAX_WDOGPARMS and the OS interfaces wd_create() and wd_delete()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:
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.wd_create(). The WDOG_ID is not longer managed by the timing subsystem and the wd_create() interface has been removed.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.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-1418 NRF52: Add Timer and RTC drivers
PR-1422 ESP32: Add SPI driver (Master & Slave)
PR-1432 NRF52: Add timer lowerhalf
PR-1435 ESP32: Add I2C driver
PR-1491 ESP32: Add SPI Flash driver
PR-1515 SAMD5E5: Add Watchdog timer support
PR-1525 ESP32: Add Ethernet driver
PR-1574 SAMD5E5: Add USB host support
PR-1594 SAMD5E5: Freerun timer, oneshot timer and tickless support
PR-1610 ESP32: Improve SPI transmision (DMA, IOMUX, software CS)
PR-1622 RX65N: Add I2C(RIIC) support
PR-1630 ESP32: Add support for HW RNG
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-1714 STM32H7: Fix I2C driver interrupt storm
PR-1726 NRF52: Extend systimer support
PR-1773 NRF52: Add ADC and PWM support
PR-1830 ESP32: Add Power Management of Force-Sleep
PR-1859 ESP32: Add hist timer and improve the oneshot timer logic
PR-1868 IMXRT: Add ADC driver
PR-1894 RX65N: Add USB device support
PR-1899 RX65N: Add DTC driver
$(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.
ARCHINCLUDES and ARCHXXINCLUDES DefinitionsAs 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.
HOSTCC and HOSTCFLAGS DefinitionsThe 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.
ARCHCCVERSION and ARCHCCMAJORThe 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.
EXTRA_LIBS and EXTRA_LIBPATHS DefinitionsThe 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:
arch/*/src/*/Toolchain.defs, remove these lines, orarch/*/src/*/Toolchain.defs, remove any redundant definitions and change the assignment '=' to '+='.See PR-1404, git commit #4910d43ab0fc360dbddb1f8a31db2a3ee383b46d in the main NuttX repository.
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:
arch/*/src/*/Toolchain.defs, remove these lines, orarch/*/src/*/Toolchain.defs, leave them as-is and they will take precedence.See PR-1426, git commit #b329e2377dd8816f37ad0408279926829efdf85d in the main NuttX repository.
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.
Release artifacts for all current and past NuttX releases can be downloaded at:
The Apache NuttX project uses Git SCM as its version control system.
There are two primary repositories:
The main "Single Source of Truth" repositories are hosted by the ASF:
These are synchronized with repositories hosted at GitHub:
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.org. For more information, see NuttX Community.
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.