602 lines
24 KiB
Plaintext
602 lines
24 KiB
Plaintext
|
NuttX-9.1.0
|
||
|
-----------
|
||
|
|
||
|
* Major Changes to Core OS:
|
||
|
* New Features:
|
||
|
- PR-977 PR-987 PR-998 PR-995 PR-997 PR-1007 Thread Local Storage (TLS)
|
||
|
is now a required feature and used by all architectures
|
||
|
There is detailed information on the implementation and how this
|
||
|
impacts errno specifically in the Wiki article: Userspace errno and
|
||
|
TLS
|
||
|
- PR-957 PR-947 PR-963 PR-969 Provide nx_ versions of many functions
|
||
|
that are used internally to avoid disrupting errno in userspace
|
||
|
- PR-965 PR-980 PR-984 ioctl is now always in the variadic form.
|
||
|
Syscalls in KERNEL builds are also more efficient with this as well now.
|
||
|
Previously the ioctl prototype was normally defined as:
|
||
|
|
||
|
int ioctl(int fd, int cmd, unsigned long arg);
|
||
|
|
||
|
unless the CONFIG_LIBC_IOCTL_VARIADIC was enabled in which case it was
|
||
|
|
||
|
int ioctl(int fd, int cmd, ...); This form is now the form defined by
|
||
|
opengroup and is also inline with Linux. Prior to this change there
|
||
|
were issues with making ioctl calls on 64-bit arch since the
|
||
|
implementation assumed that (void *) would be of size long. There is
|
||
|
more discussion of this issue in the GitHub issue ticket here:
|
||
|
|
||
|
https://github.com/apache/nuttx/issues/959
|
||
|
|
||
|
- PR-962 PR-964 Add new interface sched_get_stackinfo that simplifies
|
||
|
interfaces for things like TLS
|
||
|
There are some security imposed rules for using this interface
|
||
|
Any thread may query its own stack, A kernel thread may query the
|
||
|
stack of any other thread Application threads, however, may query
|
||
|
only the stacks of threads within the same task group, i.e., the
|
||
|
main thread and any of the child pthreads created with the main
|
||
|
thread as a parent or grandparent or great-grandparent.
|
||
|
|
||
|
- PR-1104 Internal function fs_fsopen() no longer affects errno -
|
||
|
- PR-1123 Move task_init() and task_activate() to be internal functions -
|
||
|
- PR-1140 Add nxtask_uninit() interface
|
||
|
This function will undo all operations on a TCB performed by
|
||
|
task_init() and release the TCB by calling kmm_free(). This is
|
||
|
intended primarily to support error recovery operations after a
|
||
|
successful call to task_init() such was when a subsequent call to
|
||
|
task_activate fails.
|
||
|
- PR-1134 Add typedef for max_align_t
|
||
|
- PR-1141 Handle custom stack allocations
|
||
|
sched_releasetcb() will normally free the stack allocated for a task.
|
||
|
However, a task with a custom, user-managed stack may be created using
|
||
|
nxtask_init() followed by nxtask_activate(). If such a custom stack is
|
||
|
used then it must not be freed in this manner or a crash will most
|
||
|
likely result.
|
||
|
|
||
|
This change adds a flag call TCB_FLAG_CUSTOM_STACK that may be passed
|
||
|
in the the pre-allocated TCB to nxtask_init(). This flag is not used
|
||
|
internally anywhere in the OS except that if set, it will prevent
|
||
|
sched_releasetcb() from attempting to free that custom stack.
|
||
|
|
||
|
* Bug Fixes:
|
||
|
- Many private architecture interfaces were using 'up_' instead of the
|
||
|
arch name 'arm_'
|
||
|
This fix is carried over many PRs such as PR-924. Many files also
|
||
|
carried this same error in naming convention and were converted as
|
||
|
well.
|
||
|
|
||
|
- PR-1018 PR-1017 PR-1021 PR-1022 PR-1057 PR-1060 PR-1194 Clean up
|
||
|
internal APIs that were not using the properly naming conventions -
|
||
|
- PR-857 Wrong value for it_interval field in timespec returned by
|
||
|
timer_gettime - PR-902 SMP: On task creation do not clone
|
||
|
uninitialized descriptors
|
||
|
In SMP mode, there is a possibility that a pthread executing one CPU
|
||
|
may create a new task while a pthread on another CPU has allocated
|
||
|
the socket but not yet initialized it. This commit updates the
|
||
|
socket clone test to assure that the socket is both allocated and
|
||
|
initialized before it is cloned.
|
||
|
- PR-911 Use OS signal functions internally to not reset errno that
|
||
|
applications are using
|
||
|
- PR-925 sys/stat.h Change the xtime fields to align with POSIX
|
||
|
standard. Starting from Issue 7 of the POSIX standard the fields
|
||
|
st_atime, st_mtime and st_ctime have a type of strcut timespec instead
|
||
|
of time_t.
|
||
|
- PR-939 openamp: Update to 2020.04.0 - PR-953 lib_vsprintf: Fix issue
|
||
|
where stack would become corrupt on x86_64
|
||
|
This function requires traversing the VA_LIST twice. For some
|
||
|
architectures like x86 and x86_64 this needs to be cloned first.
|
||
|
|
||
|
* Major Changes to the Build System:
|
||
|
Parts of the build system have been refactored to reduce duplication and
|
||
|
simplify Makefile and Make.defs files across many directories. These changes
|
||
|
are particularly beneficial for boards.
|
||
|
|
||
|
Please note that if you develop your own custom boards, you may need to make
|
||
|
some modifications to keep your board's build scripts up-to-date with the
|
||
|
rest of NuttX and avoid a broken or defective build. For details, see
|
||
|
Compatibility Concerns, Changes to Build System, in these release notes.
|
||
|
|
||
|
* New Features:
|
||
|
- PR-894 openamp and libmetal can now be downloaded and configured by
|
||
|
build system - PR-941 Remove 'u' prefix from userspace library in FLAT
|
||
|
Build so it is the same for all build types - PR-1044 ARM: Remove
|
||
|
support for old redundant gcc toolchains
|
||
|
|
||
|
This removes support for the Codesourcery, Atollic, DevKitArm,
|
||
|
Raisonance, and CodeRed toolchains. Not only are these tools old and
|
||
|
no longer used but they are all equivalent to the standard ARM EABI
|
||
|
toolchains. Retaining specific support was not meaningful (and they
|
||
|
are still supported, but now just as generic EABI toolchains).
|
||
|
- PR-1148 PR-1149 Improve build time especially on non-Linux platforms
|
||
|
by providing a C version of incdir.sh
|
||
|
|
||
|
* Bug Fixes:
|
||
|
Many small changes to resolve dependency resolution issues that would
|
||
|
sometimes appear during parallel builds. Parallel builds should be much
|
||
|
more reliable now and bugs filed against any issues found.
|
||
|
|
||
|
- PR-1000 Fix broken support of ZDS-II Toolchain with MSYS
|
||
|
|
||
|
* Architectural Support:
|
||
|
* New Architecture Support:
|
||
|
- PR-879 ARMv8-M support - PR-1051 STM32G474 support
|
||
|
|
||
|
- Initial architectural support for the STM32G474 family of
|
||
|
microcontrollers. In terms of peripherals, currently there is basic
|
||
|
support for the RCC and UART, allowing NuttX to boot to a functional
|
||
|
NSH prompt on this family. Other peripherals on the SoC are not yet
|
||
|
supported and/or not tested yet. Contributions to enable other
|
||
|
peripherals are welcome. This adds support for these variants:
|
||
|
|
||
|
STM32G474C STM32G474M STM32G474R STM32G474Q STM32G474V
|
||
|
|
||
|
* Architectures With Significant Improvements:
|
||
|
- PR-745 The full line of STM32H7 chips are now defined
|
||
|
This adds support for these variants:
|
||
|
|
||
|
STM32H743AG STM32H743AI STM32H743BG STM32H743BI STM32H743IG
|
||
|
STM32H743II STM32H743VG STM32H743VI STM32H743XG STM32H743XI
|
||
|
STM32H743ZG STM32H753AI STM32H753BI STM32H753VI STM32H753XI
|
||
|
STM32H753ZI
|
||
|
|
||
|
- PR-811 i486: Fix corruption of esp register on full context restore
|
||
|
This resolves a long standing issue with running the x86 port under
|
||
|
QEMU where it would crash shortly after boot.
|
||
|
|
||
|
- PR-837 rx65n: Add crashdump support using standby RAM - PR-862
|
||
|
STM32L4: Expose LPTIM timers - PR-868 STM32L4: Extend clock options and
|
||
|
power regulation for based on clock settings
|
||
|
Interface to select the core regulator voltage according to clock
|
||
|
frequency range Usage of this interface during clock configuration
|
||
|
according to chosen clock frequency Option to choose a different
|
||
|
system clock than the main PLL (there is HSI, MSI, HSE and LSE
|
||
|
available to use) Option to not enable the main PLL which allows for
|
||
|
reduced power usage when setting one of the above options as system
|
||
|
clock, to do this you should define STM32L4_BOARD_NOPLL on your
|
||
|
board header.
|
||
|
- PR-960 STM32: Add support for ADC features EXTSEL and JEXTSEL
|
||
|
- PR-1041 STM32H7: Improve IDMA transfer and cache handling
|
||
|
This resolves an issue where the sdmmc driver crashes at boot when
|
||
|
using writeback cache.
|
||
|
|
||
|
This also simplifies the sdmmc driver when the IDMA is in use. There
|
||
|
is no need to mix IDMA and interrupt based transfers; instead, when
|
||
|
making unaligned data tranfers, just make IDMA into an internal
|
||
|
aligned buffer and then copy the data. This method also enables
|
||
|
multiblock transfers, and transfers from/to data buffers which are not
|
||
|
aligned on cache boundary.
|
||
|
- PR-1042 STM32H7: Resolve multiple limitations and bugs with progmem
|
||
|
especailly for partial memory writes
|
||
|
- PR-1045 STM32H7: This gives possibility to send arbitrary number of
|
||
|
bytes from memory to peripheral using DMA also when using write-back
|
||
|
cache
|
||
|
It was not possible to DMA to/from AXI sram if
|
||
|
CONFIG_STM32H7_DMACAPABLE=y When doing TX DMA (e.g. in SPI driver in
|
||
|
simplex-tx mode), it should not be necessary to align the data
|
||
|
buffers to the cache line.
|
||
|
- PR-1103 STM32H7: Resolve clocking and pin configurations bugs that
|
||
|
could cause SDMMC and ETH to fail in some configurations
|
||
|
- PR-1104 STM32H7: Use UUID for Ethernet MAC. This is inline with the
|
||
|
behaviour of STM32F7
|
||
|
- PR-1110 STM32H7: Use FDCANSEL to determin FDCAN clock source if
|
||
|
possible - PR-1165 STM32H7: SPI transaction appears to be completed
|
||
|
before the data has actually been flushed
|
||
|
TX DMA completes before the data has been actually sent out from the
|
||
|
SPI fifo. This is expected, but the exchange should actually wait for
|
||
|
spi tx to finish instead of dma to the fifo to finish. This replaces
|
||
|
the dma completion event with the SPI TXC event for detecting end of
|
||
|
transmission.
|
||
|
|
||
|
- PR-1203 PR-1204 STM32H7: Enable support for BDMA and enable it for
|
||
|
SPI6
|
||
|
- PR-905 x86_64: Resolve linking issue when building with gcc 7 and 9.
|
||
|
- PR-904 x86_64: Resolve compiler aliasing warnings and RNG
|
||
|
pointer cast bug - PR-944 x86_64: Change entrypoint to standard
|
||
|
location 1M
|
||
|
- PR-971 x86_64: Fix bug in rng implementation using intrinsics
|
||
|
- PR-973 x86_64: Fix crash on boot when XSAVE and SSE/AVX is enabled
|
||
|
- PR-974 x86_64: Add support booting NuttX as a Jailhouse Cell
|
||
|
- PR-919 sim: Add host mmap and perror to allow use of LIBC_MODLIB
|
||
|
and BINFMT_LOADABLE
|
||
|
- PR-1198 sim: Use correct errno sign with hostfs interface
|
||
|
- PR-932 z16: Updated toolchain to ZDS-II 5.2.2
|
||
|
- PR-970 K210: Add PLL support
|
||
|
- PR-988 K210: Resolve occasional lock in early boot caused by waiting
|
||
|
forserial driver to initialize
|
||
|
- PR-1205 K210: Add basic GPIOHS support - PR-1112 tiva: Add up_idle
|
||
|
support - PR-1116 NRF52832: Work around chip eratta for SPI Master 1
|
||
|
Byte transfer anomaly - PR-1130 imxrt: Resolve WFI issue by setting
|
||
|
the low power mode to remain in run mode
|
||
|
- PR-1197 cxd56: Fix locking issue in Spresense audio driver causes by
|
||
|
using semaphore in DMA buffer handling code
|
||
|
- PR-1221 Add INTx_C macro defintion
|
||
|
|
||
|
* Driver Support:
|
||
|
* Bug Fixes:
|
||
|
- PR-1206 PR-1207 PR-1210 ioctl function should retun ENOTTY when the
|
||
|
command is not recognized.
|
||
|
|
||
|
* New Driver Support:
|
||
|
- PR-795 PR-1001 Initial NuttX audio driver supporting the Spresense
|
||
|
CXD56
|
||
|
- PR-975 Support for HDC1008 temperature and humidity sensor
|
||
|
- PR-1201 Support for the CS4344 stereo audio DAC
|
||
|
- PR-1145 Support for the FTDI FT232R USB to Serial converter
|
||
|
- PR-1052 gs2200m: Add max payload size to prevent crashing when
|
||
|
sending large packets
|
||
|
- PR-1090 gs2200m: Fix possible packet queue count overflow seen during
|
||
|
streaming - PR-1127 gs2200m: Resolve possible buffer overrun in packet
|
||
|
parsing - PR-1167 pty: Return correct number of bytes when
|
||
|
CONFIG_SERIAL_TERMIOS and OPOST|ONLCR are enabled
|
||
|
|
||
|
* Drivers With Significant Improvements:
|
||
|
- PR-887 PR-888 rptun: Add control for independent control of rx and tx
|
||
|
buffer size
|
||
|
- PR-917 gs2200m: Receive performance improvement for TCP/UDP
|
||
|
- PR-1032 gs2200m: Add SPI-DMA support to spresense
|
||
|
- PR-1046 gs2200m: Add getsockname() support
|
||
|
- PR-1094 PR-1163 gs2200m: Add flow control support to prevent memory
|
||
|
starvation in changing network environments
|
||
|
- PR-1101 gs2200m: Add WPA2-PSK AP mode support, this is now the default
|
||
|
instead of WEP
|
||
|
- PR-1115 SPI slave: Improve interface
|
||
|
Enable enqueue and receive full buffers of data with single call, to
|
||
|
avoid call overhead when sending / receiving large amounts of data.
|
||
|
Enable the slave device to leave received data in the controller
|
||
|
receive buffers and retrieve it from there by polling
|
||
|
- PR-1196 Audio: Add support for using ap_buffer_info without
|
||
|
CONFIG_AUDIO_DRIVER_SPECIFIC_BUFFERS and return ENOTTY if provided ioctl
|
||
|
is not supported
|
||
|
- PR-1222 audio/cxd56: Add audio buffering feature.
|
||
|
|
||
|
* Board Support:
|
||
|
* Significant Improvements:
|
||
|
|
||
|
- PR-1200 The boards_button_initialize and boards_userled_initialize
|
||
|
functions now return the number of buttons and leds, thus their
|
||
|
prototypes have changed from:
|
||
|
void board_button_initialize(void)
|
||
|
void board_userled_initialize(void)
|
||
|
|
||
|
to
|
||
|
|
||
|
uint32_t board_button_initialize(void)
|
||
|
uint32_t board_userled_initialize(void).
|
||
|
|
||
|
* New Board Support:
|
||
|
- PR-1051 ST Micro B-G474E-DPOW1 Discovery Kit
|
||
|
Initial support for the ST Micro B-G474E-DPOW1 Discovery Kit with
|
||
|
STM32G474RE MCU. Currently there is basic support for booting NuttX to
|
||
|
a functional NSH prompt. Other peripherals on the board are not yet
|
||
|
supported or not tested yet. Contributions to enable other peripherals
|
||
|
are welcome. The NSH prompt can be accessed from a host computer via a
|
||
|
Virtual COM Port over the same Micro-USB Type B connection used for
|
||
|
programming/debugging.
|
||
|
- PR-1211 STM32F411-Minimum board (a.k.a. BlackPill)
|
||
|
Initial support for the BlackPill board which is a low cost STM32F411
|
||
|
board. The current support boots NuttX to a functional NSH prompt.
|
||
|
|
||
|
* Boards With Significant Improvements:
|
||
|
- PR-949 qemu-intel64: Add nsh configuration for testing QEMU
|
||
|
virtualization
|
||
|
- PR-966 qemu-i486: Fix issue where console would not accept input
|
||
|
because of wrong IRQ number
|
||
|
- PR-993 stm32h747i-disco: Add support for FMC SDRAM - PR-1029 maix-bit:
|
||
|
Add knsh configuration for testing Kernel mode under QEMU virtualization
|
||
|
- PR-1056 stm32h747i-disco: Add support for FAT and SD Card via SDMMC
|
||
|
- PR-1070 PR-1086 spresense: Add ftpd/ftpc and nxplayer to wifi and rndis
|
||
|
configurations
|
||
|
- PR-1084 imxrt1060-evk: Add dns client and renew command to netnsh
|
||
|
configuration
|
||
|
- PR-1113 lm3s6965ek: Use proper sysclock for QEMU
|
||
|
configuration
|
||
|
- PR-1229 Add support for the inboard joystick
|
||
|
- PR-1232 Architectural re-organization to the initialization of the
|
||
|
video stream driver to comply with other NuttX drivers
|
||
|
|
||
|
* File System:
|
||
|
* Bug Fixes:
|
||
|
- PR-918 tmpfs: Calling statfs could cause files to be removed
|
||
|
recursively - PR-1142 NFS: Use of uint64_t causes issues with gaps in
|
||
|
data since it must be on a 8 byte boundary
|
||
|
- PR-1143 Report correct stats for proxied block and MTD drivers
|
||
|
|
||
|
* Significant Improvements:
|
||
|
- PR-793 Allow use of genromfs to geneate ROMFS
|
||
|
- PR-851 Upgrade littlefs to v2.2.1
|
||
|
- PR-1154 FATFS: Do not rewrite the root directory if it has not been
|
||
|
changed.
|
||
|
- PR-1120 PR-1118 Fill in file size for mtd and block inode
|
||
|
|
||
|
* Networking:
|
||
|
- PR-807 Netlink: Broadcast link status changes to userspace via
|
||
|
RTNLGRP_LINK
|
||
|
- PR-892 Netdb: Multiple DNS Servers
|
||
|
Adds capability to add multiple nameservers on run-time even when not
|
||
|
using resolv.conf and reset the list of nameservers back to default
|
||
|
setting (no nameserver at all or single predefined nameserver in Kconfig).
|
||
|
This is useful for applications that change their cellular network
|
||
|
frequently.
|
||
|
- PR-1015 tcp/conn: Request ARP before 3-way handshake
|
||
|
|
||
|
* Applications:
|
||
|
* Improvements:
|
||
|
- PR-185 PR-828 nshlib
|
||
|
Add the source command. Avoid use of sh where it is not needed since
|
||
|
it pollutes the parent environment including the working directory and
|
||
|
variables.
|
||
|
|
||
|
- PR-236 littlevgl: Add additional config mappings to the library
|
||
|
- PR-264 nxplayer: Add max host and filename for http url
|
||
|
- PR-260 nshlib: Add wget buffer size control with
|
||
|
CONFIG_NSH_WGET_BUFF_SIZE
|
||
|
- PR-243 dhcpd: Add ability for daemon to be cancelled
|
||
|
- PR-238 Remove use the set_errno this is now properly handled by the
|
||
|
libc and OS
|
||
|
- PR-233 hdc1008: Add example application for this driver
|
||
|
|
||
|
* Bug Fixes:
|
||
|
- PR-282 netlib: Fix pathlen computation for netlib_parseurl and
|
||
|
netlib_parsehttpurl
|
||
|
- PR-281 webclient: Check return value of netlib_parseurl correctly
|
||
|
- PR-278 webclient: Handle http/https redirection correctly
|
||
|
- PR-277 webclient: Limit the number of http redirects
|
||
|
- PR-198 webclient: Use getaddrinfo() to get IPv4 address on
|
||
|
dual stack systems
|
||
|
- PR-268 ftpd: Fix EPSV mode for IPv4
|
||
|
- PR-258 nsh: Always try FILE_APPS even if the command is builtin,
|
||
|
this is a regression introduced in 9.0.0
|
||
|
- PR-257 gs2200m: Handle packets over 1500 Bytes, previously would
|
||
|
overflow buffer
|
||
|
- PR-221 gs2200m: Server sockets were not properly being released by
|
||
|
the daemon when close was called
|
||
|
- PR-248 dhcpd: Correct option header check length
|
||
|
- PR-176 cu: Handle NULL character correctly
|
||
|
- PR-287 PR-290 examples: Update nxflat and thttpd Makefile's to fix
|
||
|
a build breakage.
|
||
|
|
||
|
* Compatibility Concerns -- Changes to Build System:
|
||
|
|
||
|
If you are building NuttX for a custom board, you may need to make
|
||
|
some of the following changes in build-related files for your board:
|
||
|
|
||
|
* Rename EXTRADEFINES to EXTRAFLAGS
|
||
|
|
||
|
In your custom board's scripts/Make.defs file, rename EXTRADEFINES to
|
||
|
EXTRAFLAGS.
|
||
|
|
||
|
For example, these lines:
|
||
|
|
||
|
```
|
||
|
CFLAGS = $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) -pipe
|
||
|
...
|
||
|
CXXFLAGS = $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) -pipe
|
||
|
...
|
||
|
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
|
||
|
```
|
||
|
|
||
|
would change as follows:
|
||
|
|
||
|
```
|
||
|
CFLAGS = $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
|
||
|
...
|
||
|
CXXFLAGS = $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
|
||
|
...
|
||
|
CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
|
||
|
```
|
||
|
|
||
|
See git commit # 459ad9937377a42785692098ff0d73baaa9551e6 in the main
|
||
|
NuttX repository.
|
||
|
|
||
|
If you forget to do this, memory allocations on the heap probably won't
|
||
|
work and your user tasks won't start.
|
||
|
|
||
|
To see why, tools/Config.mk assigns a value to KDEFINE such that the
|
||
|
preprocessor symbol __KERNEL__ will be defined when certain source
|
||
|
files are compiled. KDEFINE is passed to nested invocations of 'make'
|
||
|
as EXTRAFLAGS. If your board's scripts/Make.defs still attempts to use
|
||
|
EXTRADEFINES, the preprocessor symbol __KERNEL__ will not be defined in
|
||
|
some of the places that it should be. Suppose you're building a FLAT
|
||
|
build. In this case, include/nuttx/mm/mm.h will not define
|
||
|
MM_KERNEL_USRHEAP_INIT like it should, which will cause nx_start.c not
|
||
|
to call up_allocate_heap() at startup. Therefore, any attempt to
|
||
|
allocate memory on the heap will fail.
|
||
|
|
||
|
* Rename src/Makefile to src/Make.defs and Modify
|
||
|
|
||
|
This item pertains only to custom boards that are developed in- tree,
|
||
|
meaning under the NuttX boards/ subdirectory. Out-of-tree boards are
|
||
|
not affected.
|
||
|
|
||
|
If your custom board directory is in-tree and in a board family that
|
||
|
uses a 'boards/ARCH/FAMILY/common' directory (such as
|
||
|
boards/arm/stm32/common, boards/arm/cxd56xx/common, etc), then you'll
|
||
|
need to make two minor changes to your custom board's src/Makefile:
|
||
|
|
||
|
(1) Rename it from src/Makefile to src/Make.defs, and
|
||
|
|
||
|
(2) Near the end of that file, replace this line, which usually
|
||
|
appears at the end:
|
||
|
|
||
|
```
|
||
|
include $(TOPDIR)/boards/Board.mk
|
||
|
```
|
||
|
|
||
|
with these three lines:
|
||
|
|
||
|
```
|
||
|
DEPPATH += --dep-path board
|
||
|
VPATH += :board
|
||
|
CFLAGS += $(shell $(INCDIR) $(INCDIROPT) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)board)
|
||
|
```
|
||
|
|
||
|
See git commit # 6ca46520df38854bf660f9be54957cceede39ded in the main
|
||
|
NuttX repository.
|
||
|
|
||
|
If you forget to do this, 'make' will report an error, "no rule to make
|
||
|
libboard.a," and the build will fail.
|
||
|
|
||
|
* Rename WINTOOL to CONFIG_CYGWIN_WINTOOL
|
||
|
|
||
|
In your custom board's scripts/Make.defs file, rename any instances of
|
||
|
WINTOOL to CONFIG_CYGWIN_WINTOOL.
|
||
|
|
||
|
For example, change this line:
|
||
|
|
||
|
```
|
||
|
ifeq ($(WINTOOL),y)
|
||
|
```
|
||
|
|
||
|
to this:
|
||
|
|
||
|
```
|
||
|
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
|
||
|
```
|
||
|
|
||
|
See git commit # bd656888f26c92e8832f0e76b395a5ece7704530 in the main
|
||
|
NuttX repository.
|
||
|
|
||
|
* Remove INCDIROPT
|
||
|
|
||
|
In your custom board's src/Make.defs file, remove INCDIROPT from CFLAGS.
|
||
|
|
||
|
For example, change this line:
|
||
|
|
||
|
```
|
||
|
CFLAGS += $(shell $(INCDIR) $(INCDIROPT) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)board)
|
||
|
```
|
||
|
|
||
|
to this:
|
||
|
|
||
|
```
|
||
|
CFLAGS += $(shell $(INCDIR) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)board)
|
||
|
```
|
||
|
|
||
|
This option, which resolves to -w when CONFIG_CYGWIN_WINTOOL is
|
||
|
configured, is now appended to INCDIR in tools/Config.mk.
|
||
|
|
||
|
See git commit # 5eae32577e5d5226e5d3027c169eeb369f83f77d in the main
|
||
|
NuttX repository.
|
||
|
|
||
|
* Remove Unnecessary Variables
|
||
|
|
||
|
In your custom board's scripts/Make.defs file, It is no longer
|
||
|
necessary to define the following variables unless your build requires
|
||
|
that you assign special values to them:
|
||
|
|
||
|
- DIRLINK
|
||
|
- DIRUNLINK
|
||
|
- MKDEP
|
||
|
- ASMEXT
|
||
|
- OBJEXT
|
||
|
- LIBEXT
|
||
|
- EXEEXT
|
||
|
|
||
|
These variables have been refactored into tools/Config.mk.
|
||
|
|
||
|
See these git commits in the main NuttX repository:
|
||
|
9ec9431706fd0eb7c4c4410d84dafff68ff31366 (DIRLINK and DIRUNLINK),
|
||
|
8b42ee421a41214093c0238e479d73a1099b0e82 (MKDEP), and
|
||
|
567962bd6263bf8809fb63c739f6ec668c69c416 (ASMEXT, OBJEXT, LIBEXT, EXEEXT)
|
||
|
|
||
|
* Change ${TOPDIR} to $(TOPDIR)
|
||
|
|
||
|
In your custom board's scripts/Make.defs file, it is recommended to
|
||
|
change ${TOPDIR} to $(TOPDIR) for consistency (change curly braces to
|
||
|
parenthesis).
|
||
|
|
||
|
See git commit # faf3c0254bb63af89f9eb59beefacb4cba26dd9 in the main
|
||
|
NuttX repository.
|
||
|
|
||
|
* Remove Workaround For Missing $(TOPDIR)/Make.defs
|
||
|
|
||
|
In src/Make.defs or src/Makefile for your custom board or custom apps,
|
||
|
the workaround for missing $(TOPDIR)/.config and/or
|
||
|
$(TOPDIR)/Make.defs is no longer needed. To remove the workaround,
|
||
|
delete the minus sign in front of include .config. This is now handled
|
||
|
in the main Makefile and, if those files are missing, will print an
|
||
|
error message with hint to run tools/configure.sh <target>.
|
||
|
|
||
|
Change this line, located near the top of the file:
|
||
|
|
||
|
```
|
||
|
-include $(TOPDIR)/Make.defs
|
||
|
```
|
||
|
|
||
|
to this:
|
||
|
|
||
|
```
|
||
|
include $(TOPDIR)/Make.defs
|
||
|
```
|
||
|
|
||
|
See git commit # 1a95cce1a3c3ed8b04d1d86b7bd744352cca45a2 in the main
|
||
|
NuttX repository, and git commit
|
||
|
# ead498a7883a654b1d542da94a5fab3ce163361e in the apps repository.
|
||
|
|
||
|
* Simplify ARCHINCLUDES and ARCHXXINCLUDES
|
||
|
|
||
|
In your custom board's scripts/Make.defs, ARCHINCLUDES and
|
||
|
ARCHXXINCLUDES can be defined without maintaining two different
|
||
|
versions conditioned upon CONFIG_CYGWIN_WINTOOL (renamed from WINTOOL).
|
||
|
Replace syntax similar to the following:
|
||
|
|
||
|
```
|
||
|
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
|
||
|
# Windows-native toolchains
|
||
|
ARCHINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)$(DELIM)include}"
|
||
|
ARCHXXINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)$(DELIM)include}" -isystem "${shell cygpath -w $(TOPDIR)$(DELIM)include$(DELIM)cxx}"
|
||
|
else
|
||
|
# Linux/Cygwin-native toolchain
|
||
|
ARCHINCLUDES = -I. -isystem $(TOPDIR)$(DELIM)include
|
||
|
ARCHXXINCLUDES = -I. -isystem $(TOPDIR)$(DELIM)include -isystem $(TOPDIR)$(DELIM)include$(DELIM)cxx
|
||
|
endif
|
||
|
```
|
||
|
|
||
|
with syntax similar to:
|
||
|
|
||
|
```
|
||
|
ARCHINCLUDES += ${shell $(INCDIR) -s "$(CC)" $(TOPDIR)$(DELIM)include}
|
||
|
ARCHXXINCLUDES += ${shell $(INCDIR) -s "$(CC)" $(TOPDIR)$(DELIM)include}
|
||
|
ARCHXXINCLUDES += ${shell $(INCDIR) -s "$(CC)" $(TOPDIR)$(DELIM)include$(DELIM)cxx}
|
||
|
INCDIR is defined in tools/Config.mk and resolves to a shell script or batch file that constructs the appropriate command line argument string to specify include directories for your compiler.
|
||
|
```
|
||
|
|
||
|
See git commit # 7e5b0f81e93c7e879ce8434d57e8bf4e2319c1c0 in the main
|
||
|
NuttX repository.
|
||
|
|
||
|
* Simplify Board Directory Handling With BOARD_DIR
|
||
|
|
||
|
In your custom board's Make.defs or Makefile, when setting up build
|
||
|
variables containing paths inside your board directory, a new variable
|
||
|
BOARD_DIR has been introduced that simplifies the syntax:
|
||
|
|
||
|
Replace syntax like this:
|
||
|
|
||
|
```
|
||
|
$(TOPDIR)$(DELIM)boards$(DELIM)$(CONFIG_ARCH)$(DELIM)$(CONFIG_ARCH_CHIP)$(DELIM)$(CONFIG_ARCH_BOARD)
|
||
|
```
|
||
|
|
||
|
with this variable:
|
||
|
|
||
|
```
|
||
|
$(BOARD_DIR)
|
||
|
```
|
||
|
|
||
|
For example, change this:
|
||
|
|
||
|
```
|
||
|
ARCHSCRIPT = -T$(TOPDIR)$(DELIM)boards$(DELIM)$(CONFIG_ARCH)$(DELIM)$(CONFIG_ARCH_CHIP)$(DELIM)$(CONFIG_ARCH_BOARD)$(DELIM)scripts$(DELIM)$(LDSCRIPT)
|
||
|
```
|
||
|
|
||
|
to this much simpler syntax:
|
||
|
|
||
|
```
|
||
|
ARCHSCRIPT = -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)
|
||
|
```
|
||
|
|
||
|
You may find the old syntax being used for variables like ARCHSCRIPT,
|
||
|
LDELFFLAGS, LINKCMDTEMPLATE, SCRIPTDIR, USER_LDSCRIPT, or others.
|
||
|
|
||
|
BOARD_DIR is defined in tools/Config.mk.
|
||
|
|
||
|
See git commit # e83c1400b65c65cbdf59c5abcf2ae368f540faef in the main
|
||
|
NuttX repository.
|