1160 lines
54 KiB
Groff
1160 lines
54 KiB
Groff
|
NuttX-8.1
|
||
|
---------
|
||
|
|
||
|
The 132nd release of NuttX, Version 8.1, was made on September 14, 2019,
|
||
|
and is available for download from the Bitbucket.org website. Note
|
||
|
that release consists of two tarballs: nuttx-8.1.tar.gz and
|
||
|
apps-8.1.tar.gz. These are available from:
|
||
|
|
||
|
https://bitbucket.org/nuttx/nuttx/downloads
|
||
|
https://bitbucket.org/nuttx/apps/downloads
|
||
|
|
||
|
Both may be needed (see the top-level nuttx/README.txt file for build
|
||
|
information).
|
||
|
|
||
|
The major release version number is only incremented when there is a major
|
||
|
change to the OS that makes it more-or-less incompatible with preceding
|
||
|
versions. This release bumps the major version number from 7 to 8 due
|
||
|
primarily to a major reorganization in the what was the configs/ directory
|
||
|
in nuttx-7.31. That directory has been renamed boards/ and now has a
|
||
|
directory structure that mirrors the organization of the arch/ directory
|
||
|
for the most part:
|
||
|
|
||
|
board/ - Holds all board-related information
|
||
|
board/<arch> - Holds board-related information for all boards that use
|
||
|
the same CPU architecture. For example, all ARM-based boards will be
|
||
|
found under board/arm
|
||
|
board/<arch>/<chip> - Holds board-related information for all boards
|
||
|
that use the same MCU chip family. For example, all STM32-based
|
||
|
boards will be found under board/arm/stm32
|
||
|
board/<arch>/<chip>/<board> - Holds board-related information for a
|
||
|
specific board. This is analogous to the configs/<board> directory in
|
||
|
nuttx-7.31. So, for example, the STM32F4-Discovery board support that
|
||
|
was at configs/stm32f4disovery can now be found under
|
||
|
boards/arm/stm32/stm32f4discovery.
|
||
|
boards/<arch>/<chip>/<board>/<configs> - All configurations for a
|
||
|
specific board can now be found together in this configs/
|
||
|
subdirectory. So, continuing the example, the STM32F4-Discovery NSH
|
||
|
configuration can now be found at
|
||
|
boards/arm/stm32/stm32f4discovery/configs/nsh.
|
||
|
|
||
|
In additional, common MCU logic can be found at board/<arch>/<chip>/common
|
||
|
and MCU common drivers can be found at board/<arch>/<chip>/common. Related
|
||
|
changes include changes to tools/, comments, and documentation that depend
|
||
|
on the board directory structure.
|
||
|
|
||
|
This re-organization is the work of Alin Jerpelea. Not only did Alin do
|
||
|
this major directory re-organization, but he ran the code standard
|
||
|
compliance tool and corrected every .c and .h file under boards/ so that
|
||
|
they all correctly follow the NuttX coding style. These changes were very
|
||
|
extensive and, hence, will not be addressed individually in the ReleaseNotes.
|
||
|
|
||
|
You have to give Alin credit for his effort to take on really big jobs and
|
||
|
stick with it until it is finished. Kudos!
|
||
|
|
||
|
A more constrained re-organization of the drivers/ directory was also
|
||
|
contributed by Augusto Fraga Giachero. Augusto reorganized some driver
|
||
|
directories to make better functional associations and also to make space
|
||
|
for a new set of RF-related drivers.
|
||
|
|
||
|
Additional new features and extended functionality:
|
||
|
---------------------------------------------------
|
||
|
|
||
|
* Core OS:
|
||
|
|
||
|
- POSIX Message Queues: Add a test to verify that message queue is
|
||
|
closed by the same task group that opened it. If not, then list
|
||
|
corruption would result. This test is only performed if
|
||
|
CONFIG_DEBUG_FEATURES is enabled since it should not normally be an
|
||
|
issue: It would be a strange programming practice to open a
|
||
|
message queue in open task group, then close it in another. From
|
||
|
???.
|
||
|
- Signal Notifications: Add configuration option to select either the
|
||
|
high-priority or low-priority work queue for SIG_EVTHREA
|
||
|
notifications. From ligd.
|
||
|
- System Calls: In order to support built-in in function in protected
|
||
|
mode, a task_spawn() system call must be supported. task_spawn()
|
||
|
and posix_spawn() are NuttX OS interfaces. In PROTECTED and KERNEL
|
||
|
build modes, then can be reached from applications only via a system
|
||
|
call. Unfortunately this is overly complex because there is a (soft)
|
||
|
limit of 6 parameters in a system call; task_spawn has seven
|
||
|
parameters. This is a soft limit but still difficult to extend
|
||
|
because it involves assembly language changes to numerous
|
||
|
architectures. Better to get more creative. Rather than extend the
|
||
|
maximum number of parameters across all architectures, I opted
|
||
|
instead to marshal the seven parameters into a structure and pass
|
||
|
only a single parameter: A pointer to the structure containing the
|
||
|
seven marshaled parameters. From Gregory Nutt.
|
||
|
- /etc/passwd and /etc/group: Improve the format of the /etc/passwd
|
||
|
file as used in the sim:nsh configuration. It is now a little
|
||
|
more similar to other systems and includes user and group IDs. Add
|
||
|
also an /etc/group file to support future testing. From Gregory
|
||
|
Nutt.
|
||
|
- User/Group IDs: Implement 'real' setuid, getuid, setgid, and getgid
|
||
|
interfaces is so configured (otherwise fall back to stubs that
|
||
|
support only the 'root' user ID and group. Once set, these IDs will
|
||
|
be inherited by all child task groups. From Gregory Nutt.
|
||
|
- Debug Output: Add debug macros for contactless. The various
|
||
|
contactless device drivers currently define device specific debug
|
||
|
macros within their local header files. This patch adds generic
|
||
|
ctls[info|warn|err] macros for the overall contactless subsystem to
|
||
|
be used in future drivers. Ported the existing contactless device
|
||
|
drivers to use these generic logging macros and fixed some logging
|
||
|
bugs along the way. From Michael Jung.
|
||
|
- IOB instrumentation. Introduces producer/consumer id to every IOB
|
||
|
call. This is so that the calls can be instrumented to monitor the
|
||
|
IOB resources and to collect usage statistics. From Anthony
|
||
|
Merlino.
|
||
|
- IOB ProcFS: Adding ProcFS support at /proc/iobinfo to show the data
|
||
|
collected from the IOB instrumentation. From Anthony Merlino.
|
||
|
- Versioning: Report GIT information via ProcFS. GIT info reported:
|
||
|
branch, version, GIT hash, hostname, user, build date. Integrates
|
||
|
into existing .version and ProcFS. From David Alessio.
|
||
|
|
||
|
* File System/Block and MTD Drivers:
|
||
|
|
||
|
- BinFS: The BinFS file system uses the same built-in library and
|
||
|
built-in arrays as does NSH. The built-in arrays are simple name-
|
||
|
value pairs that map built-in function names with the user-space
|
||
|
entry point. In the FLAT build, the built-in arrays are available
|
||
|
everywhere via the backdoor left open by the FLAT address space.
|
||
|
In the PROTECTED build, however, the kernel must maintain its own
|
||
|
reference to the user-space built-in array. This commit adds those
|
||
|
kernel globals and a new boardctl(BOARDIOC_BUILTINS) that can be
|
||
|
used by applications to the provide the built-in list reference to
|
||
|
the kernel. From Gregory Nutt.
|
||
|
- MMC/SD: Added support for MMC (eMMC) bigger than 2 GB (Tested with
|
||
|
IMXRT1050EVKB and samsung eMMC 16GB).
|
||
|
- AT24CSxx: Register a character driver for UUID of AT24CSxx chips.
|
||
|
Allows the UUID to read as a file or displayed from an nsh prompt with:
|
||
|
nsh> hexdump /dev/eeprom.uuid From David Alessio.
|
||
|
- Macronix FLASH: Add support for 4-byte addressing on >128Mb
|
||
|
Macronix flash parts From jjlange.
|
||
|
- MX25Rxx: Add support for 512B sectors. From Simon Piriou.
|
||
|
- SST26: Accept the 16MBit Flash when reading the JEDEC-ID at
|
||
|
initialization time. From Ouss4.
|
||
|
|
||
|
* Network/Network Drivers:
|
||
|
|
||
|
- IPv4 Options: Now handles reception of IPv4 packets with larger
|
||
|
IPv4 headers containing options. From Gregory Nutt.
|
||
|
- Sockets: Re-order the content of all address-family socket
|
||
|
'connection' structures so that they begin with a common prologue.
|
||
|
This permits better use of logic for different address family
|
||
|
types. From Gregory Nutt.
|
||
|
- TCP: Make RTO and WAIT_TIME configurable. This fix is not really
|
||
|
correct: TCP RTO really should be calculated dynamically for each
|
||
|
TCP connection: http://sgros.blogspot.com/2012/02/calculating-tcp-rto.html.
|
||
|
From zhangyuan7.
|
||
|
- IP Forwarding: Check if interface is up early on when forwarding to
|
||
|
avoid extra work. As noticed in a previous wireless commit, when
|
||
|
forwarding is enabled and a packet comes in, the packet is attempted
|
||
|
to be sent on each other netdev without regard for whether it is in
|
||
|
the UP state. Of course this is eventually caught, but it can be
|
||
|
caught earlier to avoid unnecessary work, especially in the 6LoWPAN
|
||
|
case where a useless packet conversion will occur. From Anthony
|
||
|
Merlino.
|
||
|
- RNDIS: Expose option to change the number of write requests that
|
||
|
can be in flight. From Anthony Merlino.
|
||
|
- GS2200M: Add UDP support. From Masayuki Ishakawa
|
||
|
- GS2200M: Implement GS2200M_IOC_IFREQ IOCTL command. From Masayuki
|
||
|
Ishikawa.
|
||
|
- GS2200M: Enable NuttX's DHCP client instead of GS2200M's DHCP
|
||
|
client. From Masayuki Ishikawa.
|
||
|
- GS2200M: GS2200M now supports SIOCGIFHWADDR From Masayuki
|
||
|
Ishikawa.
|
||
|
|
||
|
* Wireless/Wireless Drivers:
|
||
|
|
||
|
- IEEE802.15.4 Network Driver: Allow 64-bit prefix to be configurable
|
||
|
when auto-configuring the IPv6 address during bring-up. Previously,
|
||
|
only the link-local prefix fe80::/64 was used. Also, put the
|
||
|
network in the DOWN state at the end of initialization. From
|
||
|
Anthony Merlino.
|
||
|
- IEEE 802.15.4 MAC: Adds support for energy detect. Adds support
|
||
|
for energy detect by introducing a new radio call/callback, as the
|
||
|
PHY layer is required to perform the energy detect. From Anthony
|
||
|
Merlino.
|
||
|
- IEEE 802.15.4 MAC: Adds support for getting/setting
|
||
|
macMaxFrameRetries via IOCTL. Add get support for rxonidle
|
||
|
attribute From Anthony Merlino.
|
||
|
- IEEE 802.15.4 MAC: Move the global iobuffer into the macnet struct
|
||
|
so that more than one macnet device can exist. From Anthony
|
||
|
Merlino.
|
||
|
- IEEE 802.15.4 MAC: Defer handling of extracting association
|
||
|
response to LPWORK queue. From Anthony Merlino.
|
||
|
- IEEE 802.15.4 Radios: Support dynamic FCS length. Adds
|
||
|
IEEE802154_ATTR_PHY_FCSLEN. This change introduces
|
||
|
IEEE802154_ATTR_PHY_FCSLEN which the radio layer can support to
|
||
|
set/get the FCS length that's added to the end of the frame. One
|
||
|
use case, in promiscuous mode, is to add back in the FCS of the
|
||
|
received frame by increasing the iob->io_len by the FCS length.
|
||
|
From Anthony Merlino.
|
||
|
- Xbee: Support "WR" AT command for writing parameters to non-
|
||
|
volatile memory. From Anthony Merlino.
|
||
|
- Xbee: Add configuration option for setting the default prefix
|
||
|
to use when bringing up the network and setting the IP address.
|
||
|
From Anthony Merlino.
|
||
|
|
||
|
* Other Common Device Drivers:
|
||
|
|
||
|
- RTC: If the RTC time is successfully set, then update the current
|
||
|
system time to match. From ligd.
|
||
|
- ADT7320: Add support for the ADT7320 temperature sensor. From
|
||
|
Augusto Fraga Giachero.
|
||
|
- DAC7554: Add support to the DAC7554 digital-to-analog converter.
|
||
|
From Augusto Fraga Giachero.
|
||
|
- DAT-31R5-SP+: Add support to the DAT-31R5-SP+ digital attenuator.
|
||
|
Creates a the new device driver directory drivers/rf/ to support
|
||
|
drivers related to RF peripherals. It also adds support for the
|
||
|
DAT-31R5-SP+ digital attenuator. From Augusto Fraga Giachero.
|
||
|
- ISL29023: Add basic driver of ISL29023 ambient light sensor. The
|
||
|
basic driver can set operational mode, range, and resolution. It
|
||
|
can also read lux value in continuous mode. Interrupt and the alarm
|
||
|
is not implemented. From Matous Pokorny.
|
||
|
- SHT3x: Add Sensirion SHT3x driver. From Markus Bernet.
|
||
|
|
||
|
* Simulator:
|
||
|
|
||
|
- Simulator Build: Even though the simulation has no "chips", it
|
||
|
needs to have CONFIG_ARCH_CHIP and chip sub-directories. Otherwise,
|
||
|
we would have to treat it as a special case in the build system
|
||
|
after the changes to the boards/ directory. From Gregory Nutt.
|
||
|
|
||
|
* Microchip PIC32MZ:
|
||
|
|
||
|
- PIC32MZ. Make the PLL input clock configurable. From Ouss4.
|
||
|
|
||
|
* ARMv7-M
|
||
|
|
||
|
- Add ARMv7-M setjmp/longjump functions. From David S. Alessio.
|
||
|
|
||
|
* NXP i.MXRT:
|
||
|
|
||
|
- i.MXRT Clocking: Enable TRACE clocks if the divider has been
|
||
|
defined in the board's board.h file. From Dave Marples.
|
||
|
|
||
|
* NXP i.MXRT Drivers:
|
||
|
|
||
|
- i.MXRT QEncoder: Adds quadrature encoder driver for IMXRT. From
|
||
|
Nicholas Chin.
|
||
|
- i.MXRT uSDHC: This change completes SDIO support for IMXRT, and
|
||
|
also adds support for WiFi using the AP6212A module based on Simon
|
||
|
Piriou's rather excellent work. The patch should also address
|
||
|
DavidS's concern about width setting for USDHC1 and 2. Testing of
|
||
|
the WiFi is minimal so far but functionality is proven. I'm
|
||
|
specifically not happy that the driver doesn't recover elegantly
|
||
|
from a DMA data checksum failure, but that is an issue that can be
|
||
|
dealt with in due course ... I'm trying to get the rest of the
|
||
|
interfaces fleshed out and the hardware proven so it can go for pre-
|
||
|
production build. I _think_ there's only Bluetooth and USB-device
|
||
|
left to implement now. From Dave Marples.
|
||
|
- i.MXRT uSDHC: IMXRT uSDHC driver cmd line reset logic modified.
|
||
|
From Ivan Ucherdzhiev.
|
||
|
|
||
|
* NXP/Freescale Kinetis Drivers:
|
||
|
|
||
|
- Kinetis Serial: Add possibility to specify pull-up instead of
|
||
|
open drain for serial single-wire mode. From Beat Küng.
|
||
|
|
||
|
* NXP LPC17xx/40xx:
|
||
|
|
||
|
- LPC17xx/40xx Build: Cortex-M system reset is applicable to
|
||
|
LPC17xx/40xx too. From Pavel Pisa.
|
||
|
|
||
|
* NXP LPC17xx/40xx Drivers:
|
||
|
|
||
|
- LPC17xx/40xx Ethernet: Follow the procedure listed in the
|
||
|
LPC176x/5x User Manual when reading from and writing to the PHY's
|
||
|
registers (section 10.11.14). I couldn't see any behavioral change
|
||
|
after this commit, but nonetheless is a good practice to follow the
|
||
|
manufacturer's recommended procedure. From Augusto Fraga Giachero.
|
||
|
|
||
|
* NXP S31K1xx:
|
||
|
|
||
|
- Added architecture support for the NXP S32K1xx family. Basic
|
||
|
support includes the boot up logic, clock configuration, LPUART
|
||
|
console, Systick timer, GPIO controls, and eDMA (unverified).
|
||
|
|
||
|
* NXP S31K1xx Drivers:
|
||
|
|
||
|
- S32K1xx eDMA Leverage eDMA logic from i.MXRT to S32K1XX. Appears
|
||
|
to be the same IP but with fewer channels and features than the
|
||
|
i.MXRT implementation. From Gregory Nutt.
|
||
|
- S32K1xx LPUART: Bring in the LPUART from i.MXRT. It is the same
|
||
|
IP. From Gregory Nutt.
|
||
|
- S32K1xx SysTick: Bring in Cortex-M0+ SysTick and interrupt handling
|
||
|
from samd2l2; bring in Cortex-M4F Systick and interrupt handling
|
||
|
from LPC54xx. From Gregory Nutt.
|
||
|
- S32K1xx GPIO: Bring in GPIO logic from Kinetis. Looks like similar
|
||
|
IP. From Gregory Nutt.
|
||
|
- S32K1xx Ethernet: Unverified port of the i.MXRT Ethernet driver to
|
||
|
the S32K1xx. The i.MXRT uses the same IP. From Gregory Nutt.
|
||
|
- S32K1xx LPSPI and LPI2C: Brings in the LPSPI and LPI2C peripheral
|
||
|
drivers from the i.MXRT which used the identical IP. From Gregory
|
||
|
Nutt.
|
||
|
|
||
|
* NXP S31K1xx Boards:
|
||
|
|
||
|
- S32K118EVB. This commit adds initial board support for the NXP
|
||
|
S32K118EVB development board. Currently supports only a minimal
|
||
|
NSH configuration. From Gregory Nutt.
|
||
|
- S32K118EVB: Implement board support for on-board LEDs and buttons.
|
||
|
This is taken from the Freedom-K66f with has the same LED and
|
||
|
button configuration as the S32K116EVB and uses the same GPIO IP.
|
||
|
LEDs, but not buttons, have have been verified. From Gregory Nutt.
|
||
|
- S32K146EVB: Adds initial board support for the S32K146EVB
|
||
|
development board. Currently supports a NSH configuration with a
|
||
|
richer feature set than the minimal configuration of the S32K118EVB.
|
||
|
From Gregory Nutt.
|
||
|
- S32K146EVB: Add support for execution out of SRAM. This is helpful
|
||
|
for bring-up when you want to avoid putting a lethal image in FLASH.
|
||
|
From Gregory Nutt.
|
||
|
- S32K148EVB: Add support for the NXP S32K148EVB development board.
|
||
|
Very similar to the S32K146EVB but with more on-chip memory and
|
||
|
hardware features.
|
||
|
|
||
|
* Sony CXD56xx
|
||
|
|
||
|
- CXD56xx: Migrate CXD56xx common code to the common/ directory:
|
||
|
Boot code, FLASH code, I2C driver, UID. From Alin Jerpelea.
|
||
|
- CXD56xx: Add SPH. The SPH is used by the ASMP implementation from
|
||
|
the SDK. From Alin Jerpelea.
|
||
|
|
||
|
* Sony CXD56xx Drivers:
|
||
|
|
||
|
- CXD56xx: Add sensors connected to the SCU on Spresense board:
|
||
|
o Avago APDS9930 Proximity and Ambient light Sensor.
|
||
|
o Rohm BH1721FVC Ambient Light Sensor.
|
||
|
o Rohm BH1745NUC Color Sensor.
|
||
|
o Rohm BM1383GLV/BM1383AGLV Pressure Sensor.
|
||
|
o Rohm BM1422GMV/BM1422AGMV Magnetic Sensor.
|
||
|
o Bosch BMI160 Sensor support.
|
||
|
o Bosch BMP280 Barometic Pressure Sensor.
|
||
|
o Kionix KX022/KX122 Acceleration Sensor.
|
||
|
o Murata LT1PA01 Proximity and Ambient light Sensor.
|
||
|
o Rohm RPR0521RS Proximity and Ambient light Sensor.
|
||
|
o BMI160: Add optional I2C address.
|
||
|
From Alin Jerpelea.
|
||
|
- CXD56xx: Add the sensor initialization for CXD56xx boards in the
|
||
|
common board folder:
|
||
|
o APDS9930: typo fix
|
||
|
o cxd56_ak09912 initialization.
|
||
|
o cxd56_bmi160 initialization.
|
||
|
o cxd56_apds9960 initialization.
|
||
|
o cxd56_bh1721fvc initialization.
|
||
|
o cxd56_bh1745nuc initialization.
|
||
|
o cxd56_bm1383glv initialization.
|
||
|
o cxd56_bm1422gmv initialization.
|
||
|
o cxd56_bmi160 initialization.
|
||
|
o cxd56_bmp280 initialization.
|
||
|
o cxd56_kx022 initialization.
|
||
|
o cxd56_lt1pa01 initialization.
|
||
|
o cxd56_rpr0521rs initialization.
|
||
|
o cxd56_sensors initialization.
|
||
|
o Backup Log driver.
|
||
|
o crashlog driver.
|
||
|
o Move gs2200m initialization.
|
||
|
o Move ili9340 initialization.
|
||
|
o Move lpm013m091a initialization.
|
||
|
From Alin Jerpelea.
|
||
|
|
||
|
* Sony CXD56xx Spresense Board:
|
||
|
|
||
|
- Spresense: Enable SmartFS and UDP support From Masayuki Ishikawa.
|
||
|
|
||
|
* STMicro STM32:
|
||
|
|
||
|
- STM32F4 PLLI2S: Add support to enable the I2S Phase Locked Loop on
|
||
|
STM32F427 and STM32F437 MCUs. From Michael Jung.
|
||
|
|
||
|
* STMicro STM32 Drivers:
|
||
|
|
||
|
- STM32 ADC: Add ADC calibration procedure for IP_ADC_V1. Tested on
|
||
|
STM32F100, and it magically increased result accuracy. STM32F103
|
||
|
has the same calibration procedure. I am not sure about others.
|
||
|
From Matous Pokorny.
|
||
|
- STM32 SPI: TI Synchronous Serial Frame Format. The SPI macros on
|
||
|
STM32 MCUs now support the Texas Instruments Synchronous Serial
|
||
|
Frame Format protocol (TI protocol). Defined a new SPIDEV_MODETI
|
||
|
and add support for it in stm32_spi.c. From Michael Jung.
|
||
|
- STM32 UART: Serial add HW HS on UART 4 & 5. From David Sidrane.
|
||
|
- STM32 PWM: Configure multi-channel duty only if channel specified.
|
||
|
This allows you to update duty cycle for a single channel. From
|
||
|
Mateusz Szafoni.
|
||
|
- STM32F7 Ethernet: Add a timeout on MAC reset From David Sidrane.
|
||
|
- STM32F7 FLASH: Exposes stm32_flash_xxx functions. From Anthony
|
||
|
Merlino.
|
||
|
- STM32F7 PWM: Configure multi-channel duty only if channel specified.
|
||
|
This allows you to update duty cycle for a single channel. From
|
||
|
Mateusz Szafoni.
|
||
|
- STM32F7 UART: Serial add HW HS on UART 4 & 5. From David Sidrane.
|
||
|
- STM32H7 ADC: Fix internal channel numbers. From Markus Bernet.
|
||
|
- STM32H7 BBSRAM: Add BBSRAM support. From David Sidrane.
|
||
|
- STM32H7 DTCM: Port DTCM from F7 From David Sidrane.
|
||
|
- STM32H7 I2C: Select ARCH_HAVE_I2CRESET in configuration. From
|
||
|
David Sidrane.
|
||
|
- STM32H7 PWM: Configure multi-channel duty only if channel
|
||
|
specified. This allows you to update duty cycle for a single
|
||
|
channel. From Mateusz Szafoni.
|
||
|
- STM32H7 RCC: Fix RCC register definitions and typos for ADC/UART.
|
||
|
From Markus Bernet.
|
||
|
- STM32H7 RTC: Ported over F7 RTC. From David Sidrane.
|
||
|
- STM32H7 SPI: Allow more clock sources. From David Sidrane.
|
||
|
- STM32H7 UART: Serial add HW HS on UART 4 & 5. From David Sidrane.
|
||
|
- STM32H7 UART: Fix typo in UART8 configuration. From Markus Bernet.
|
||
|
- STM32H7 UID: Ported UID from F7 From David Sidrane.
|
||
|
- STM32L4 PWM: Configure multi-channel duty only if channel specified.
|
||
|
This allows you to update duty cycle for a single channel. From
|
||
|
Mateusz Szafoni.
|
||
|
- STM32L4 UART: Serial add HW HS on UART 4 & 5. From David Sidrane.
|
||
|
|
||
|
* STMicro STM32 Boards:
|
||
|
|
||
|
- B-L475E-IOT01A: Add mx25rxx memory chip and smartfs support in NSH
|
||
|
configuration. From Simon Piriou.
|
||
|
- LX_CPU: Add support for the PIKRON LX_CPU board. From Pavel Pisa.
|
||
|
- Nucleo-F303RE: Add basic NSH configuration. From Mateusz Szafoni.
|
||
|
- Nucleo-F303RE: Enable console on UART2 and set entry point to
|
||
|
nsh_main() in the PWM configuration. From Mateusz Szafoni.
|
||
|
- Nucleo-H743ZI: Add RTC support. From David Sidrane.
|
||
|
- Nucleo-L432KC: Added GPIO drivers for use with /apps/examples/gpio.
|
||
|
From Daniel P. Carvalho.
|
||
|
- Nucleo-L432KC: Added Zero Cross sensor to nucleo-l432kc. From
|
||
|
Daniel P. Carvalho.
|
||
|
|
||
|
* TI Tiva:
|
||
|
|
||
|
- Tiva: Add support for Tiva TM4C123AH6PM. From Nathan Hartman.
|
||
|
- Tiva Configuration: Modify preprocessor logic to support
|
||
|
configurations with no UART. Now similar to logic for other
|
||
|
architectures. From Nathan Hartman.
|
||
|
- Tiva Interrupts: Add handling for IRQs 128 through 159. From Nathan
|
||
|
Hartman.
|
||
|
|
||
|
* TI Tiva Drivers:
|
||
|
|
||
|
- TM4C QEncoder: Reinstate TM4C qencoder driver and expand its
|
||
|
ioctls. Add TIVA_HAVE_QEI0, TIVA_HAVE_QEI1 as applicable to each
|
||
|
ARCH_CHIP_TM4C12*. Rewrite tiva_qe_setup(). Replace tiva_qe_ppr()
|
||
|
with tiva_qe_resetatppr(). Add tiva_qe_resetatmaxpos() and
|
||
|
tiva_qe_resetatindex(). Add missing definitions:
|
||
|
SIGMODE_QUADRATURE, SIGMODE_CLK_AND_DIR, SWAP_NO_SWAP, SWAP_PHA_PHB.
|
||
|
Rename TIVA QEI ioctl QEIOC_PPR to QEIOC_RESETATPPR; add TIVA QEI
|
||
|
ioctl identifiers QEIOC_RESETATMAXPOS, QEIOC_RESETATINDEX. From
|
||
|
Nathan Hartman.
|
||
|
|
||
|
* TI Tiva Boards:
|
||
|
|
||
|
- TM4C1294-Launchpad: Enables /dev/userleds in board bring-up for
|
||
|
tm4c1294-launchpad by calling userled_lower_initialize() in
|
||
|
tm4c_bringup(). From Nathan Hartman.
|
||
|
|
||
|
* TI Tiva Drivers:
|
||
|
|
||
|
- Tiva GPTM timers: Implement 16-bit PWM mode. Add
|
||
|
tiva_pwm16_sel_event() to choose GPTMCTL.TnEVENT value. Implement
|
||
|
tiva_pwm_mode16(). This also involved numerous corrections to the
|
||
|
16-bit timer logic. Add tiva_timer16pwm_setperiodduty() to set
|
||
|
initial period, duty cycle, and enable interrupts if requested in
|
||
|
GPTM peripheral. Interrupts are not enabled in NVIC until
|
||
|
tiva_timer16_start() is called. Add tiva_timer16pwm_setduty() to
|
||
|
update duty cycle at any time. Add new TIMER_FLAG_* configuration
|
||
|
flags to enable configuring the 16-bit PWM feature. Extend type of
|
||
|
"flags" in tiva_timer32config_s and tiva_timer16config_s from 8- to
|
||
|
32-bits to allow more flags. From Nathan Hartman.
|
||
|
|
||
|
* Build System:
|
||
|
|
||
|
- Export Build: Export all variables/files to support architecture
|
||
|
independent build against NSH. From Pavel Pisa.
|
||
|
- Application Export: This change too build tools allows to export
|
||
|
built-in applications registry into temporarily created directory
|
||
|
where export archive content is prepared. If the Makefile in apps/
|
||
|
directory does not define export: target then error is print but
|
||
|
export continues without interruption. It would be more logical to
|
||
|
print warning but there is no way instruct apps make to not print
|
||
|
error. From Pavel Pisa.
|
||
|
- boards/Board.mk: Add support to pass dependency paths. From
|
||
|
Gregory Nutt.
|
||
|
|
||
|
* Libraries/Header Files:
|
||
|
|
||
|
- libs/libc/libc.csv: Add some missing C library functions. From
|
||
|
Pavel Pisa.
|
||
|
- libs/libc/libc.csv: Add ioctl() to fs_ioctl() wrapper for varidic
|
||
|
case. From Pavel Pisa.
|
||
|
- libs/libc/builtin/: Moves shared built-in information out of
|
||
|
binfmt/libbuiltin and into libs/libc/builtin where it can be shared
|
||
|
with applications. This should permit built-in application in the
|
||
|
PROTECTED build where binfmt/libbuiltin was not available in user
|
||
|
space. From Gregory Nutt.
|
||
|
- libs/libc/dirent/: Added alphasort() implementation, scandir()
|
||
|
implementation and DT_* definitions to include/dirent.h. Apparently
|
||
|
those definitions are not required by POSIX, but are part of
|
||
|
4.3BSD and available in glibc as well. From Michael Jung.
|
||
|
- libs/libc/grp/: Added stubbed implementations of getgrgid,
|
||
|
getgrgid_r, getgrnam, getgrnam_r, and initgroups. These functions
|
||
|
are essentially stubs pretending that NuttX supported groups and
|
||
|
that the only configured group in the system was 'root' with gid 0.
|
||
|
The intend is not to provide meaningful new features, but to ease
|
||
|
porting of foreign source code to NuttX. From Michael Jung.
|
||
|
- libs/libc/machine/arm/armv7-m/: Add Cortex M4F machine optimized
|
||
|
fabsf and sqrtf. From David S. Alessio.
|
||
|
- libs/libc/pwd/: Added stubbed implementations. Added stubbed
|
||
|
implementations of getpwuid, getpwuid_r, getpwnam, and getpwnam_r.
|
||
|
These functions are essentially stubs pretending that NuttX
|
||
|
supported users and that the only configured user in the system
|
||
|
was 'root' with uid 0. The intend is not to provide meaningful
|
||
|
new features, but to ease porting of foreign source code to NuttX.
|
||
|
From Michael Jung.
|
||
|
- libs/libc/pwd and libs/libc/grp/: Modify to get user/group data
|
||
|
from /etc/passwd and /etc/group if so configured. From Gregory
|
||
|
Nutt.
|
||
|
- libs/libc/stdio/: Add support for the size_t integer qualifier 'z'
|
||
|
to the printf family. This is kind of tricky due the variety of
|
||
|
sizeof(size_t) on different platforms. From David Sidrane.
|
||
|
- libs/libc/unistd.h: Added stubbed implementations of setuid() and
|
||
|
setgid(). These functions are essentially stubs pretending that
|
||
|
NuttX supported users and groups and that the only configured user
|
||
|
and group in the system were both 'root' with a uid and a gid of 0,
|
||
|
respectively. The intent is not to provide meaningful new features,
|
||
|
but to ease porting of foreign source code to NuttX. From Michael
|
||
|
Jung.
|
||
|
- libs/libc/unistd/: Add getuid() and getgid() stubs to match
|
||
|
MichaelJung's setuid() and setgid(). From Gregory Nutt.
|
||
|
- libc/libc/unistd/: Add stubs for geteuid(), getegid(), seteuid(),
|
||
|
setegid(), setreuid(), and setregid(). NuttX does not currently
|
||
|
support effective user/group IDs, but these stubs will support
|
||
|
linkage of applications that expect these POSIX standard interfaces.
|
||
|
From Gregory Nutt.
|
||
|
|
||
|
* Symbol Tables:
|
||
|
|
||
|
- NuttX provides lists of available syscalls and library functions and
|
||
|
tools to process them. The lists can be used to build symbol table
|
||
|
which allows runtime program loading which can reuse functions
|
||
|
already compiled into NuttX system image. List processing,
|
||
|
compilation and linking to the final system image has been possible
|
||
|
only under manual control until now. Provided changes add option
|
||
|
(CONFIG_EXECFUNCS_GENERATE_SYSTEM_SYMTAB) to build complete list of
|
||
|
available functions and syscalls automatically. The symbolic table
|
||
|
is generated in form libsymtab.a which can be reused by application
|
||
|
or directly pull in when "g_symtab" and "g_nsymbols" variables are
|
||
|
requested by EXECFUNCS configuration. I have tried to follow
|
||
|
mechanisms for library compilation in different kernel protection
|
||
|
modes but tested only flat no-MMU build. The basic assumption is
|
||
|
that this library and libraries providing syscall stubs and C-
|
||
|
library functions are available in user-space context and initial
|
||
|
application (usually NSH) registers the symbol table through IOCTL.
|
||
|
The table can be reused then by another applications in their
|
||
|
address space as kernel allows. Simple for flat or protected mode,
|
||
|
I am not sure if really support in MMU mode. It is highly probable
|
||
|
that I have made some mistake, overlooked something, but the
|
||
|
functionality is optional (should not cause troubles in any mode if
|
||
|
disabled) and main purpose is to lower memory overhead when more
|
||
|
applications are loaded on memory constrained system which usually
|
||
|
use direct kernel calling without protection or address space
|
||
|
separation. If the table should be provided by kernel to
|
||
|
applications then makefiles has to be adjusted. From Pavel Pisa.
|
||
|
|
||
|
* Tools:
|
||
|
|
||
|
- tools/: Change preferred argument of configurations tools to use
|
||
|
':' as the delimiter between <board-name> and <config-name>. This
|
||
|
is to emphasize that this is not a path; it is configuration
|
||
|
specification. The legacy '/' delimiter is still supported but
|
||
|
not recommend and not advertised. Updated configurations
|
||
|
instructions in README.txt files to show ':' delimiter vs '/'
|
||
|
delimiter. Update all configuration-related tools to accept ':'
|
||
|
separator between board and configuration name. From Gregory Nutt.
|
||
|
|
||
|
* apps/ General:
|
||
|
|
||
|
- Makefile: Added support for application-specific export target.
|
||
|
Used by nuttx/tools/mkexport.sh. From Pavel Pisa.
|
||
|
- apps/builtins: Move apps/builtins/builtin_forindex.c to
|
||
|
nuttx/libs/libc/builtin since it is required by kernel logic as
|
||
|
well. Other changes account for movement of builtin.h from
|
||
|
nuttx/include/nuttx/binfmt/built.h to nuttx/include/lib/builtin.h.
|
||
|
From Gregory Nutt.
|
||
|
|
||
|
* Examples/Tests: apps/examples:
|
||
|
|
||
|
- apps/examples/uid: Demo used to verify PASSWD and GROUP interfaces.
|
||
|
From Gregory Nutt.
|
||
|
- apps/examples/webserver/: Initialilze network and run forever only
|
||
|
if not built-in app. Infer from CONFIG_NSH_BUILTIN_APPS if we are a
|
||
|
NSH built-in app or not. If built-in app (CONFIG_NSH_BUILTIN_APPS
|
||
|
defined) then we assume network is initialized prior to webserver
|
||
|
starting and we exit on webserver failure. If running standalone
|
||
|
(CONFIG_NSH_BUILTIN_APPS is undefined) then behavior is unchanged:
|
||
|
webserver initializes network and runs forever. From Nathan Hartman.
|
||
|
|
||
|
* Network Utilities: apps/fsutils:
|
||
|
|
||
|
- apps/fsutils/passwd: Handle the improved the format of the
|
||
|
/etc/passwd file. It is now a little more similar to other systems.
|
||
|
From Gregory Nutt.
|
||
|
|
||
|
* Network Utilities: apps/netutils:
|
||
|
|
||
|
- apps/netutils/dhcpc: Add host name support to DHCP client. From
|
||
|
Masayuki Ishikawa.
|
||
|
|
||
|
* Network Utilities: apps/wireless
|
||
|
|
||
|
- apps/wireless/ieee802154/i8sak: I8sak improvements: (1) Adds
|
||
|
support for getting/setting maxretries and promsicuous mode from
|
||
|
i8sak, (2) Fixes a build warning and handles a few cases where a
|
||
|
fault can occur due to not catching missing arguments. From
|
||
|
Anthony Merlino.
|
||
|
- apps/wireless/ieee802154/i8sak: Allow setting the endpoint PAN ID.
|
||
|
From Anthony Merlino.
|
||
|
- apps/wireless/ieee802154/i8sak: Adds support for energy scan result
|
||
|
printout. From Anthony Merlino.
|
||
|
- apps/wireless/ieee802154/i8shark: Adds support for intentionally
|
||
|
suppressing passing the FCS so that Wireshark doesn't try to
|
||
|
validate it. From Anthony Merlino.
|
||
|
- apps/wireless/ieee802154/libmac: Adds support for getting/setting
|
||
|
the FCS length From Anthony Merlino.
|
||
|
- apps/wireless/gs2200m: Add UDP support to the GS2200M driver. From
|
||
|
Masayuki Ishikawa.
|
||
|
- apps/wireless/gs2200m: Add DHCP client handling in ioctl_request().
|
||
|
From Masayuki Ishikawa.
|
||
|
- apps/wireless/gs2200m: ioctl_request() supports SIOCGIFHWADDR.
|
||
|
From Masayuki Ishikawa.
|
||
|
|
||
|
Bugfixes:
|
||
|
---------
|
||
|
Only the most critical bugfixes are listed here (see the ChangeLog for a
|
||
|
more complete list of bugfixes and for additional, more detailed bugfix
|
||
|
information):
|
||
|
|
||
|
* Core OS:
|
||
|
|
||
|
- Priority Inheritance: Fix a race in telnet with PRIORITY_INHERITANCE
|
||
|
and SCHED_HPWORK. Sometimes causes an assertion to fire incorrectly.
|
||
|
From David S. Alessio.
|
||
|
- Task Groups: Correct some naming. The NuttX task groups have been
|
||
|
using the acronym 'gid' and also the type 'gid_t' for the the task
|
||
|
group ID. That is incorrect. Than naming is reserved for use with
|
||
|
group permissions. So these were all named to grpid and grpid_t so
|
||
|
that it is clearer that these refer to NuttX task group IDs, and not
|
||
|
to group permissions. From Gregory Nutt.
|
||
|
- Task Termination: nxtask_signalparent() in task_exithook.c may
|
||
|
invalidate the group's parent task ID (tg_ppid) too soon. The
|
||
|
tg_ppid field is use only to remember the parent tasks ID so that it
|
||
|
can send the SIGCHLD signal to it. So it must stay valid until
|
||
|
SIGCHLD has been sent. In nxtask_signalparent(), it calls
|
||
|
nxtask_sigchild() to send SIGCHLD to the parent, then invalidates
|
||
|
tg_ppid. That would be okay, except that the SIGCHLD is only sent
|
||
|
when the last member of the group terminates. That is incorrect;
|
||
|
tg_ppid can be invalidated too soon and, as a consequence, SIGCHLD
|
||
|
would never be sent. Noted by Jeongchan Kim in the Google group:
|
||
|
https://groups.google.com/forum/#!topic/nuttx/SXd8fVwVKBk From
|
||
|
Gregory Nutt.
|
||
|
- sched_get_rr_interval(): sched_get_rr_interval() should return
|
||
|
{0,0} if round-robin scheduling is not selected for the task. From
|
||
|
Gregory Nutt.
|
||
|
- SMP Type Collision: The non-standard, non-portable type cpu_set_t
|
||
|
was created specifically to support the NuttX internal, SMP
|
||
|
implementation. Any resemblance to any other cpu_set_t would be
|
||
|
purely coincidental. However it appears that that coincidence has
|
||
|
occurred. cpu_set_t has an equivalent, non-standard, non-portable
|
||
|
type in the GNU C library. Compilation of libgnat expects this
|
||
|
non-standard type to be defined. Who am I to stand in the way of
|
||
|
progress? This commit removes the conditioning on CONFIG_SMP so
|
||
|
that cpu_set_t is typed (as a uint8_t) even if CONFIG_SMP is not
|
||
|
defined. Reference: Bitbucket issue 164. From Gregory Nutt.
|
||
|
- Binary Loader: Change some debug macros from berr() to binfo()
|
||
|
when dumping module data. The report of problems is important
|
||
|
during development but when it enables complete informative output
|
||
|
about load binaries then the important information can be easily
|
||
|
overlooked. The huge output sent to serial terminal slows loading
|
||
|
significantly as well. From Pavel Pisa.
|
||
|
- Power Management: Fix g_pmcount 16-bits overflow when
|
||
|
CONFIG_PM_XXENTER_COUNT set big value. From ligd.
|
||
|
- Timekeeping: Fix cases in time conversion that must be >=
|
||
|
NSEC_PER_SEC, not > NSEC_PER_SEC. From Gregory Nutt.
|
||
|
|
||
|
* File System/Block and MTD Drivers:
|
||
|
|
||
|
- opendir(): opendir() set errno to a negative value in one error
|
||
|
case. From Michael Jung.
|
||
|
- SmartFS: Update smartfs smart_scan() function. From Simon Piriou.
|
||
|
- ProcFS: Add missing LF to cpuload procfs output From David Alessio.
|
||
|
- MMC/SD: Copy/paste error fix in the SDIO-based block driver for
|
||
|
MMC. From Ivan Ucherdzhiev.
|
||
|
- MMC/SD: Correct a misplaced #endif in the SDIO-based driver. From
|
||
|
Gregory Nutt.
|
||
|
|
||
|
* Networking/Network Drivers:
|
||
|
|
||
|
- Ethernet Configuration: Ethernet packet buffer size cannot be
|
||
|
permitted to go below 1294 if IPv6 is selected. From Gregory Nutt.
|
||
|
- TCP RST: Fix outgoing RST packet with wrong ack number. From
|
||
|
biantao.
|
||
|
- TCP Close: Fix TCP close flow; free the connection after all TCP
|
||
|
close process finished. From zhangyuan7.
|
||
|
- UDP Broadcast: Remove net stack dependency from CONFIG_NET_BROADCAST.
|
||
|
This change allows us to use CONFIG_NET_BROADCAST without network
|
||
|
stack (i.e. usrsock application can use broadcast) From Masayuki
|
||
|
Ishikawa.
|
||
|
- UDP: Fixes a UDP send copy-paste error in the new SO_LINGER code:
|
||
|
CONFIG_TCP_NOTIFIER to CONFIG_UDP_NOTIFIER. From Juha Niskanen.
|
||
|
- TCP and UDP: Fix errors in the new implementation of SO_LINGER.
|
||
|
The tcp_drain() and udp_drain() functions were casting the working
|
||
|
argument to the wrong type, resulting in hangs and abnormal
|
||
|
behavior. There is a complexity in the TCP drain logic when the
|
||
|
remote peer closes the socket before all Tx data has been flushed.
|
||
|
Sometimes we are not notified of this case and wait the entire
|
||
|
timeout unnecessarily. There is a workaround in place in
|
||
|
tcp_txdrain(), but this really should be revisited. From Gregory
|
||
|
Nutt.
|
||
|
- 6LoWPAN: Removes unnecessary conversions that were happening due to
|
||
|
a misunderstanding of byte ordering with EUI-64. From Anthony
|
||
|
Merlino.
|
||
|
- RNDIS: Fix issue with DEBUGASSERT when using composite device and
|
||
|
endpoint numbers not being the default. From Anthony Merlino.
|
||
|
|
||
|
* Wireless/Wireless Drivers:
|
||
|
|
||
|
- wireless network devices: Attach radio to d_buf before registering
|
||
|
device to handle forwarding case. When CONFIG_NET_IPFORWARD is
|
||
|
enabled, and CONFIG_NET_6LOWPAN is being used, a packet that
|
||
|
attempts to get forwarded on the 6LoWPAN interface will require
|
||
|
that the radio's buffer be attached to d_buf. Otherwise an assertion
|
||
|
will fire. The underlying "radio" in this case is the
|
||
|
mac802154_netdev. This behavior has probably not been observed
|
||
|
because the buffer is normally attached in the periodic txpoll
|
||
|
worker. However, in my case, the 6LoWPAN interface was not UP yet,
|
||
|
and therefore the worker hadn't run yet. From Anthony Merlino.
|
||
|
- IEEE 802.15.4 MAC: Fixes issues with extended address. 1) Extended
|
||
|
address should be read-only. 2) Extended address should be placed
|
||
|
in frame in "reverse-canonical" order. The extended address is a
|
||
|
read-only attribute and thus an attempt to write the extended
|
||
|
address should be denied. Instead, the extended address should
|
||
|
really be either set by the PHY/radio itself, or provided at board
|
||
|
bring-up time to the radio layer. The MAC layer now pulls in the
|
||
|
extended address from the radio any time the MAC is reset. The
|
||
|
extended address is also supposed to be sent in the frame in
|
||
|
reverse-canonical order. This is very confusing in the standard and
|
||
|
it wasn't until I realized it was backwards in Wireshark that I
|
||
|
researched this further. Searching online I find documents from the
|
||
|
committee for suggestions/feedback on the future standard. It isn't
|
||
|
in the 2015 standard but a newer version of the standard will
|
||
|
presumably clarify this. It says that the extended address should be
|
||
|
written in reverse-canonical form, meaning the OUI comes last, not
|
||
|
first inside the frame. From Anthony Merlino.
|
||
|
- IEEE 802.15.4 MAC: Frame Version should have been 1, but was being
|
||
|
set to 3 when payload exceeds version 0 capabilities. Adds warning
|
||
|
to build to indicate what is noted in the menu for
|
||
|
CONFIG_MAC802154_NTXDESC From Anthony Merlino.
|
||
|
- IEEE 802.15.4 MAC: Fixes issue where the txdesc's ackreq flag was
|
||
|
not being set, despite the frame containing a Frame Control field
|
||
|
with ACKREQ bit set. From Anthony Merlino.
|
||
|
- Xbee: Fix logic to prevent deadlock scenario when there are no
|
||
|
available IOBs From Anthony Merlino (2018-12-21).
|
||
|
- Xbee: Change assumption about destination address mode for incoming
|
||
|
frames. If a short address has been assigned to our radio, then
|
||
|
assume we were addressed using that. Otherwise we were addressed
|
||
|
using our extended address. From Anthony Merlino.
|
||
|
- Xbee: Initialize the short address to the unspecified address and
|
||
|
query for the extended address on initialization. From Anthony
|
||
|
Merlino.
|
||
|
- Xbee: Adds CONFIG_XBEE_LOCKUP_WORKAROUND option and corresponding
|
||
|
logic to workaround an issue where the XBee locks up and stops
|
||
|
responding. This typically happens when there is a lot of data
|
||
|
being received over the link. When the XBee stops responding, many
|
||
|
times, querying the XBee kicks it out of this state. However,
|
||
|
occasionally the XBee is completely locked up and the XBee has to
|
||
|
be reset. This change handles these conditions by periodically
|
||
|
(if not naturally occurring) querying the XBee. If during any
|
||
|
query, the XBee does not respond within a certain number of
|
||
|
attempts, the XBee is reset. From Anthony Merlino.
|
||
|
- Xbee: Cancel query timeout upon receiving the expected response.
|
||
|
Add protection for race condition that can cause association
|
||
|
timeout to continue firing repeatedly From Anthony Merlino.
|
||
|
- Xbee: Detect lockup and reset XBee in xbee_req_data From Anthony
|
||
|
Merlino.
|
||
|
- Xbee: Fixes one instance of the use of IOBUSER_WIRELESS_MAC802154
|
||
|
which isn't available without the software MAC layer. Instead we
|
||
|
use IOBUSER_WIRELESS_RAD802154 throughout the whole driver since it
|
||
|
is always available when IEEE 802.15.4 support is enable. From
|
||
|
Anthony Merlino.
|
||
|
|
||
|
* Common Drivers:
|
||
|
|
||
|
- pipes: Use inode reference counter instead of device reference
|
||
|
counter to handle dup(). I found that if I dup() a pipe, the
|
||
|
reference counter d_refs is not increased. If I close any of the
|
||
|
fd, backed by the same pipe, the pipe will be freed. This causes
|
||
|
any further usage on the fd referencing a non existent pipe. This
|
||
|
change uses the inode reference counter, which is properly
|
||
|
maintained during dup(). From Yang ChungFan.
|
||
|
- SPI Bitbang: Fix build error when the SPI bitbang variable width
|
||
|
support is enabled. From Augusto Fraga Giachero.
|
||
|
- GPIO Lower Half: Remove limitation when pintype >
|
||
|
GPIO_INTERRUPT_PIN. From ligd.
|
||
|
|
||
|
* ARMv4/ARMv5
|
||
|
|
||
|
- Classic ARM7/ARM9: When performing stability test, the application
|
||
|
would cause kernel crash. When I trace the stack, I find that
|
||
|
register R1 has been changed, and its value is the same as register
|
||
|
CPSR. In up_fullcontextrestore.S, the restoration of R0 and R1 is
|
||
|
not atomic: 'msr cpsr r1 will enable interrupts and the recovery of
|
||
|
r0 and r1 may be interrupted and the value or R1 may be changed.
|
||
|
Fix is to use a single ldmia to restore R0, R1, and return via R15.
|
||
|
From Loyen Wang.
|
||
|
|
||
|
* ARMv7-A
|
||
|
|
||
|
- ARMv7-A: Fix typo and missing quotation for ARMv7-A. From Oki
|
||
|
Minabe.
|
||
|
- ARMv7-A: Fix double increment in armv7-a's
|
||
|
arm_addrenv_destroy_region(). From Oki Minabe.
|
||
|
- ARMv7-A: Fix L2 page table mask for ARMv7-A page allocator. From
|
||
|
Oki Minabe.
|
||
|
|
||
|
* ARMv7-M
|
||
|
|
||
|
- Interrupts. Removes the architecture-common
|
||
|
CONFIG_ARCH_INT_DISABLEALL configuration option (but which was
|
||
|
supported only by ARMv7-M). In the normal course of things,
|
||
|
interrupts must occasionally be disabled using the up_irq_save()
|
||
|
inline function to prevent contention in use of resources that may
|
||
|
be shared between interrupt level and non-interrupt level logic.
|
||
|
Now the question arises, if we are using BASEPRI to disable
|
||
|
interrupts and have high priority interrupts enabled
|
||
|
(CONFIG_ARCH_HIPRI_INTERRUPT=y), do we disable all interrupts except
|
||
|
SVCall (we cannot disable SVCall interrupts). Or do we only disable
|
||
|
the "normal" interrupts? If we are using the BASEPRI register to
|
||
|
disable interrupts, then the answer is that we must disable ONLY the
|
||
|
"normal interrupts". That is because we cannot disable SVCALL
|
||
|
interrupts and we cannot permit SVCAll interrupts running at a
|
||
|
higher priority than the high priority interrupts (otherwise, they
|
||
|
will introduce jitter in the high priority interrupt response time.)
|
||
|
Hence, if you need to disable the high priority interrupt, you will
|
||
|
have to disable the interrupt either at the peripheral that
|
||
|
generates the interrupt or at the NVIC. Disabling global interrupts
|
||
|
via the BASEPRI register cannot effect high priority interrupts.
|
||
|
From Gregory Nutt.
|
||
|
- ARMv7-M Priorities: In the 'normal' case, the priority of the
|
||
|
SVCALL interrupt was the same as the priority of the high priority
|
||
|
interrupt. This means that SVCALL interrupt processing can defer
|
||
|
the high priority interrupt and result in the jitter in that
|
||
|
interrupt response. Fix is to raise the priority of the high
|
||
|
priority interrupt above the priority of the SVCALL interrupt.
|
||
|
Suggested by Nathan Hartman. From Gregory Nutt.
|
||
|
|
||
|
* Microchip i.MXRT Drivers:
|
||
|
|
||
|
- i.MXRT ENC: Fix some errors in register bit definitions. Noted by
|
||
|
Arie de Muijnck. From Gregory Nutt.
|
||
|
- i.MXRT LPI2C: Slave addresses are now correctly shifted when
|
||
|
sending START. TX/RX FIFOs now discarded on error to prevent FIFO
|
||
|
underflow errors. Fixes error checking to use priv structure and
|
||
|
removes checking of BBF flag as it is not an error. From Nicholas
|
||
|
Chin.
|
||
|
|
||
|
* Microchip PIC32MZ Drivers:
|
||
|
|
||
|
- PIC32MZ SPI: Fix SPI Mode selection. CKE is the inversion of the
|
||
|
CPHA. From Ouss4.
|
||
|
|
||
|
* Microchip/Atmel SAMD2x/SAML2x Drivers:
|
||
|
|
||
|
- SAMD2/L2 I2C: Correct time calculation. From Bernd Walter.
|
||
|
|
||
|
* Microchip/Atmel SAM3/SAM4:
|
||
|
|
||
|
- SAM3/4: Add missing DMA configuration Kconfig setting. From Bernd
|
||
|
Walter.
|
||
|
|
||
|
* NXP LPC17xx/40xx Drivers:
|
||
|
|
||
|
- LPC17xx/40xx ADC: Only use PCLKSEL0 for ADC on LPC176x family.
|
||
|
From jjlange.
|
||
|
- LPC17xx/40xx Ethernet: Set speed back to 10Mbps if 10Mmbps link
|
||
|
negotiated. From Augusto Fraga Giachero.
|
||
|
- LPC17xx/40xx I2C: Abort I2C transfers if a timeout has occurred.
|
||
|
If a timeout has occurred in the middle of a I2C transfer, the next
|
||
|
I2C interrupt should abort any transfers and send a stop condition
|
||
|
to the corresponding I2C bus. Failure to do so will result in
|
||
|
memory corruption / undefined behavior as priv->msgs points to a
|
||
|
region of memory it doesn't owns anymore after lpc17_40_i2c_start
|
||
|
returns. From Augusto Fraga Giachero.
|
||
|
- LPC17xx/40xx I2C: Calculate the appropriate timeout for I2C
|
||
|
transfers. Depending on the bus frequency and transfer size, I2C
|
||
|
transactions can take quite a bit, so a fixed timeout is not a
|
||
|
good solution. Calculating the timeout at run time poses some
|
||
|
overhead but still better than aborting long transactions. From
|
||
|
Augusto Fraga Giachero.
|
||
|
|
||
|
* NXP/Freescale Kinetis Drivers:
|
||
|
|
||
|
- Kinetis I2C: i2c transfer ensure correct result returned.
|
||
|
kinetis_i2c_transfer released the mutex then fetched the state,
|
||
|
this resulted in returning the correct results. From David
|
||
|
Sidrane.
|
||
|
|
||
|
* NXP LPC17xx/40xx Drivers:
|
||
|
|
||
|
- LPC17xx/40xx CAN: If BOARD_CCLKSEL_DIVIDER is not equal to 1 on
|
||
|
LPC178x or LPC40xx then base clock rate is calculated incorrectly
|
||
|
because CCLK frequency does not correspond to PLL0 clock which is
|
||
|
used for PCLK. This is partially workaround solution. It would
|
||
|
be probably better to define BOARD_PCLK_FREQUENCY even for LPC176x
|
||
|
targets and use that to replace divisor by base_clock in up_dev_s.
|
||
|
From Pavel Pisa.
|
||
|
|
||
|
* NXP LPC17xx/40xx Boards:
|
||
|
|
||
|
- LPC17xx/40xx Ethernet: Add missing LPC17_40_PHY_CEMENT_DISABLE
|
||
|
variable to the lpc17xx/40xx Kconfig file. For some reason this
|
||
|
setting was not referenced anywhere except in the Ethernet driver.
|
||
|
From Augusto Fraga Giachero.
|
||
|
- LPC17xx/40xx Ethernet: Fix the initialization for DP83848x PHYs.
|
||
|
The DP83848x requires the RMII mode to be manually enabled through
|
||
|
the MII_DP83848C_RBR register. Before querying the speed and mode
|
||
|
it should wait for the link to be established. From Augusto Fraga
|
||
|
Giachero.
|
||
|
|
||
|
* NXP i.MXRT Drivers:
|
||
|
|
||
|
- i.MXRT LPUART: Fix some errors in the LPUART register definition
|
||
|
files. Correct naming of a function: up_earlyserialinit() should
|
||
|
be imxrt_earlyserialinit(). Remove prototypes for non-existent
|
||
|
serial initialization functions. From Gregory Nutt.
|
||
|
- i.MXRT USDHC: uSDHC typo fixes and command transfer error handling
|
||
|
modified. From Ivan Ucherdzhiev.
|
||
|
|
||
|
* SiLabs EFM32 Drivers:
|
||
|
|
||
|
- EFM32 OTG host: Adam Porter's various fixex for STM32 FS/HS
|
||
|
probably should be applied to EFM32 host which which has very
|
||
|
similar IP. From Gregory Nutt.
|
||
|
|
||
|
* STMicro STM32:
|
||
|
|
||
|
- STM327F Configuration: Kconfig add depends on BBSRAM. From David
|
||
|
Sidrane.
|
||
|
- STM32F7 Interrupts: Fix overwritten IRQ enable. System boot order
|
||
|
calls clock_initialize() then up_initialize(). clock_initialize()
|
||
|
was setting up the alarm IRQ up_initialize is initializing the NVIC.
|
||
|
This most likely worked in the past due to a bug in the NVIC
|
||
|
initialization code that failed to clear the Interrupt enables.
|
||
|
- STM32H7: Rix BBSRAM name in memory map. From David Sidrane.
|
||
|
- STM32H7: Removed f7 in file path. From David Sidrane.
|
||
|
|
||
|
* STMicro STM32 Drivers:
|
||
|
|
||
|
- STM32H7 BBSRAM: Fix issues causing no writes and hardfaults. From
|
||
|
David Sidrane.
|
||
|
- STM32H7 BBSRAM: Convince compiler to perform 32 bit write. From
|
||
|
David Sidrane.
|
||
|
- STM32F7 OTGHS: Fixes bad preprocessor logic preventing USB OTG HS
|
||
|
to work when used without external ULPI. From Anthony Merlino.
|
||
|
- STM32 OTGH[FS|HS] Host STM32 host only initiates transfer if
|
||
|
buflenl > 0. From Adam Porter.
|
||
|
- STM32F7/H7/L4 OTG host: Adam Porter's fix for STM32 FS/HS probably
|
||
|
should be applied to STM32 F7, H7, and L4 OTG host which are very
|
||
|
similar. From Gregory Nutt.
|
||
|
- STM32/F7/H7/L4: This change was required to get my devices
|
||
|
(CDC-MBIM) to enumerate. Initially the system timed out retrieving
|
||
|
the USB configuration descriptor. Ctrl IN requests got nothing but
|
||
|
NAKs. I found that the initial SETUP packet and corresponding IN
|
||
|
transfer were fine; it was the Status OUT phase that was getting the
|
||
|
NAK. After receiving a NAK on the Status OUT, the code would loop
|
||
|
back and issue another ctrl IN, which will always fail because the
|
||
|
data was already transferred before. Thus the entire transfer would
|
||
|
'timeout'. The fix I implemented moves the DATANAK timeout loop to
|
||
|
only apply to the Status OUT. Both the ctrl IN and the Status OUT
|
||
|
need their own retry loops. From Adam Porter.
|
||
|
- STM32F7 SDMMC: If there is only one SDMMC it is slot 0 From David
|
||
|
Sidrane.
|
||
|
- STM32F7 USART1: USART1_RXDMA is dependent on STM32F7_DMA2 not
|
||
|
STM32F7_DMA1 From Anthony Merlino.
|
||
|
- STM32H7 DBGMCU: Memory Map DBGMCU is @ 0x5c001000 From David
|
||
|
Sidrane.
|
||
|
- STM32F7 SDMMC: Fix warning when DMA is not enabled. From David
|
||
|
Sidrane.
|
||
|
- STM32H7 Ethernet: Fix some errors in Ethernet MAC configuration.
|
||
|
From Markus Bernet.
|
||
|
- STM32H7 Ethernet: Correct stm32h7 mac address filtering. Correct
|
||
|
the MAC address 0 register definition and remove the 'receive all'
|
||
|
flag. Now the Ethernet driver only receives packets addressed to
|
||
|
correct MAC. From Jukka Laitinen.
|
||
|
- STM32H7 Ethernet: Correct memory corruption error. The Ethernet
|
||
|
driver initialization incorrectly wrote to DMACRXCR instead of
|
||
|
DMACSR when trying to clear the stopped flags. This caused
|
||
|
invalid buffer length in the DMACRXCR, causing DMA to overflow the
|
||
|
RX buffers when large packets are sent to the device. From Jukka
|
||
|
Laitinen.
|
||
|
- STM32H7 PWR: Ensure data is flushed on backup domain access
|
||
|
changes. From David Sidrane.
|
||
|
- STM32H7 Serial: Serial fix undefined with TERMIOS From David
|
||
|
Sidrane.
|
||
|
- STM32H7 UARTs: Fix UART7/8 typos. Fix bug in ETH_MACQTXFCR
|
||
|
configuration. From Markus Bernet.
|
||
|
|
||
|
* STMicro STM32 Boards:
|
||
|
|
||
|
- Multiple STM32 Boards: If CONFIG_SCHED_CRITMONITOR is selected,
|
||
|
then make sure that ITM and DWT resources are enabled before
|
||
|
accessing ITM and DWT registers. By default, these registers are
|
||
|
disabled. Suggested by Juha Niskanen. From Gregory Nutt.
|
||
|
- Nucleo-H743ZI: Correct logic that determines if the RTC driver is
|
||
|
available. Find in build testing. From Gregory Nutt.
|
||
|
- Nucleo-G071RB: Fix linker script to avoid .ARM.exidx section
|
||
|
overlap with .data From Daniel Pereira Volpato.
|
||
|
- Modify all linker scripts (all boards, all architectures) to use
|
||
|
solution from Daniel P. Volpato. From Alan Carvalho de Assis.
|
||
|
- Nucleo-L432KC ADC: Change analog pins definitions and correct DMA
|
||
|
related issue. From Daniel P. Carvalho.
|
||
|
|
||
|
* TI Tiva:
|
||
|
|
||
|
- Tiva Configuration: Rename TM4C123GH6PMI identifiers to
|
||
|
TM4C123GH6PM. Rationale: In terms of firmware programming, there
|
||
|
is no functional difference between these parts: TM4C123GH6PMI7,
|
||
|
TM4C123GH6PMI7R, TM4C123GH6PMT7, and TM4C123GH6PMT7R. From a
|
||
|
programming standpoint, all of the above parts are TM4C123GH6PM,
|
||
|
which means it doesn't make sense to differentiate between PM and
|
||
|
PMI. (The PM means 64-LQFP. The I means temperature range -40C to
|
||
|
+85C. It could be T meaning -40C to +105C. The R means it ships in
|
||
|
Tape and Reel packaging as opposed to Tray.) From Nathan Hartman.
|
||
|
- Tiva Configuration: Rename TM4C1294NC identifiers to TM4C1294NCPDT.
|
||
|
Rationale: TM4C1294NC is ambiguous: TM4C1294NCPDT is a 128-TQFP,
|
||
|
TM4C1294NCZAD is a 212-NFBGA. The TM4C1294NC part currently
|
||
|
supported by NuttX is the TM4C1294NCPDT used on the TI EK-TM4C1294XL
|
||
|
"Connected LaunchPad" (see configs/tm4c1294-launchpad). To ensure
|
||
|
the correct part is fully specified, this commit updates all
|
||
|
TM4C1294NC identifiers to TM4C1294NCPDT. From Nathan Hartman.
|
||
|
- Tiva Configuration: Fix TM4C129XNCZAD part number in Kconfig and
|
||
|
identifiers. Rationale: Fully specify that this is the 212-pin BGA
|
||
|
package (ZAD ending) and for consistency with earlier changes to
|
||
|
other Tiva TM4C12x part numbers in Kconfig names and identifiers.
|
||
|
From Nathan Hartman.
|
||
|
|
||
|
* TI Tiva Drivers:
|
||
|
|
||
|
- Tiva TM4C 1-Wire: Fix wrong description on define TIVA_1WIRE_BASE:
|
||
|
Was "EEPROM and Key Locker" (same as the item above). Now "1-Wire
|
||
|
Master Module." Make DMACTL symbols visible for TM4C123: Remove
|
||
|
"#ifdef CONFIG_ARCH_CHIP_TM4C129" guard around UART DMA Control
|
||
|
(DMACTL) symbols. These bits are valid on TM4C123 devices, as well
|
||
|
as on TM4C129. Also, improve the comment on UART_DMACTL_DMAERR.
|
||
|
From Nathan Hartman.
|
||
|
- Tiva GPIO Interrupts: LM3S, LM4F, TM4C: Fix GPIO IRQ error, ports
|
||
|
R, S, T. Preprocessor logic for CONFIG_TIVA_GPIOx_IRQS was setting/
|
||
|
clearing port Q defines when it should act on ports R, S, T.
|
||
|
gpioport2irq() was missing handling for port T. From Nathan
|
||
|
Hartman.
|
||
|
- Tiva Timers: Fix minor errors in tiva_timerlib.c. Fix incorrect
|
||
|
preprocessor conditionals related to Kconfig defines:
|
||
|
CONFIG_TIVA_TIMER32_EDGECOUNT -> CONFIG_TIVA_TIMER16_EDGECOUNT,
|
||
|
CONFIG_TIVA_TIMER32_TIMECAP -> CONFIG_TIVA_TIMER16_TIMECAP,
|
||
|
CONFIG_TIVA_TIMER32_PWM -> CONFIG_TIVA_TIMER16_PWM. From Nathan
|
||
|
Hartman.
|
||
|
- Tiva Timers: Fix errors in low-level timer support.
|
||
|
tiva_gptm_configure() and tiva_gptm_release() were calling
|
||
|
tiva_emac_periphrdy() instead of tiva_gptm_periphrdy(). Fix
|
||
|
error in "abcde" description of bit flag defines. From Nathan
|
||
|
Hartman.
|
||
|
- Tiva Timers: Fix one code error and some comment errors.
|
||
|
tiva_timer16_setinterval(): Was DEBUGASSERTing on mode !=
|
||
|
TIMER16_MODE. Fixed to DEBUGASSERT on mode == TIMER16_MODE.
|
||
|
From Nathan Hartman.
|
||
|
|
||
|
* ZiLOG Z80 Boards:
|
||
|
|
||
|
- z80sim Serial: Fix uart_dev_t initializer: pollfds[] is a array of
|
||
|
pointers and, hence, the NULL initializer must be included in braces.
|
||
|
Noted by Paul Osmialowski in Issue #160. From Gregory Nutt.
|
||
|
- z80sim Interrupts: Missed a name change up_irqinitialize to
|
||
|
z80_irq_initialize. From Gregory Nutt.
|
||
|
|
||
|
* C Library/Header Files:
|
||
|
|
||
|
- include/netinet/in.h: Rename __pad member to sin_zero in struct
|
||
|
sockaddr_in. Libwebsockets initializes the 'sin_zero' member of
|
||
|
sockaddr_in objects to zeros. Apparently, judging from mailing list
|
||
|
entries, there are platforms on which not doing this causes
|
||
|
undefined behavior. On NuttX compiling respective code is broken,
|
||
|
as the corresponding member variable is called '__pad'. Neither in
|
||
|
the 'nuttx' nor in the 'apps' repository did I find any reference to
|
||
|
this identifier. Thus, I believe its a safe bet to just rename it.
|
||
|
UNIX Network Programming states in this regard: "The POSIX
|
||
|
specification requires only three members in the structure:
|
||
|
sin_family, sin_addr, and sin_port. It is acceptable for a POSIX-
|
||
|
compliant implementation to define additional structure members, and
|
||
|
this is normal for an Internet socket address structure. Almost all
|
||
|
implementations add the sin_zero member so that all socket address
|
||
|
structures are at least 16 bytes in size." From Michael Jung.
|
||
|
|
||
|
- libs/libc/libc.csv: Correct dependency of setlocale on
|
||
|
CONFIG_LIBC_LOCALE. From Pavel Pisa.
|
||
|
- libs/libc/machine/arm/armv7-m: Fix build error for ELF. From
|
||
|
Masayuki Ishikawa.
|
||
|
- libs/libc/math.csv: Correct format of some function entries. From
|
||
|
Pavel Pisa.
|
||
|
|
||
|
* Tools:
|
||
|
|
||
|
- tools/: Change all occurrences of /bin/(ba)sh in shell scripts to
|
||
|
/usr/bin/env bash which appears more portable From Manuel Stühn.
|
||
|
|
||
|
* NSH Library: apps/nshlib:
|
||
|
|
||
|
- apps/nshlib/: As noted by David S. Alessio, 'cat' should not output
|
||
|
any additional newline at the end of the cat'ed file content. This
|
||
|
additional newline was added to assure that the NSH prompt was
|
||
|
presented on a new line. However, that is not the correct behavior
|
||
|
of 'cat' per the IEEE std: "The standard output shall contain the
|
||
|
sequence of bytes read from the input files. Nothing else shall be
|
||
|
written to the standard output." Reference:
|
||
|
https://pubs.opengroup.org/onlinepubs/009695399/utilities/cat.html.
|
||
|
This commit changes the function nsh_catfile() which underlies the
|
||
|
'cat' command and well as other NSH commands. Although this is the
|
||
|
correct behavior for 'cat' it may not be the correct behavior for
|
||
|
other commands implemented via nsh_catfile(). That remains to be
|
||
|
determined. From Gregory Nutt.
|
||
|
|
||
|
* System Utilities: apps/system:
|
||
|
|
||
|
- apps/system/cle/: ASCII DEL should be treated by Delete-Left. From
|
||
|
Dave Marples.
|
||
|
- apps/system/i2ctool: (1) Friendlier I2C "knock-knock" uses only
|
||
|
read request. While many I2C slave devices have multiple indexed
|
||
|
registers, some have only one register and it's not indexed. For
|
||
|
example, the I2C bus switch TCA9548A has only a Control Register,
|
||
|
attempting to index to "Reg[0]" alters its contents to 0x00
|
||
|
disabling all subordinate buses. This patch fixes that problem by
|
||
|
simply trying to read something/anything from the slave. This also
|
||
|
helps coax out slaves with register files that start from a higher
|
||
|
index, i.e. the AT24CS0x, FLASH chips with a UUID that appears as a
|
||
|
2nd I2C slave at (address+8), report their serial number at
|
||
|
Reg[80]-Reg[8F] and will NAK a read of Reg[0]. (2) Modify get/set
|
||
|
to prevent write of reg index if not specified From David Alessio.
|
||
|
|
||
|
* Network Utilities: apps/netutils:
|
||
|
|
||
|
- apps/netutils/dhcpd: Fixes bug where hwaddr was being used instead
|
||
|
of ipaddr in the ARP update. This bug seems to have been introduced
|
||
|
three years ago during a rewrite to remove a direct OS call to arp.
|
||
|
I'm not sure how others have not run into issues with this. The
|
||
|
behavior I was observing was that the DHCPD would go to offer an IP
|
||
|
address, but then send a ARP request for the IP instead because it
|
||
|
didn't know where to send the data. From Anthony Merlino.
|
||
|
- apps/netutils/netinit/: Remove warnings. Unhook PHY notification
|
||
|
signal handler when cleaning up, if an error occurs after the signal
|
||
|
handler is put into place. From Nathan Hartman.
|
||
|
|
||
|
* Wireless Utilities: apps/wireless:
|
||
|
|
||
|
- apps/wireless/ieee802154/i8sak: Fixes conversion from extended
|
||
|
address to IPv6 address. From Anthony Merlino.
|