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 interfaceswd_create()
andwd_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 optionsCONFIG_PREALLOC_WDOGS
andCONFIG_WDOG_INTRESERVE
, (2) eliminates the typeWDOG_ID
which was a pointer type tostruct wdog_s
, and (3) change the type of the first argument of all remaining wdog interfaces functions fromWDOG_ID
toFAR 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 tostruct wdog_s wdog
; That changes the field from a pointer to astruct wdog_s
to thestruct wdog_s
storage itself. - Eliminate all calls to
wd_create()
. TheWDOG_ID
is not longer managed by the timing subsystem and thewd_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 towd_delete()
should be replaced with calls towd_cancel()
. If you are certain that the timer has never been started, then you must remove the call towd_delete()
altogether. Callingwd_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)
wherepriv->wdog
was typeWDOG_ID
with the callret = wd_cancel(&priv->wdog)
wherepriv->wdog
is now typestruct 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-1615 libc: Implement tm::tm_gmtoff field
PR-1611 libc: Allocate file_struct dynamically
PR-1684 Add gdb script for NuttX thread debugging
PR-1607 mm: Implement malloc_usable_size
PR-1606 sched/pthread: Implement pthread_attr_detachstate
PR-1600 Implement epol_pwait and EPOLLONESHOT flag
PR-1597 sched: Support passing non empty argument to init task
PR-1596 libc: Replace all sem_xxx with _SEM_XXX. This insures the correct semaphore interface is used by userspace and the kernel.
PR-1517 sched/wdog: Chang the default value of MAX_WDOGPARMS from 4 to 2 as wd_start is two every where in the code base. Also bump CONFIG_MAX_WDOGPARAMS from 1 to 2 in defconfigs to support pthread_condclockwait()
PR-1486 libc: Implement ftw and nftw functions
PR-1567 libc: Implement proposed POSIX _clockwait variants of _timedwait functions
PR-1411 libxx: Integrate latest uclibcxx 0.2.5
PR-1586 libc: Add open for text (translated) access support
PR-1584 libc: Implement strlcpy function
PR-1580 libc: Implement pthread_conattr_etclock
PR-1545 sched/wdog: Do not dynamically allocate wdog_s. Reduces overhead and brings it inline with work_s
PR-1534 sched/wdog: Replace all callback arguments from uint32_t to wdparm_t
PR-1420 libc: Do not define localtime[_r] to macro with CONFIG_LIBC_LOCALTIME is not defined.
PR-1375 libc: Always declare getenv, link/symlink and atexist/on_exit. Many C++ libraries reference these but dont use them
PR-1371 libc: Improve stat/readdir to be more POSIX compliant with S_xxx macro definition as with Linux
PR-1369 Initialize the idle stack at the arch layer to better support stack coloring and also make it compatible with new TLS implementation
PR-1292 pthread/mutex: Add PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP support
PR-1280 libc: Implement fseeko and ftello
PR-1279 libc: Implement lstat and realpath
PR-1278 libc: Implement pathconf and fpathconf
PR-1269 cstdlib: Add missing atox to std namespace
PR-1264 sched/pthread: Prohibit the use of pthread_cleanup API's by kernel threads
PR-1440 libc: Add the UUID libc functions
PR-1308 libc: Add support for _SC_NPROCESSORS_CONF/_SC_NPROCESSORS_ONLN to sysconf
PR-1305 libc: Implement WNOHANG for waitpid and waitid
PR-1237 libc: Add minimal support for locale_t operation: suplocale, freelocale, newlocale, userlocale
PR-1317 sched/task: Unify task initialization
PR-1187 sched: Unify main thread and pthread behavior
PR-2263 libc/stdio: Preallocate stdin, stdout, stderr
PR-2053 PR-2040 serial/termios: Support custom baudrate setting
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
PR-1619 Fix inverted errno in mq_open
PR-1595 epoll_wait() must loop until "maxevents" to fille output evs array
PR-1519 libc: Replace index/rindex from macro to function to protect against side effects with conflicting local variables
PR-1514 Remove usage for user-space memalign() from kernel/driver code. Instead use the proper kernel memory interface.
PR-1512 / PR-1510 / PR-1507 Remove usage for user-space malloc()/zalloc()/free() from kernel/driver code. Instead use the proper kernel memory interface.
PR-1496 libc: Change ctype macro to normal function to resolve macro evaluation side effects
PR-1463 libc: Replace all malloc/free with lib_malloc/lib_free inside libc
PR-1365 up_assert should not call exit() directly because it is only callable from userspace
PR-1336 syscall: Fix prctl PR_SET_NAME failure if called without pid argument
PR-1289 Clear the error indicator with rewind()
PR-1254 libc: mkstemp only look at the trailing X's instead of the first X
PR-1311 libc: Move double_t typedef from sys/types.h to math.h
PR-1328 Make sure that pthread_cleanup functions are only called from userspace
PR-1318 nxsched_release_tcb should release stack in kernel build, fixes memory leak
PR-2951 sched: Fix deadlock in nxtask_exit() for SMP
PR-2229 PR-2298 PR-2279 PR-2272 PR-2264 PR-1992 PR-2022 sched: SMP fixups that caused locking and removal of some no longer required workarounds
PR-1993 libc: Skip close stdin/stdout/stderr in fclose
PR-1997 libc: Remove all calls to fclose with stdin/stdout/stderr with fclose
Major Changes to Documentation
PR-1763 Add quickstart documentation
PR-1677 Add simulator, drivers, and contributing instructions for new users
PR-1675 Add quickstart documentation from NuttX Companion
PR-1673 Update all the links in the documentation to point to nuttx.apache.org or the Apache NuttX wiki instead of old nuttx.org resources
PR-1501 Port all the existing documentation from HTML files to Sphinx based documentation along with a bunch of updates and improvments
PR-1433 Convert README documentation to Markdown
Major Changes to the Build System
New Features
PR-1786 Support building external code into the OS
PR-1396 Make C/C++ search path common so all boards support uClibc++/libc++ automatically
PR-1682 configure.sh can now list configurations with "-L" option
PR-2023 tools: Remove WSL configruation. This is just Linux now.
Bug Fixes
PR-1713 Fix export target: libboard was missing KERNEL flag.
PR-1470 Fix Make.dep not updated by .config changes
PR-1345 Enhance export target: make BIN directory configurable, export post build script, use LDNAME instead of LDSCRIPT
PR-1332 Include incdir.c in the export target
PR-1995 Fix issue where wrong extension was generated for mkconfig in WSL builds
PR-1949 Fix issue in make export where nuttx-names.dat was not being generated
PR-1682: Fix issue where windows style paths might not be handled correctly breaking Cygwin builds
Architectural Support
New Architecture Support
PR-1847 ARM: Initial support for ARMV6M to support CortexM0+
PR-1397: EOSS3: Initial support for the QuickLogic EOS S3 SoC
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
PR-1569 cxd56xx: Add SMP support to cxd56_farapi.c
PR-1689 cxd56xx: Use spinlock in uart 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
PR-1712 ESP32: Add support for external MMCSD card over SPI
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.
PR-1516 Kinetis K28: Add support for USB High Speed Host
PR-1531 Kinetis K28: Add USB state change notifiers in notifier work queue
PR-1456 Kinetis K28: Reworked USB driver for setup out data phase
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
PR-1685 NRF52: Add ARM system reset support. Add UID support.
PR-1674 NRF52: Add LFCLK/HFCLK support for selecting oscillator sources.
RISCV
PR-1858 RISCV: Add missing CSR macros listed in RISC-V spec V1.10.
PR-1314 rv32im: Add schedulesigaction.c, SYS_save_context handling, skip ECALL instruction when calling up_swint()
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
SAMA5D2
PR-1412 SAMA5D27: Implement system reset to support nsh reboot command
PR-1393 SAMA5D2x: Implement SDMMC peripheral support
S32K
PR-1339 S32K: Extend FlexTimer support and add support for PWM
PR-1337 S32K: Allow FlexCAN to use to NETDEV_LATEINIT to handle the case where both FlexCAN and ENET are used
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.
PR-1392 SIM: Make uClibc++ and libcxx work on sim platform
PR-1460 SIM: Call sched_note_cpu_* when scheduler instrumentation is enabled
STM32
PR-1865 STM32F4: Add support for STM32F412CE fixing I2C2/I2C3 and USART1 alt
PR-1506 STM32: Add support for single wire UART push/pull mode
PR-1572 STM32F2/F4: Add options for I-Cache and D-Cache to be enabled/disable. Previously they were always enabled.
PR-1287 STM32F7: Refactor the FMC driver to support STM32F7 family and add support to the STM32F46G-DISCO board
PR-1275 STM32: Allow SysTick to be a tickless clock source option
PR-1268 STM32: Add support for STM32F412 with UART / SPI / CAN / I2C / DMA
PR-1250 STM32L4: Add support for booting into DFU mode
Bug Fixes
ARM
PR-1562 ARM: Save tcb-adj_stack_size should be saved without tls overhead
PR-1900 ARM: Fix false reporting for stack usage for unaligned stacks
AVR
PR-1410 avr: Implement missing double_t type, CONFIG_STACK_ALIGNMENT, linker emulation flags
CXD56xx
PR-1930 cxd56xx: Fix handle_irqreq() in cxd56_cpupause.c
PR-1789 cxd56xx: Fix deadlock issue in up_txinit() in SMP mode.
PR-1620 cxd56xx: Fix IRQ control in cxd56_dmac.c
PR-1253 cxd56xx: Fix audio cxd56_stop where a deadlock could be hit if the worker thread took too long to turn on AMP
PR-1950 cxd56xx: Fix deadlock and tcb corruption in SMP mode
ESP32
PR-1908 ESP32: Fix task signal process preemption
PR-1941 ESP32: Fix interrupt clearing of edge interrupt due to issuing in masking interrupt state
IMXRT
PR-1527 IMXRT: Fix kconfig so that IMXRT_ENET_NRXBUFFERS can be set
PR-1455 IMXRT: Fix auto-negotiation for KSZ8081 PHY
Kinetis
PR-1273 Kinetis: Fix issue in ethernet driver where buffers were blindly initialized and could cause the TX of the MAC to be in a bad state. Also resolves an issue with interrupts being throttled in the NVIC.
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
PR-1709 SIM: Fix up_cpu_start initialization for macOS with SMP enabled
STM32
PR-1898 STM32F7: Fixes data loss bug in UART5 with TX DMA
PR-1841 STM32: Remove broken overdriver support
PR-1719 STM32: Lowputc: Ensure USART is disabled before attempting to configuring it
PR-1714 STM32H7: Fix I2C driver interrupt storm
PR-1556 STM32: Fix IO compentation support in STM32F7 and remove incorrect reference in STM32F0/L0/G0
PR-1529 STM32: Fix intialization bug in ADC that prevented adc_reset() from working correctly
PR-1561 STM32: Make sure that core over-drive is enable for all chips that support it and operating at 180MHz. Some were enabled at 180MHz but may have not been stable without over-drive not configured.
PR-1553 STM32F7: Fix possible interrupt blocking in serial TXDMA ISR
PR-1544 STM32: Make sure IO compenstation cell is configured prior to call to rcc_enableperipherals() causing syscfg is accessed before it is enabled
PR-1380 STM32F7: Fix tickless driverw where th compare register could be set to a value that has just passed preventing expiration
PR-1252 STM32L4: Fix 48MHz MSI clock seclection that could cause boot to hang
PR-1310 STM32L4: Configure flash wait states earier to prevent corruption of execution state
PR-1248 STM32L4: Fix oneshot timer so that a minimum period is set otherwise it will never be triggered.
PR-1247 STM32L47x/8x: Set additional registers require to place a pin in analog mode
PR-1246 STM32L4: Fix issue where clock divider for serial baud rate was not set correctly
Miscellaneous
PR-1912 Fix up_interrupt_contex() in case of SMP - Make sure the operation is atomic in case of SMP
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-1836 stmpe811: Fix incorrect GPIO interrupt register logic
PR-1741 mmcsd_sdio: Properly arm the write completion detection
PR-1370 can: Fix incorret usage of nxsem_getvalue which caused fifo->rx_sem to increase with teach received msg
PR-1452 lcd: Fix memory leak when board_graphics_setup fail
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 gauge
PR-1276 Add support for the ST7735 TFT Controller
PR-1233 usbhost: Add support for CDC-MBIM USB host driver
Drivers With Significant Improvements
PR-1816 stmpe811: Add SPI support for touch screen controller
PR-1800 vfs: Add FIOCLEX/FIONCLEX
ioctl support
PR-1798 mmcsd: Allow setting IDMODE_CLOCK
via kconfig
PR-1587 BCH: Delay the sector flush to avoid multiple earse/write operations in sequence write
PR-1577 rwbuffer: Avoid allocating memory for the temporary erase buffer by the FTL driver
PR-1466 Altair Modem: Add board specific logic, Fix issue that SPI4 RX frequency violated AC Spec, Fix priority of SPI transfer task is too low, Modify timeout value for RX ready
PR-1471 ramlog: Add option to overwrite buffer
PR-1547 usbhub: Make sure to enumerate hubs that report protocol = 1 (High Speed Hub)
PR-1374 gpio: Extend gpio_pintype_e for pulldown/up and opendrain
PR-1249 bmp280: Add support for reading temperature
PR-1299 mpu60x0: Add I2C support for the MPU60x0 sensor driver
PR-1325 can: expose NART/ABOM and RTR settings via ioctls
PR-1520 note: Move note driver from syslog to drivers/note
PR-1288 / PR-1449 note: Add sched_note_syscall_enter/leave hooks for syscall instrumentation
PR-1259 note: Add buffering support for syscall instrumentation
PR-1256 note: Add hooks for note driver for interrupt instrumentation
Board Support
Significant Improvements
PR-1618 metro-m4: Add support for: SmartFS initialization, AT24 EEPROM, GPIO dev, BQ27426 gague initialization
PR-1727 b-g474e-dpow1: Add support for FLASH bootloader
PR-1683 cxd56xx: Add wifi_smp configuration
PR-1668 sim: Add new configuration for SMP
PR-1644 stm32f746g-disco: Move serial console from USART6 to USART1 which is attached to the USB virtual COM port.
PR-1464 cxd56xx: Add new GNSS functions, support for lower PWM frequency, CONFIG_CPUFREQ_RELEASE_LOCK, high speed ADC, HPADC input gain configuration, eMMC device, frame buffer support
PR-1405 stm32f4discovery: Add ELF support to wifi configuration
PR-1402 imxrt1060: Add buttons support to iMXRT1060
PR-1590 sim: Add duktape configuration
PR-1532 sim: Add cromfs configuration
PR-1335 cxd56xx: Enable basic snapshop camera example
New Board Support
PR-1664 NRF52: Add support for NRF52832 MakerDiary MDK board
PR-1633 NRF52: Add support for Sparkfun NRF52832 Breakout Board
PR-1728 SAMA5D27: Add support for Giant Board
PR-1397 EOSS3: Initial support for the QuickLogic EOS S3 SoC QuickFeather board
PR-1268 STM32: Add support for nucleo-f412zg board
File System
Bug Fixes
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-1737 vfs: reuse file_dup2 direction in file_dup to prevent segfault issue
PR-1490 Insure that filesystems can all support paths that end with '/'
PR-1546 ROMFS: Fix issue with how hard links are followed for ROMFS
PR-1442 SmartFS: Fix file size corruption when opening with overwriting mode
PR-1431 nxffs: Fix scan good block slowly and scan an invalid block
PR-1295 fs: for setfd correct the return value
Significant Improvements
PR-1554 CROMFS: Add support for hard links
PR-1499 FAT: Add support for UTF8 long filename
PR-1479 vfs: Add file descriptor based events support eventfd()
PR-1582 vfs: Add epoll_create1() support
PR-1579 vfs: Do not check CONFIG_NFILE_STREAMS for mkdir/rename/rmdir/fs_unlink
PR-1355 vfs: Implement statvfs and fstatvfs
PR-1323 vfs: Add chmod/fchmod/utimes function prototypes
Networking
Bug Fixes
PR-1267 SocketCAN: When timestamped frame was recived while in CAN2.0B mode the frame got dropped.
PR-1446 usrsock: Fix recv() cannot peek data
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.
PR-1581 Socket: Add SOCK_CLOEXEC/SOCK_NONBLOCK support
PR-1443 usrsock: Add flag argument to sendto/recvfrom interface in usrsock
PR-1238 SocketCAN: Add support for SocketCAN interface API
Applications
Significant Improvements
PR-409 wamr: Update version to 09-29-2020 that supports NuttX directly and remove patches
PR-407 ipcfg: Add IPv4 configuration file access helper
PR-406 wamr: Add configs for heap pool and custom name sections
PR-404 timer: Add supplying timer dev path to example
PR-403 nxplayer/nxrecorder: Add channel map support
PR-396 wamr: Add missing options to kconfig
PR-395 dhcpc: Try to get hostname via syscall first
PR-391 wapi: Add option to assocated directly via bssid
PR-390 wapi: App option to scan partial channel
PR-387 wamr: Add support for WAMR web assembly interpreter
PR-337 docs: Convert all README files to markdown
PR-333 webclient: Add hooks for TLS, extra request headers, PUT method, report status code, improved error handling
PR-329 gpio: Add support for new GPIO pin types
PR-317 nshlib: Call symlink if user pass -s for ln command
PR-315 c++: Support uClibc++ and libcxx in examples/testing
PR-314 camera: Add a simple camera snapshot example
PR-378 wasm3: Initial WebAssembly runtime support
PR-374 bluetooth: Use the new l2cap socket address type
PR-373 duktape: Add duktape to global search path so it can be used as a library
PR-372 quickjs: Add support for QuickJS interpreter
PR-367 nsh: Accept the command line arguments like sh
PR-365 duktape: Add console, print, alert support
PR-364 cu: Refactor cu and add support for "-c" to disable \n to \r\n conversion
PR-362 libuv: Add support for libuv library
PR-352 duktape: Add initial support for duktape
PR-346 wget: Enable URL from command line, can be used with ifup, hooks for HTTPS
PR-302 lvgl: Use the latest version 7.0.2
PR-300 note: Add support for decoding interrupt and syscall instrumentation
PR-299 nxrecorder: Add O_TRUNC when creating a file
PR-296 bmp280: Add support for BMP180 to BMP280 application
PR-294 can: Add cansend and candump utilities for interacting with SocketCAN
Bug Fixes
PR-411 wgetjson: Fix build breakage
PR-405 nxplayer: Fix missing "%d" in a sscanf call
PR-400 dhcpc: Handle case where gethostname() might be empty
PR-399 build: Fix build system issue where compiler would only compile first assembly file
PR-393 build: Fix build system issue where ARCHCPUFLAGS in cxx command was lost
PR-392 wapi: Make wapi more robust in failure cases
PR-383 ntpclient: Fix NTP daemon state in case of DNS failure
PR-344 gs2200m: Fix freeing of uninitialized memory
PR-335 ntp: Fix malformated authentication headers in NTP packet
PR-331 telnetd: Fix buffer overflow issue clearing socket address
PR-312 build: Make sure to include incdir when running make export
PR-377 readline: Fix stack overflow when application name is too long
PR-359 nshlib: Fix memory corrupt in nsh_parse if pthread_create() failed
PR-354 dhcpd: Fix member name for "ds_pid"
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:
- 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.