Work In Progress
Work In Progress
What's New In This Release
Highlights
- Feature 1
- Feature 2
- Feature 3
Major Changes to Core OS
New Features
Bug Fixes
Major Changes to the Build System
New Features
Bug Fixes
Architectural Support
New Architecture
Architectures with significant improvements
ARM
CXD56XX
STM32
- #3543 feat(esp32c3): Support esp32c3 ble function
- #3761 ET-STM32 Stamp: An STM32F103RET6 target for NuttX
STM32L4
STM32L5
S32K1XX
- #3850 UCANS32K146 add support for B revision
IMX6
IMXRT
RP2040
- #4049 Raspipico smp
- #3996 Support for Waveshare Pico-LCD-1.x module
- #3917 arm/rp2040:USB device controller support
RTL8720C
- #4076 AmebaZ2: Add soc src code
NRF52
STM32H7
STM32F7
Renesas
RX65N
Risc-V
- #3770 Add support for PolarFire SoC and icicle board
- #3846 risc-v/rv32m1: Basic port to rv32m1 ri5cy
- #4146 risc-v/bl602: add boardctl support
- #3911 Add i2c driver to PolarFire SoC and Icicle board
- #3905 Add SPI driver to PolarFire SoC and Icicle board
- #3933 riscv/mpfs: add i2c reset handler
- #3920 add dma support for PolarFire SoC
RV64
ESP32C3
BL602
Xtensa
ESP32
Minor changes
Simulator
New Features
Bug Fixes
Documentation
New Features
- #3970 libc: Implement fesetround & fegetround for arm
Improvements
Driver Support
- #3842 Added automatic log rotation, when log file is opened.
- #3837 SYSLOG channel add functions return handle to the channel.
- #3848 Syslog file rotations number is configurable.
Bug Fixes
New Driver Support
Board Support
New Board Support
Boards With Significant Improvements
ARM
CXD56
- #3833 Spresense new memorymap
IMX6
IMXRT
- #3982 boards/arm/imxrt/teensy-4.x: added board level support for GPIO driver
- #3929 Added encoder support for Teensy 4.x
- #3980 FlexPWM support for iMXRT MCU
LPC17XX_40XX
NRF52
RP2040
SAM34
- #3732 board: Add support for Adafruit Circuit Express
- #3840 Add ST7789 LCD controller support for SAMV71 XPlained Ultra board
STM32
- #4350 arch/arm/src/stm32l4/Kconfig: add new STM32L4+ chip types
- #3944 boards/arm/stm32/nucleo-f446re: added support for DAC driver
- #3880 boards/arm/stm32/nucleo-f446re: added support for GPIO driver
- #3909 Added basic support for nucleo-g431kb board.
- #3922 Adds PWM example to nucleo-g431kb board.
- #3914 oards: added support for EMW3162 Wi-Fi board Add FOC support for B-G431-ESC1 board #3878
STM32L4
STM32F4
STM32F7
STM32H7
KINETIS
RISC-V
BL602
C906
ESP32C3
- #3794 risc-v/esp32c3: Support ESP32-C3 RTC driver
- #3883 risc-v/esp32c3: Support ESP32-C3 RSA accelerator
- #3881 risc-v/esp32c3: Support ESP32-C3 efuse
- #3935 risc-v/esp32c3: Support ESP32-C3 SHA accelerator
- #3882 riscv/esp32c3: Use the RTC memory as another heap.
- #3945 boards/esp32c3: Add romfs configuration
- #3925 risc-v/esp32-c3: Adds I2C polled support
- #3823 risc-v/esp32-c3: Add support for HW flow control.
- #3822 ESP32-C3: Add DMA support for SPI Slave
XTENSA
ESP32
- #3940 xtensa/esp32: Support ESP32 RTC driver
- #4003 xtensa/esp32: Adds support for SERIAL_TXDMA.
- #3912 xtensa/esp32: Adds I2C polled support.
- #3803 Add support to ESP32-S2 and ESP32S2-SAOLA-1 Board
- #3824 xtensa/esp32-s2: Add support for serial HW flow control.
TIVA
Minor Board Changes
ARM
CXD56
Xtensa
File System
Bug Fixes
Significant Improvements
Networking
Improvements
Bug Fixes
Security Issues Fixed In This Release
Compatibility Concerns
Changes to Kconfig
The names of some Kconfig settings have been changed to improve the naming consistency. Here is the list:
Old | New |
---|---|
LIB_BOARDCTL | BOARDCTL |
LIB_CRC64_FAST | LIBC_CRC64_FAST |
LIB_ENVPATH | LIBC_ENVPATH |
LIB_HEX2BIN | LIBC_HEX2BIN |
LIB_HOMEDIR | LIBC_HOMEDIR |
LIB_HOSTNAME | LIBC_HOSTNAME |
LIB_KBDCODEC | LIBC_KBDCODEC |
LIB_RAND_ORDER | LIBC_RAND_ORDER |
LIB_SLCDCODEC | LIBC_SLCDCODEC |
LIB_USRWORK | LIBC_USRWORK |
LIB_USRWORKPRIORITY | LIBC_USRWORKPRIORITY |
LIB_USRWORKSTACKSIZE | LIBC_USRWORKSTACKSIZE |
LIB_ZONEINFO | LIBC_ZONEINFO |
LIB_ZONEINFO_ROMFS | LIBC_ZONEINFO_ROMFS |
When they appear in code, these identifiers begin with a CONFIG_*
prefix (e.g., CONFIG_LIB_BOARDCTL
is renamed to CONFIG_BOARDCTL
).
All in-tree boards have been updated, but users who maintain their own out-of-tree boards will have to update all instances of these identifiers.
See PR-4266 https://github.com/apache/incubator-nuttx/pull/4266 and PR-4267 https://github.com/apache/incubator-nuttx/pull/4267 in the main NuttX repository.
See also PR-820 https://github.com/apache/incubator-nuttx-apps/pull/820 and PR-821 https://github.com/apache/incubator-nuttx-apps/pull/821 in the NuttX apps repository.
Changes to MTD subsystem
MTDIOC_XIPBASE, MTDIOC_FLUSH and MTDIOC_PARTINFO is removed and replace with BIOC_XIPBASE, BIOC_FLUSH and BIOC_PARTINFO:
- Simplify the general driver(e.g. partition, flt) implementation
- Reduce the confusion with the same IOCTL in the different layer
See PR-4325 https://github.com/apache/incubator-nuttx/pull/4325
Changes to Build System
LD Now Called Through GCC
When building NuttX with GCC toolchains, the linker is now called through $(CROSSDEV)gcc rather than $(CROSSDEV)ld. This requires all linker options to be prefixed with -Wl,
(dash, capital W, lower-case L, comma). All boards in the NuttX tree have been updated, but any custom out-of-tree boards will need to apply this change in the relevant parts of their build scripts.
The reason for this change is that GNU Binutils 2.36.x has added new error checking on command line arguments. This has had the effect that the NuttX build suddenly broke on host OS distributions that updated to the 2.36.x release line. Reports included Arch, Manjaro, and Ubuntu. Other host OSes are likely to be affected as well.
Symptoms
Your toolchain and board are affected if you see errors from LD like:
arm-none-eabi-ld: Error: unable to disambiguate: -nostartfiles (did you mean --nostartfiles ?)
or (following this change in NuttX) errors from GCC like:
arm-none-eabi-gcc: error: unrecognized command line option '--gc-sections'; did you mean '--data-sections'?
What to change
The most common change expected to affect most boards:
Change:
NXFLATLDFLAGS1 = -r -d -warn-common
NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections
to:
NXFLATLDFLAGS1 = -r -Wl,-d -Wl,-warn-common
NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -Wl,-no-check-sections
If doing a kernel build, you may need changes in your board's kernel/Makefile
like:
Change:
USER_LDFLAGS = --undefined=$(ENTRYPT) --entry=$(ENTRYPT) $(USER_LDSCRIPT)
to:
USER_LDFLAGS = -Wl,--undefined=$(ENTRYPT) -Wl,--entry=$(ENTRYPT) $(USER_LDSCRIPT) -nostartfiles -nodefaultlibs
Change:
$(Q) $(LD) -o $@ $(USER_LDFLAGS) $(USER_LIBPATHS) $(OBJS) --start-group $(USER_LDLIBS) --end-group $(USER_LIBGCC)
to:
$(Q) $(LD) -o $@ $(USER_LDFLAGS) $(USER_LIBPATHS) $(OBJS) -Wl,--start-group $(USER_LDLIBS) -Wl,--end-group $(USER_LIBGCC)
Depending on your board's customized build scripts, you may need to look out for other make
variables in your board's Makefile
or Make.defs
.
Some variables to look for:
ARCHSCRIPT
ARCH_LIBS
CCLINKFLAGS
EXTRALINKCMDS
LDELFFLAGS
LDENDGROUP
LDFLAGS
LDLINKFLAGS
LDMODULEFLAGS
LDSTARTGROUP
NXFLATLDFLAGS1
NXFLATLDFLAGS2
USER_LDFLAGS
Anything that executes LD, such as:
$(Q) $(LD) --entry=__start $(LDFLAGS) $(LIBPATHS) $(EXTRA_LIBPATHS) \
Anything that processes LD flags, such as:
$(LIBPATHS) "-(" $(LDLIBS) "-)" $(LDFLAGS) -Map="$(TOPDIR)$(DELIM)nuttx.map"
In general, any command line options destined for LD must be prefixed with -Wl,
(dash, capital W, lower-case L, comma) since they are now being passed through GCC.
Examples
Change:
EXTRALINKCMDS += @$(TOPDIR)/syscall/syscall_wraps.ldcmd
to:
EXTRALINKCMDS += -Wl,@$(TOPDIR)/syscall/syscall_wraps.ldcmd
Change:
LDFLAGS += -gc-sections
to:
LDFLAGS += -Wl,-gc-sections
Change:
$(LIBPATHS) "-(" $(LDLIBS) "-)" $(LDFLAGS) -Map="$(TOPDIR)$(DELIM)nuttx.map"
to:
$(LIBPATHS) "-(" $(LDLIBS) "-)" $(LDFLAGS) -Wl,-Map="$(TOPDIR)$(DELIM)nuttx.map"
Change:
NXFLATLDFLAGS1 = -r -d -warn-common
to:
NXFLATLDFLAGS1 = -r -Wl,-d -Wl,-warn-common
Change:
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
LDFLAGS += -Map="${shell cygpath -w $(TOPDIR)/nuttx.map}" --cref
else
LDFLAGS += -Map=$(TOPDIR)/nuttx.map --cref
endif
to:
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
LDFLAGS += -Wl,-Map="${shell cygpath -w $(TOPDIR)/nuttx.map}" -Wl,--cref
else
LDFLAGS += -Wl,-Map=$(TOPDIR)/nuttx.map -Wl,--cref
endif
Also, if you have assigned the LD variable, it would need to change as well:
Change:
LD = $(CROSSDEV)ld
to:
LD = $(CROSSDEV)gcc
References
- Git commit # 45672c269db13f59bdaa417e564837e8bbb6c8c1 in the NuttX main repository:
- PR-3836 in the NuttX main repository:
- Issues 3209 and 3826 in the NuttX issue tracker:
- Description of the change on Binutils mailing list:
- Description of -Wl,option in the GCC manual:
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:
- https://gitbox.apache.org/repos/asf?p=incubator-nuttx.git
- https://gitbox.apache.org/repos/asf?p=incubator-nuttx-apps.git
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.org. For 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.