layout: page released: true apache: true title: 12.3.0 date: 2023-10-24 summary: > Release v12.3.0
artifact-root: “https://www.apache.org/dyn/closer.lua/nuttx/12.3.0” checksum-root: “https://downloads.apache.org/nuttx/12.3.0” key-file: “https://downloads.apache.org/nuttx/KEYS”
source-os-dist: - “apache-nuttx-12.3.0.tar.gz” source-app-dist: - “apache-nuttx-apps-12.3.0.tar.gz”
{% include JB/setup %}
What's New In This Release Major Changes to Core OS sched
mm
libs
binfmt
misc
Changes to the Build System Improvements
Architectural Support New Architecture Support
Architecture With Improvements
#10482 arch_alarm: change tick to g_current_tick
#10010 arch_memcpy: Optimize arch memcpy for armv7-m and armv8-m
#10553 fix led panic feature
#10268 hostfs: support SEEK_CUR
#10057 Interrupt nesting
#10795 Kconfig: Add prompt string to ARCH_CHIP_CUSTOM
#9837 Kconfig: Change some “default y” to “default !DEFAULT_SMALL”
#9906 move [enter|leave]_critical_section
#10334 nuttx: add -Wno-psabi to Toolchain.defs.
#10081 nuttx: support to obtain host cpuinfo in NSH.
#9763 nuttx: toolchain: Add macro _LDBL_EQ_DBL to nuttx:arm64:src:Toolchain.defs
#9866 perf: add ARCH_HAVE_PERF_EVENTS to support hardware perf events
#10648 remove FAR from source code under 32bit arch and board
#10145 timer: frequency 0 should not be set
#9959 update g_running_tasks when context switch occurred
#10250 arm: Avoid hard fault when reading vectors in text section.
#10139 arm: arm_backtrace_sp: check the addr after every operation to addr
#10156 arm: clang: enhance compatibility of clang compiler
#9957 arm: Change the default value to ARCH_TRUSTZONE_NONSECURE
#10773 arm: Enable FPU on qemu and goldfish platforms
#10771 arm: Fix onchip flash erase fail
#9641 arm: move -mthumb option back to ARCHCPUFLAGS
#10499 arm: oneshot: rm sched_[un]lock
#10632 arm: unwinder: fix unwind abort for uleb128 case
#9823 arm: vfork: modify struct vfork_s
#10568 arm: support reboot : poweroff for qemu virt arm
#10610 arm: psci: Fixed arm psci related compilation errors
#10254 arm: update secure handling to gic
#9809 arm: arm_gicv2: accesses the non-secure copy in non-secure state
#9907 arm: trustzone: update defconfig
#9944 arm: trustzone: time interrupt setting failed
#9960 arm: arm-m: Check the dcache status before enabling dcache
#10054 arm: arm-m: update memset function
#10276 arm: armv6: select ARCH_HAVE_CPUINFO by default
#10132 arm: armv6-m: add armv6-m cpuinfo
#10264 arm: armv6-m: cpuinfo: show cpufreq when hardware performance counting enabled
#10204 arm: armv7-a: Update the macro definition in gic.h
#10045 arm: armv7 updated
#9802 arm: armv{7/8}-m: Add Get Cache Information interface
#10536 arm: armv{7/8}-m: implement dcache clean as barrier in write-through mode
#10344 arm: armv{7/8}-m: mpu.h: add macro to configure shared memory region
#9699 arm: armv8-m: add support for ARMv8-M Security Extensions
#9804 arm: armv8-m: arm_hardfault: add arm_gen_nonsecurefault information
#9700 arm: armv8-m: arm_secure_irq.c: fix writing to the NVIC_AIRCR register
#9698 arm: armv8-m: nvic.h: add definition for NVIC non-secure registers offset
#10723 arm: armv8-m: strcpy: add arch optimize version
#10043 arm: armv8-m: support busfault forward to TEE
#10130 arm: armv8-m: the FPSCR[18:16] LTPSIZE field in exception_common
#9621 arm: cxd56xx: cxd56_dmac, lcd_dev: fix null pointer dereference
#9697 arm: cxd56xx: Fix bug when watchdog restart
#10721 arm: cxd56xx: Return error for RTC alarm setting before initialization
#10500 arm: cxd56xx: rm sched_[un]lock
#9495 arm: imxrt: add support for YT8512 phy
#9984 arm: imxrt: fix txdeadline add ecc:fd support
#10087 arm: imxrt: flexcan use hpwork for receiving frames
#10194 arm: imxrt: s32k: edma lpi2c : lpspi fixes
#10220 arm: imxrt: Serial Preserve all but W1C bit in SR
#10464 arm: imx8mp: Add GPIO support for i.MX8MP
#10450 arm: imx8mp: Add i2c support for the i.MX8MP
#10232 arm: kinetis: s32k1 s32k3 kinetis: add propseg to ctrl1 timing mask
#9749 arm: phy62xx: Remove unused phy6222_irq.h
#10125 arm: qemu: add devicetree support for arm:arm64
#10252 arm: qemu: Remove qemu_net.c which isn't needed anymore
#10628 arm: s32k3xx: emac use semi-unique MAC address
#10501 arm: sama5: sam_hsmci:rm sched_[un]lock
#10154 arm: sama5: MCAN Error corrections plus changes to improve clarity
#10688 arm: samv7: add phy bordinit functionality
#10716 arm: samv7: add support for 1 wire over UART:USART
#10527 arm: samv7: add support for SD card detection from CD:DAT3 line
#10429 arm: samv7: allow usage of QSPI in SPI mode for all MCUs
#9684 arm: samv7: fix minor issues with serial DMA
#10391 arm: samv7: pwm: add option to set channel polarity with IOCTL
#9711 arm: stm32: add rtc
#10360 arm: stm32: Fix bugs related to software flow control in file stm32_hciuart.c.
#9977 arm: stm32: Optimize stm32 RTC accuracy
#10065 arm: stm32: stm32f4:f7:h7_eth: Improvements in Ethernet DMA error handling.
#9649 arm: stm32: stm32f0l0g0: Fix gpio outputs from being configured as interrupts in stm32f0l0g0 gpio driver
#10328 arm: stm32: stm32h7: add CM4 core support
#10472 arm: stm32: stm32l4: fix argument of nxsem_wait_uninterruptible
#10189 arm: stm32: stm32h7: stm32h7x5: fixed typo on SPI header inclusion
#10222 arm: stm32: stm32h7: use correct name for bit 2 in STM32_PWR_CR3 register
#10207 arm: nrf52: Added config setting for NRF52 I2C timing bug workaround.
#10205 arm: nrf52: Changed NRF52 USB initialization to check for power via USBREGSTATUS
#10206 arm: nrf52: Fixed NRF52 I2C register naming.
#10208 arm: nrf52: Port recent changes in nrf52 to other Nordic chips
#10305 arm: nrf91: add missing include guards
#9895 arm: nrf91: fix for secure env only configurations
#9902 arm: nrf91: modem: fix returned source address
#9746 arm: nrf91: more work towards a usable port
#10788 arm: nrf{52|53}: pwm: fix compilation for MULTICHAN not set
#10741 arm: nrf{52|53|91}: fixes for serial driver
#10216 arm: nrf{52|53|91}: handle I2C errors in interrupt mode
#9973 arm64: add ARM64_DCACHE_DISABLE and ARM64_ICACHE_DISABLE config
#10148 arm64: add hostfs support
#9971 arm64: add kasan support for arm64
#10653 arm64: add mcpu option for all Cortex CPU
#9967 arm64: arm64_backtrace: use running_task if arch_get_current_tcb return NULL
#9949 arm64: default select ARCH_HAVE_SETJMP
#9646 arm64: Do not set cntfrq_el0 in qemu_boot.c
#9794 arm64: enable ARCH_FPU for qemu-armv8a:netnsh_smp and netnsh_smp_hv
#10142 arm64: enable for arm64 virt to choice CPU core
#10650 arm64: fix arm64_start_cpu
#10135 arm64: Fixed arm64 backtrace support for other processes
#10008 arm64: get_cpu_id according to the correct affinity level
#10266 arm64: gnu: Set arch_* optimizations to be on by default.
#10125 arm64: qemu: add devicetree support for arm64
#10297 arm64: remove unnecessary trace interface
#10131 arm64: save and restore fpu regs in jmp when ARCH_FPU enabled
#10694 arm64: select ARCH_HAVE_IRQTRIGGER for all arm64 chip
#9652 arm64: smp with kvm
#10701 arm64: support reboot : poweroff for qemu virt arm64
#10662 arm64: sync make file rules from arm
#9810 arm64: Use the correct aff in up_affinity_irq function
#9811 arm64: Use the correct cpu id for fpu idle task init
#10502 mips: pic32mx: sched_lock should replace with enter_critical_secion
#10346 risc-v: Allocate heap for default task stacksize
#9577 risc-v: fpu: Implement correct lazy-FPU functionality (attempt #2)
#10300 risc-v: esp32c3: wifi_ble: Use nxsem_trywait to take semphr from ISR
#10643 risc-v: esp32c6: fix compilation of esp32c6 serial driver
#10089 risc-v: espressif: Add MCUboot support for ESP32-C3
#9874 risc-v: espressif: Add PWM:LEDC support
#9633 risc-v: espressif: Add USB-Serial-JTAG driver
#9896 risc-v: espressif: get esp-hal-3rdparty sources based on its version
#9917 risc-v: espressif: update esp-hal-3rdparty and related issues
#10231 risc-v: espressif: Update esp-hal-3rdparty version
#9860 risc-v: hpm6750: keep cpu clock on after “wfi”
#10233 risc-v: litex: Add platform specific tickless implementation.
#10393 risc-v: litex: Add system reset and access to core control registers.
#10481 risc-v: litex: litex_sdio: Address race condition in eventwait.
#9871 risc-v: mpfs: Add configuration option to enable DDR manual a…
#10635 risc-v: mpfs: Add DMA buffer allocator for eMMC access
#10461 risc-v: mpfs: clear L2 before use
#10246 risc-v: mpfs: Ddr training fixes upstream
#10447 risc-v: mpfs: ddr fixes upstream
#9843 risc-v: mpfs: emmcsd: fix csd read
#10483 risc-v: mpfs: ethernet updates
#9657 risc-v: mpfs: Fix cache and scratchpad init
#10484 risc-v: mpfs: IHC bugfixes and perf enhancements
#10285 risc-v: mpfs: MPFS DDR training cleanups
#10341 risc-v: mpfs: mpfs_usb: fix tx fifo size setup
#10599 risc-v: mpfs: mpfs_i2c.c: Clean up using priv->status and STOP…
#10423 risc-v: mpfs: mpfs_i2c.c: Replace 1 second timeout with Time-on-Air based timeout
#9851 risc-v: mpfs: mpfs_ddr.c: Correct erroneous register addresses…
#9904 risc-v: mpfs: Set hart2 default entrypoint to -1 like the others
#10724 risc-v: riscv_pmp.c: fix broken TOR checks
#10451 risc-v: riscv_pmp.c: Improve NAPOT area validity checks
#10030 sim: add -Ttext-segment to load the image in the fixed address
#10141 sim: add set:get_power for sim_framebuffer.c
#10735 sim: add sim uart_ram support
#10494 sim: add up_irq_enbale function.
#10678 sim: alsa: add AUDIO_FMT_PCM query handler.
#10617 sim: audio: add 24K sample rate support
#9693 sim: audio: add AUDIOIOC_FLUSH ioctl
#10520 sim: audio: add media session support for sim_alsa audio_ops_s interface
#9689 sim: audio: driver add AUDIOIOC_GETLATENCY ioctl
#9680 sim: audio: register mixer device
#10600 sim: change Mac sim archive operate from replace to quick insertion
#10179 sim: crypto: compile mbedtls alternative implementation
#10583 sim: crypto: support MBEDTLS_MD5_ALT config
#10128 sim: Fix sim stack smashing problem
#10671 sim: fix text-segment not taking effect
#10505 sim: framebuffer: fix memory leak in XStringListToTextProperty
#10052 sim: framebuffer: Optimize the timing of window to open and to close
#10606 sim: Guard frame buffer related setting in SIM_X11FB
#9935 sim: hostfs: fix issue about access file with size more than 2GB
#10414 sim: internal: add typedef pid_t to enhance sim compatibility
#10679 sim: posix: Add the host_system interface
#10325 sim: posix: Add the host_system interface used to execute the host command
#9770 sim: posix_test: fix shm_open() return file descriptor associated with FD_CLOEXEC
#10181 sim: Remove unnecessary configurations
#9667 sim: Rename sim_video to sim_camera
#10137 sim: rptun support panit & reset and fix uinput_rpmsg bug
#10044 sim: set loop thread priority to configurable
#9859 sim: Support thread command by gdb python script
#10685 sim: sim_alsa: reset alsa pcm device when snd_pcm_avail < 0
#9676 sim: sim_alsa.c: add paused variable instead of snd_pcm_pause.
#10003 sim: sim_alsa.c: fix ioctl AUDIOIOC_GETBUFFERINFO error
#10781 sim: sim_rptun: unlink shm when quit
#10263 sim: sim_usbdev: add sim netdev config for rndis test
#10284 sim: simlulator rptun powerdown
#10489 sim: support configuring whether the master will automatically boot slave
#10551 sim: To avoid system calls being interrupted when use host api
#9899 sim: tcbinfo:add ebp to tcbinfo
#10351 sim: toywasm: disable example apps (hello, nettest)
#10185 sim: use correct size to avoid buffer overflow
#10067 sim: use workquene instead of sim_bthcisock_loop
#9869 sim: use workquene instead rptun_loop
#9950 sim: usbdev: fix return value issue
#10349 sim: vpnkit: disable binfmt debug
#9828 sparc: bm3823: bm3823.h: Fix the name of the constant BM3823_Is_interrupt_pending
#10311 xtensa: enable -Oz for xtensa to reduce codesize
#10251 xtensa: Update MCUboot build process
#9805 xtensa: xtensa_saveusercontext:Leave the context information empty
#9705 xtensa: esp32: change free to kmm_free as it was allocated via kmm_malloc
#9707 xtensa: esp32: common: RGB LED support
#10598 xtensa: esp32: RMT update
#6992 xtensa: esp32: WS2812 LED driver using ESP32's RMT peripheral
#10521 xtensa: esp32s3: Add support to TWAI:CANBus controller
#10491 xtensa: esp32s3: add UART RS485 support
#10467 xtensa: esp32s3: add UART2 support
#10015 xtensa: esp32s3: Enhance protected build linker scripts and memory layout to add support to protected build + Wi-Fi driver
#10637 xtensa: esp32s3: Fix octal lines mode SPIRAM blocking issue
#9658 xtensa: esp32s2: Fix UART1 default pins
#10465 xtensa: esp32s3: i2s: Add support for the I2S peripheral + Audio subsystem
#10200 xtensa: esp32s3: Implement ESP32-S3 BLE support with Wi-Fi coexistence
#10696 xtensa: esp32s3: LCD controller driver
#10625 xtensa: esp32s3: SPI support psram and flash timing tuning
Driver Support New Driver Support
Board Support New Board Support
Boards With Improvements
#10074 add KEEP to (.init_array .init_array.)
#9671 boardctl: Add const to struct boardioc_symtab_s::symtab
#9659 Enable virtio-blk and FAT for virt configurations
#10342 Fix QEMU_VIRTIO_MMIO_NUM
#10382 init_array.* needs to be executed in order
#10227 update README for virtio gpu driver
#9856 use the example from NuttX-apps for all NimBLE configurations
#9660 arm: qemu-armv8a: Add defconfigs for hypervisor
#9713 arm: cxd56xx: alt1250: Change power on sequence
#10099 arm: cxd56xx: Disable NET_ARP from lte defconfig
#10389 arm: cxd56xx: Fix charger and gauge initialize functions
#10101 arm: cxd56xx: Fix duplicate make target
#9966 arm: cxd56xx: Fix issue that GPO is not iniitalized by watchdog
#9692 arm: cxd56xx: Fix system clock to HV mode for video drivers
#10407 arm: cxd56xx: lte: use mbedtls version configured
#10777 arm: sam34: arduino-due: Add activation of SPI0 on arduino due
#10718 arm: sam34: arduino-due: Use standard arm-none-eabi toolchain by default.
#10210 arm: stm32: stm32f429i-disco: enable CONFIG_BOARDCTL for ofloader
#9962 arm: stm32: stm32f429i-disco: support stm32f429i-disco run open flash loader
#10522 arm: stm32: stm32f411e-disco: Fixes f4 disco
#10524 arm: stm32: stm32f411e-disco: F411e disco buttons
#10006 arm: stm32: nucleo-f446re: SystemView example based on nucleo-f446re
#10753 arm: stm32l4: nucleo-l432kc: Fix I2C1 pinout.
#10109 arm: stm32f7: stm32f7-meadow: Add spiflash support
#9847 arm: stm32f7: stm32f777zit6-meadow: Add usbnsh board profile
#10750 arm: stm32h7: nucleo-h745zi: access CM4 core NSH over uart rpmsg
#10223 arm: stm32h7: nucleo-h743zi: HCLK and ACLK are delivered from SYSCLK not CPUCLK
#10198 arm: stm32h7: stm32h745i-disco: supported external SDRAM
#10196 arm: kinetis: freedom-k28f:nshsdusb: Remove CONFIG_NETDB_BUFSIZE
#10274 arm: nrf52: arduino-nano-33ble{-rev2}: use bool for leds state
#10412 arm: nrf52: nrf52840-dk: add lsm9ds1 sensor support
#10767 arm: nrf52: thingy52: use RTT console as default
#10304 arm: nrf53: fix broken rptun
#10789 arm: nrf53: thingy53: add rgbled and i2c tools support
#9873 arm: nrf91: nrf9160-dk: improvements for modem and support for modem sockets
#9639 arm: xmc4: Fixes for xmc4700-relax board
#10529 arm64: rk3399: pinephonepro: Add support for board reset.
#10574 qemu: get reg and irq from devicetree node rather than macro
#10345 risc-v: Add -melf64lriscv to 64bit USER_LDFLAGS:LDELFFLAGS
#10307 risc-v: bl602: Move c++ related setting from wifi to elf
#10444 sim: add defconfig for ltp openposix testsuite
#10115 sim: add wakaama example configuration
#9955 sim: remove unnecessary config EXAMPLES_SOTEST_DEVPATH
#10695 sim: Minor USB improvement
#10016 sim: enable SIM_WALLTIME_SIGNAL for citest
#10570 sim: crypto: Enable CONFIG_CRYPTO_SW_AES
#9801 arm: tiva: lm3s6432-s2e: Enable LTO for lm3s6432-s2e:nsh
#10530 xtensa: esp32: Add twai defconfigs to esp32
#9884 xtensa: esp32: esp32-devkitc: Refresh wifi_smp_rmt config
#9709 xtensa: esp32: esp32-devkitc: wamr_wasi_debug: enable wasi-threads
#9752 xtensa: esp32s2: Add basic support to SPIFLASH
#9868 xtensa: esp32s3: Do not include specfic board in commom
#9870 xtensa: esp32s3: Some follow-up changes for ESP32s3 32M flash support
#10748 xtensa: esp32s3: esp32s3-devkit:disable esp32s3-devkit:ksta_softap spinlock config
#10588 xtensa: esp32s3: esp32s3-devkit:Add board GPIO support
#10387 xtensa: esp32s3: esp32s3-lcd-ev: Add ESP32-S3-LCD-EV development board BSP
#10591 x86_64: Change up_netinitialize to x86_64_netinitialize
Graphics Improvements
File System Improvements
Networking Improvements
Compatibility Concerns
Split usbdev descriptor information, let the class device only handles descriptor information specific to the class, and shared descriptor information is passed through parameters and handled by the composite driver.
Impact
composite_initialize arguments have changed and board specific composite initialization needs to be updated.
before: FAR void *composite_initialize(uint8_t ndevices, FAR struct composite_devdesc_s *pdevices);
after: FAR void *composite_initialize(FAR const struct usbdev_devdescs_s *devdescs, FAR struct composite_devdesc_s *pdevices, uint8_t ndevices);
A usbdev has only one serial string, so use a unique macro to control it. Delete the configurations for COMPOSITE_BOARD_SERIALSTR, PL2303_BOARD_SERIALSTR, CDCACM_BOARD_SERIALSTR, USBADB_BOARD_SERIALSTR, USBMSC_BOARD_SERIALSTR, and RNDIS_BOARD_SERIALSTR, and use BOARD_USBDEV_SERIALSTR for unification.
Impact
For boards that enable board serial string using COMPOSITE_BOARD_SERIALSTR, PL2303_BOARD_SERIALSTR, CDCACM_BOARD_SERIALSTR, USBADB_BOARD_SERIALSTR, USBMSC_BOARD_SERIALSTR, and RNDIS_BOARD_SERIALSTR, they need to be replaced with BOARD_USBDEV_SERIALSTR.
The interface of video_uninitialize() has changed and is no longer compatible.