Apache NuttX-12.11.0 Release Notes

What’s New In This Release Major Changes to Core OS Sched

  • #16554 sched: assert: Print Stack pointer value when not within the stack
  • #16673 sched: Fix smp scheduling
  • #16919 sched/init/nx_bringup.c: Add support for CONFIG_INIT_NONE in a flat build
  • #16927 sched/signal: Old signal action need save sa_user
  • #16481 sched/wdog: Replace periodical timer with the wd_start_next.
  • #16545 sched/wqueue: Fix windows compilation errors.
  • #16593 sched/wqueue: Fix windows compilation errors. MM
  • #16617 mm: add CONFIG_MM_NODE_GUARDSIZE option
  • #16653 mm/Kasan: Fixed some bugs libc
  • #16568 libc: Change atomic_fetch_cxx to macro
  • #16768 libc: fix assert “Free memory from the wrong heap” with flat mode and…
  • #16713 libc/idr: Fix Use-After-Free during idr_destroy()
  • #16675 libc/mcount: add armv6m mcount implementation
  • #16811 libs/libc/netdb: Optimize the DNS timeout calculation logic
  • #16932 libs/libc/semaphore: allow nxsem_init to negative value
  • #16614 libbuiltin/gcov: Upgrade gcov function
  • #16786 Revert “libs/libc/stdlib/lib_exit.c: fix multiple definition of __dso… Tools
  • #16563 tools: Modify refresh.sh to support update all configs from a board
  • #16650 tools/checkpatch.sh: add -x option to auto-format Python files.
  • #16912 tools/checkpatch.sh: check git commit format
  • #16724 tools/espressif: Add risc-v compiler info dump for Espressif devices
  • #16763 tools/nix: Add Nix flake for reproducible dev environment
  • #16924 tools/nix: move nix flakes to tools/
  • #16831 tools/nix: split flake into root and Documentation
  • #16759 tools/nxstyle.c: Updating white list to xedge example
  • #16855 tools/rp{2040,23xx}: Ensure that picotool is found or built
  • #16667 tools/process_config.sh: Fix sed errors
  • #16546 tools/testbuild.ps1: Windows fix the redirect error stream
  • #16711 toolchain/arm: Fix crash caused by clang compiling with -mfpu=fpv5-d16 and -march=armv8.1-m.main+mve.fp+fp.dp
  • #16709 toolchain/arm: Fix link parameter error
  • #16720 toolchain/armclang: Fix armclang config

Build System Improvements

  • #16880 arch: Add Cmake build support for raspberrypi-4b board & bcm2711 chip
  • #16475 arch/arm/src/mcx-nxxx/CMakeLists.txt: Aligned Cmake with Make
  • #16579 arch/arm/src/mcx-nxxx/CMakeLists.txt: Aligned Cmake with Make
  • #16647 arch/arm64/fvp-v8r: support cmake compile
  • #16581 arch/risc-v/src/qemu-rv/CMakeLists.txt: removed repeated addition of …
  • #16477 arch/risc-v/src/qemu-rv/CMakeLists.txt: removed repeated addition of the file qemu_rv_userspace.c
  • #16794 arm: CMake build for the i.MX RT series implemented.
  • #16627 Arm32 v8m support cmake clang compile
  • #16922 boards/arm/imxrt: CMake added imxrt1020-evk imxrt1050-evk boards
  • #16918 boards/arm/imxrt: CMake added imxrt1060-evk imxrt1064-evk imxrt1170-evk boards
  • #16639 cmake/arm64:   support clang compile
  • #16547 cmake(bugfix):fix VERSION genarator strip error in CMake build
  • #16594 cmake(bugfix):fix VERSION genarator strip error in CMake build
  • #16751 cmake(bugfix):add default c++ search path
  • #16897 Cmake: add defconfig preprocess capability in Cmake build environment(recursively expand #include)
  • #16721 cmake: enhance the function of cmake nuttx_wildcard_sources
  • #16867 drivers/analog/CMakeLists.txt: Aligned Cmake with Make
  • #16870 drivers/audio/CMakeLists.txt: Aligned Cmake with Make
  • #16873 drivers/ioexpander/CMakeLists.txt: Aligned Cmake with Make
  • #16871 drivers/leds/CMakeLists.txt: Aligned Cmake with Make
  • #16913 drivers/net/CMakeLists.txt: Aligned Cmake with Make
  • #16620 drivers/segger/CMakeLists.txt: Aligned Cmake with Make
  • #16633 drivers/segger/CMakeLists.txt: Aligned Cmake with Make
  • #16616 drivers/sensors/CMakeLists.txt: Aligned Cmake with Make
  • #16634 drivers/sensors/CMakeLists.txt: Aligned Cmake with Make
  • #16737 toolchain/arm64/cmake: Corrected the writing of arm64 cmake search library
  • #16849 Make/Toolchain.defs: add the AR_EXTRACT command

Architectural Support Improvements ARM

  • #16806 arch//_sigdeliver.c: Fix a race condition is signal delivery for SMP
  • #16657 arch/arm: Add gic lock for GICD_ICFGR RMW operations.
  • #16881 arch/arm: Add missing barriers.h
  • #16669 arch/arm/*/stm32_fdcan_sock.c: prevent interrupt flood on errors.
  • #16611 arch/arm/armv7-a: Support hardware debugpoint to  enhance gdbstub
  • #16752 arch/arm/cxd56xx: Fix bug that causes wake-up by unused gpio interrupt
  • #16797 arch/arm/imxrt: Initial modification to support two USB Controllers
  • #16478 arch/arm/imxrt: Serial add RXDMA support for singlewire mode
  • #16703 arch/arm/rp23xx: Fix gpio  for RP2350B
  • #16704 arch/arm/rp23xx: spi unset peripheral before  to modify Spi parameters
  • #16837 arch/arm/rp2040: Fix typos in ADC and GPIO macro names
  • #16840 arch/arm/rp2040: Implement GPIO output override functionality
  • #16886 arch/arm/rp2040: Silence “LOAD segment with RWX permissions” linker warnings
  • #16876 arch/arm/rp2040: Support pico-sdk 2.2.0
  • #16842 arch/arm/rp2040: Support non-sequential ADC channels and standardize internal function names
  • #16783 arch/arm/samv7: add support for pin to pin compatible pic32cz ca70 series and its evaluation kit
  • #16901 arch/arm/samv7: add support for progmem in PIC32CZ CA70 series
  • #16907 arch/arm/samv7: fix compile warning
  • #16522 arch/arm/samv7: init perf events if enabled
  • #16572 arch/arm/samv7: set correct SPI mode during init
  • #16465 arch/arm/samv7: set correct SPI mode during init
  • #16541 arch/arm/stm32: add STM32 I2C Slave support f…
  • #16532 arch/arm/stm32: add support for ADC trigger from TRGO event
  • #16534 arch/arm/stm32: add support for batch DMA transfer
  • #16680 arch/arm/stm32{h5 h7 l4}/adc: move ADC_MAX_SAMPLES to Kconfig
  • #16530 arch/arm/stm32f0l0g0: add TIMER trigger for ADC
  • #16514 arch/arm/stm32f0l0g0: fix compilation when TIM6/TIM7 is missing
  • #16589 arch/arm/stm32f0l0g0: fix compilation when TIM6/TIM7 is missing
  • #16810 arch/arm/stm32f0l0g0: Fix I2C IRQ numbers
  • #16543 arch/arm/stm32f0l0g0: Improve STM32G0 peripheral config granularity
  • #16670 arch/arm/stm32f0l0g0: move ADC_MAX_SAMPLES to Kconfig
  • #16513 arch/arm/stm32f0l0g0: remove references to CONFIG_STM32F0L0G0_FORCEPOWER
  • #16557 arch/arm/stm32f0l0g0: STM32G0 DMA and ADC Support
  • #16497 arch/arm/stm32f0l0g0: UID support for F0, L0 and C0
  • #16517 arch/arm/stm32f7: Add missing RCC include
  • #16909 arch/arm/stm32f7: Fix “unused variable” warning
  • #16860 arch/arm/stm32f7: Fix I2C4 SDA pin assignment
  • #16827 arch/arm/stm32h7: Fix timer capture upper half driver registration
  • #16809 arch/arm/stm32h7: Port timer capture driver from stm32
  • #16705 arch/arm/stm32h7: support for /dev/random device
  • #16706 arch/arm/STM32H5: Add DMA and ADC DMA support
  • #16776 arch/arm/stm32h5: Add DMA Support to STM32H5 Serial Driver
  • #16708 arch/arm/STM32H5: Add oversampling and resolution support for ADC
  • #16746 arch/arm/stm32h5: Initial Driver for STM32H5 Digital Temperature Sensor (DTS)
  • #16818 arch/arm/stm32h5: Fix STM32H5 FDCAN Driver and Add Test Files
  • #16803 arch/arm/stm32h5: Use double-buffer for ADC DMA in Circular Mode
  • #16923 arch/arm/xmc4 : fix serial buffer size for unused channel ARM64
  • #16612 arch/arm64: enable arm64 hardware breakpoints
  • #16846 arch/arm64: Fix signal delivery in EL1 when MMU is enabled
  • #16826 arch/arm64: imx9 add pci dma space and pci outbound space
  • #16884 arch/arm64/gicv3: Improve initialization in warm reboot case
  • #16743 arch/arm64/imx9: add support for imx95
  • #16727 arch/arm64/imx9: eDMA5 Allow sharing with Linux
  • #16844 arch/arm64/imx9: Fix first trace
  • #16900 arch/arm64/imx9: Fix bus reset
  • #16719 arch/arm64/zynq-mpsoc: fix race condition in txint handler AVR
  • #16687 arch/avr: do not copy const variables to RAM
  • #16498 arch/avr: fix atomic load functions from arch_atomic.c
  • #16586 arch/avr: fix atomic load functions from arch_atomic.c RISC-V
  • #16692 arch/[risc-v/xtensa]: Add SHA accelerator support for esp32[-s2 -s3 -c3 -c6 -h2]
  • #16694 arch/risc-v: Add LP_I2C support for esp32[-c6]
  • #16683 arch/risc-v: Add LPUART support for esp32[-c6]
  • #16685 arch/risc-v: Change DMA functions with common layer for esp32[-c3 -c6 -h2]
  • #16565 arch/risc-v: Fix rv-virt:nsbi[|64] defconfigs
  • #16676 arch/risc-v: fix I2C timeout and board compilation requirements
  • #16921 arch/risc-v: Refactor Wi-Fi driver for ESP32-C3 C6
  • #16485 arch/risc-v/mpfs: Add optimized perf timer functions
  • #16850 arch/risc-v/mpfs: fixes for coremmc and emmcsd
  • #16851 arch/risc-v/mpfs: SMP interrupt handling fixes
  • #16903 arch/risc-v/mpfs/mpfs_clockconfig.c: Flag out code only used in b…
  • #16529 arch/risc-v/ricv_exception.c: Dump the process name at exception in user space
  • #16424 arch/risc-v/rp23xx-riscv: Add rp23xx(rp2350)  (Pico 2 board)  RISC-V support SIM
  • #16742 arch/sim: avoid host-call being interrupted before getting errno TRICORE
  • #16885 arch/tricore: add up_trigger_irq
  • #16910 arch/tricore: fix ld unrecognized option ‘-g3’
  • #16917 arch/tricore/tricore_irq.c: add up_affinity_irq X86_64
  • #16787 arch/x86_64: Allow specifying alternative compilers via CROSSDEV environment variable XTENSA
  • #16804 arch/xtensa: Fix a race condition in xtensa_sig_deliver for SMP
  • #16750 arch/xtensa: fix build break if compiler without ISA - XCHAL_HAVE_THREADPTR support
  • #16686 arch/xtensa: Fix dedicated GPIO build error for esp32[-s2 -s3]
  • #16672 arch/xtensa: support more than 32 cpu interrupts
  • #16744 arch/xtensa/esp32: fix esp32(s3)_async_op() asynchronous operation race issue
  • #16883 arch/xtensa/esp32: fix some compilation warnings
  • #16882 arch/xtensa/esp32: fix the issue of erasing a wide range of flash sectors
  • #16894 arch/xtensa/esp32,esp32s3: Start the “spiflash_op” thread with corret affinity
  • #16878 arch/xtensa/esp32s3: Add EXT1 wakeup support in power management
  • #16756 arch/xtensa/esp32s3: Fix bug related to the PSRAM-allocated task stack
  • #16566 arch/xtensa/esp32s3: Fix Esp32S3 LCD FB resolution.
  • #16603 arch/xtensa/esp32s3: Remove LCD Warnings.
  • #16607 arch/xtensa/esp32s3: Remove LCD Warnings.
  • #16856 arch/xtensa/esp32s2: Remove duplicated lines to fix warning

Driver Support New Driver Support

  • #16836 drivers/analog/ads7046: Add support for ADS7046 ADC
  • #16714 drivers/input: Create Single Button Multi Actions
  • #16902 drivers/ioexpander: Add support for pcal6416
  • #16934 drivers/ioexpander/aw9523b: New driver for AW9523B i/o expander
  • #16217 drivers/leds: Add support for KTD2052
  • #16660 drivers/net: add IGB network card support
  • #16623 drivers/net: add support for the NCV7410 10BASE-T1S SPI MAC-PHY
  • #16605 drivers/sensors: add Quectel L86-XXX GNSS uORB sensor driver
  • #16838 drivers/sensors/tmp112: Add support for TMP112 temperature sensor Improvements
  • #16715 drivers/analog/ads1115.h: Add ioctl for conversion trigger
  • #16875 drivers/can/kvaser_pci: configure number of passes in interrupt handler
  • #16738 drivers/fs:Always use register_mtddriver() to register the MTD device (patch2)
  • #16914 drivers/i2s/i2schar: Implement ioctl commands and blocking read/write operations
  • #16745 drivers/ioexpander/icjx.c: reconfigure icjx after undervoltage
  • #16729 drivers/misc/optee: Cache coherency when MMU is disabled
  • #16734 drivers/misc/optee: expand RPC suppport for IMX9
  • #16800 drivers/misc/optee_smc: Explicitly yield during NW interrupts
  • #16801 drivers/misc/optee_smc: Fix sched_yield() on flat builds
  • #16473 drivers/mtd: fix compile warning
  • #16577 drivers/mtd: fix compile warning
  • #16789 drivers/mtd: introduce nvblk
  • #16642 drivers/mtd/ftl/bch: Add direct writing method for FTL
  • #16906 drivers/net: ksz9477 fixes
  • #16899 drivers/net: Remove NCV7410 driver and corresponding board support
  • #16661 drivers/net: various fixes for e1000 and igc
  • #16649 drivers/net/Kconfig: Move NET_IGC_TXDESC and NET_IGC_RXDESC to NET_IG…
  • #16526 drivers/optee: fix compile break
  • #16767 drivers/pci: epc add dma heap
  • #16753 drivers/segger: Add a kconfig to override Segger SystemView target sources version
  • #16510 drivers/segger: Change SEGGER_RTT_LOCK into rspinlock
  • #16512 drivers/segger: define a macro using a configuration variable
  • #16805 drivers/sensor: Add flags for GNSS satellite
  • #16764 drivers/sensors/l86xxx: Fix driver registration crashes
  • #16701 drivers/sensors/l86xxx: Fix Kconfig options and dependencies
  • #16821 drivers/sensors/l86xxx: Mutex fixes & performance improvements
  • #16778 drivers/sensors/l86xxx: Use uORB GNSS lower-half
  • #16717 drivers/sensors/nau7802: Added frequency control
  • #16466 drivers/serial: fix race conditions
  • #16573 drivers/serial: fix race conditions
  • #16820 drivers/syslog/syslog_channel.c: fix incompatible-pointer-types compile errors
  • #16677 drivers/touchscreen: Add support for mirror/swap
  • #16788 drivers/video: add sched_note_mark at fb_remove_paninfo and fb_notify_vsync

Board Support New Board Support

  • #16443 boards/avr/atmega: Added Elegoo Mega2560r3 board
  • #16781 boards/imxrt: Add support to ARCX Socket Grid board
  • #16558 boards/xtensa/esp32s3: add new esp32s3-8048S043 board Improvements
  • #16792 boards/arm: Fix Kconfig style
  • #16663 boards/arm/lpc17xx_40xx/lincoln60: Correct defconfig for THTTPD_CGIINBUFFERSIZ spelling
  • #16833 boards/arm/qemu: Change config name of input tool
  • #16931 boards/arm/rp23xx/common: update board reset via BOOTROM functions
  • #16707 boards/arm/stm32f401rc-rs485: Add support to HX711 ADC
  • #16779 boards/arm/stm32f401rc-rs485: Add support to MAX31855 and MAX6675
  • #16780 boards/arm/stm32f4discovery: Add support to HX711 ADC
  • #16857 board/esp: Revert mtdblock registeration
  • #16866 boards/esp32s3: Add SPI slave device support
  • #16725 boards/espressif: add support for SDMMC over SPI for ESP32-C3 C6 H2
  • #16812 boards/imxrt: Fix issues and add USBHOST support to arcx-socket-grid
  • #16824 boards/imxrt/arcx-socket-grid: Remove debug symbols
  • #16535 boards/nucleo-f446re: fix adc example
  • #16592 boards/nucleo-f446re: fix adc example
  • #16665 boards/qemu-armv8a: Add xedge example program and documentation
  • #16659 boards/qemu-intel64/qemu.ld: add .lbss, .ldata and .lrodata
  • #16848 boards/risc-v/rp23xx-rv/common: update board reset via BOOTROM functions
  • #16646 boards/riscv-v/esp32c6: Add the NCV7410 10BASE-T1S SPI MAC-PHY support
  • #16898 boards/tricore: rename tc397 chip board name
  • #16505 boards/xtensa/esp32: Add BLE config to esp32-sparrow
  • #16602 boards/xtensa: support SDMMC over SPI on ESP32 S2 S3
  • #16638 boards/xtensa/esp32s3/esp32s3-box: Fix ILI9342C color inversion
  • #16681 boards/weact-stm32h743 Add sdcard support
  • #16785 boards/weact-stm32h743: Add support to ST7735 display

File System  Improvements

  • #16722 fs/block_proxy: fix the issue of the refs count for filep being zeroed out by utilizing dup2
  • #16938 fs/fat: Fix wrong alloc used in fat_zero_cluster()
  • #16536 fs/fcntl: using ioctl to implement FIOGCLEX/FIOCLEX/FIONCLEX
  • #16832 fs/lock: Allow driver lock
  • #16598 fs/procfs: fix output format of fd info
  • #16518 fs/smartfs: Fix a fatal bug about sector writing after seek
  • #16590 fs/smartfs: Fix a fatal bug about sector writing after seek
  • #16490 fs/vfs: check if all iov_base are accessible
  • #16584 fs/vfs: check if all iov_base are accessible
  • #16609 fs/vfs: clear filep when call file_open/file_mq_open to avoid random value[bug fix]
  • #16538 fs/vfs/fs_close.c: avoid double free if CONFIG_FS_NOTIFY is set
  • #16455 fs/vfs/fs_rename: fix directory move operation.

Networking Improvements

  • #16926 include/net/if.h: Add mechanism for MMD access with SIOCxMIIREG ioctls
  • #16628 net: Enable TCP/IP backlog by default
  • #16684 net/arp: avoid unnecessary ARP requests
  • #16905 net/can: fixes and cleanups
  • #16682 net/local: correct shutdown state when use UDP mode (To fix issue: https://github.com/apache/nuttx/issues/16555)
  • #16494 net/utils: avoid unalign access g_tcp_connections_buffer
  • #16585 net/utils: avoid unalign access g_tcp_connections_buffer
  • #16599 netdb/lib_dnsquery.c: prevent file descriptor leakage
  • #16606 netdb/lib_dnsquery.c: In the IPv6 or IPv4 dns_query_callback() block,…

Unsorted contributions

  • #16644 espressif: update lower-half drivers
  • #16467 audio/comp: fix build warning caused by invalid return value
  • #16469 mcx-nxxx: Add LPI2C driver for mcx-nxxx architecture
  • #16474 syslog/rpmsg: disable force put char to lower putc
  • #16479 sensors/nau7802: Fix format warning
  • #16482 Fix i.MX93 ENET1 (EMAC) TXC muxing and RGMII-ID setting
  • #16483 Segger sysview improvements
  • #16486 add spin_lock_irqsave_nopreempt rspin_lock_irqsave_noprempt implement.
  • #16487 Fix arch perf events ifdef in alarm
  • #16489 Added support obtaining the unique id for the stm32f0l0g0 family
  • #16491 espressif[risc-v xtensa]: Check events when reading PCNT counter value
  • #16492 add FDCAN support for STM32C0
  • #16493 RFC 5424 implementation for SYSLOG
  • #16495 minor stream improvement
  • #16496 improve libc/stream subsystem
  • #16500 Add ADC support for STM32G0 (along with oversampling)
  • #16508 riscv qemu-rv: fix kernel mapping by enabling CONFIG_MM_KMAP in knsh
  • #16509 Update the ELF guides
  • #16511 nuttx/spinlock: Define empty macro for spin_unlock
  • #16519 imx9/smp: Add SMP support for imx93
  • #16527 nxgdb/fs: fix exception when failed to parse symbol
  • #16533 Update MCUBoot build process for Espressif devices
  • #16540 qemu/armv8a: fastboot tcp defconfig + documentation.
  • #16549 Minor improve to stream
  • #16550 gitignore: add more vim swap files
  • #16552 spinlock: Better recursive spinlock implementation.
  • #16556 risc-v/mmu: Fix map_region() for incorrect page table setup when vadd…
  • #16562 esp32s3: update config and doc for fastboot
  • #16567 Move assemble soure files out off gnu folder
  • #16569 Refine vfs source file layout
  • #16571 remove warnings
  • #16574 audio/comp: fix build warning caused by invalid return value
  • #16578 syslog/rpmsg: disable force put char to lower putc
  • #16580 mcx-nxxx: Add LPI2C driver for mcx-nxxx architecture
  • #16582 sensors/nau7802: Fix format warning
  • #16583 Fix i.MX93 ENET1 (EMAC) TXC muxing and RGMII-ID setting
  • #16588 riscv qemu-rv: fix kernel mapping by enabling CONFIG_MM_KMAP in knsh …
  • #16591 Update MCUBoot build process for Espressif devices
  • #16595 risc-v/mmu: Fix map_region() for incorrect page table setup when vadd…
  • #16596 Fix arch perf events ifdef in alarm 
  • #16597 fix framebuffer config resolution.
  • #16604 [ESP32S3] Add LCD defconfig
  • #16615 debug/0 address: Add 0 address access panic configuration
  • #16618 Enhanced Kasan
  • #16619 arm64/v8r: support clang compilation
  • #16629 bugfix: share kernel thread group should not dup files from caller group
  • #16635 Add a header file as a dependency
  • #16651 Refactored the btuart_rxwork function to improve data reception stability.
  • #16654 imx9/lpuart: Fix race condition / regression in imx9_txint
  • #16671 sem/trywait/atomic: Fix the try wait abort by interrupted caused false failure report.
  • #16674 xtensa/espressif: Change LEDC implementation to common one
  • #16690 coredump: Fix missing loglevel to logmask conversion
  • #16700 sensors/bmi160,270: Fix a bug sensor_time is truncated
  • #16718 arm64/qemu: decouple qemu board from chip
  • #16735 espressif: fix MCUBoot OTA on Espressif devices.
  • #16754 espressif: PCNT: add high and low limit Kconfig options
  • #16765 nucleo-h743zi: Add ADC2 support and expand ADC channel list
  • #16769 esp32s3_extraheaps.c: add a missing include for xtensa_imm_initialize
  • #16771 crypto/cryptosoft: fix aadlen used uninitialized warning
  • #16773 add esp32s3-devkit:mbedtls kconfig
  • #16798 arm64: porting mu drv and scmi from arm imx9
  • #16807 bugix/risc-v/esp32c6: Fix build error of LP_I2C
  • #16813 Fix compilation errors with c++
  • #16819 Increase buffer sizes for uORB devices
  • #16830 h743zi/capture: add doc, defconfig & update make pipeline
  • #16839 crypto/hmac: Fix typo in function implementation names
  • #16843 pci: epf test default a function
  • #16845 sys/socket.h: wrap the outer layer of struct sockaddr_storage with aligned(SS_ALIGNSIZE)
  • #16852 risc-v/mpfs: usb: don’t try nonexistent ep int flags
  • #16853 Mpfs map mtime in userspace
  • #16874 Add missing PSE52 interfaces
  • #16879 include/nuttx/compiler.h:

Compatibility Concerns

  • #16499 [BREAKING] fs/vfs: Separate file descriptors from file descriptions

This PR is a rework of the NuttX file descriptor implementation. The goal is two-fold:

Improve POSIX compliance. The old implementation tied file description to inode only, not the file struct. POSIX however dictates otherwise. Fix a bug with descriptor duplication (dup2() and dup3()). There is an existing race condition with this POSIX API that currently results in a kernel side crash. The crash occurs when a partially open / closed file descriptor is duplicated. The reason for the crash is that even if the descriptor is closed, the file might still be in use by the kernel (due to e.g. ongoing write to file). The open file data is changed by file_dup3() and this causes a crash in the device / drivers themselves as they lose access to the inode and private data.

The fix is done by separating struct file into file and file descriptor structs. The file struct can live on even if the descriptor is closed, fixing the crash. This also fixes the POSIX issue, as two descriptors can now point to the same file.

The implementation of this PR is based on the modifications made in #16361. Thank you @pussuw

DEPENDS ON: apache/nuttx-apps#3091

IMPACT

Remove the FS_REFCOUNT config because reference counting is a very necessary feature that is required in many scenarios to ensure stability. Rename the functions fs_getfilep, fs_putfilep, and fs_reffilep to file_get, file_put, and file_ref respectively, to unify the naming convention to file_xxx, such as file_open, file_ioctl, etc. Introduce a new fd (file descriptor) structure. If multiple file descriptors (fds) are in a dup relationship, they can share the same file entity to implement the dup functionality. Modify the functions nx_close_from_tcb, nx_open_from_tcb, nx_dup2_from_tcb, and nx_dup3_from_tcb to fdlist_open, fdlist_close, fdlist_dup2, and fdlist_dup3 respectively, to uniformly operate on file descriptors using fdlist.