319 lines
13 KiB
Groff
319 lines
13 KiB
Groff
|
NuttX-7.8
|
||
|
---------
|
||
|
|
||
|
The 108th release of NuttX, Version 7.8, was made on February 11, 2015,
|
||
|
and is available for download from the SourceForge website. Note
|
||
|
that release consists of two tarballs: nuttx-7.8.tar.gz and
|
||
|
apps-7.8.tar.gz. Both may be needed (see the top-level nuttx/README.txt
|
||
|
file for build information).
|
||
|
|
||
|
This release is primarily a bugfix release for the NuttX-7.7 version that
|
||
|
was release just two weeks prior. That release included substantial
|
||
|
modifications in the NuttX networking to accommodate support for IPv6. This
|
||
|
release follows close behind NuttX-7.7 in order to correct some the problems
|
||
|
discovered in that networking code. This release does, however, include a
|
||
|
small number of new features and bug fixes unrelated to NuttX networking.
|
||
|
|
||
|
Additional new features and extended functionality:
|
||
|
|
||
|
* Core OS:
|
||
|
|
||
|
- Tickless Mode: added limit of maximum delay that can be request
|
||
|
by the scheduler tickless logic. This is necessary so that the
|
||
|
tickless logic does not request a delay beyond the capability of the
|
||
|
underlying hardware. From Macs Neklyudov.
|
||
|
|
||
|
* Common Drivers:
|
||
|
|
||
|
- VFS Unlink: Add an unlink method to both the character and block
|
||
|
driver interface. This is important because if the driver inode is
|
||
|
unlinked and there are no open references to the driver, then the
|
||
|
driver resources will be stranded. On the unlink call, the driver
|
||
|
has the opportunity (1) check if there an any open references, and
|
||
|
if not, (2) free the driver resources.
|
||
|
- Pipes and FIFOs: Implement the unlink method. If the pipe/FIFO is
|
||
|
unlinked, it will marked the pipe/FIFO as unlinked. If/when all
|
||
|
open references to the driver are closed, all of the driver
|
||
|
resources will be freed.
|
||
|
- Added an option to use the syslog'ing device as the system console.
|
||
|
This option enables a low-level, write-only console device at
|
||
|
/dev/console (similar to the low-level UART console device). From
|
||
|
Pierre-noel Bouteville.
|
||
|
|
||
|
* File Systems/Block Drivers/MTD:
|
||
|
|
||
|
- RAM/ROM disk: Add logic to dispose of the driver and RAM buffer
|
||
|
when the RAM disk has been unlinked and all open references to the
|
||
|
RAM disk have been closed. Add new parameters to romdisk() to
|
||
|
specify what should be done with the RAM/ROM buffer in this case --
|
||
|
Should it be freed or not? Changed all calls to ramdisk() to use
|
||
|
these new parameters.
|
||
|
|
||
|
* Networking:
|
||
|
|
||
|
- Add support for local, Unix domain sockets. Support included for
|
||
|
both SOCK_STREAM and SOCK_DGRAM style local socket.
|
||
|
- UDP enhancement: Add UDP read-ahead support. In addition to
|
||
|
eliminating the main reason for lost UDP packets, then change
|
||
|
enables support for for poll/select on UDP sockets and also non-
|
||
|
blocking UDP sockets. From Macs Neklyudov.
|
||
|
- SLIP interface improvements. From Macs Neklyudov.
|
||
|
- IPv6 Neighbor Solicitation: Added logic to support verification
|
||
|
that we have the IPv6 address in the Neighbor Table before sending
|
||
|
any packets. If not, then the Neighbor Solicitation message is
|
||
|
sent. This feature is important because otherwise the first packet
|
||
|
sent to a remote peer will fail (it would have been replaced with a
|
||
|
Neighbor Solicitation).
|
||
|
- IPv6 Autonomous Auto-Configuration: Added support for sending
|
||
|
ICMPv6 Router Solicitation and receiving Router advertisement. The
|
||
|
local IPv6 address, mask, and router address are then auto-configured
|
||
|
from the response..
|
||
|
- IPv6 Router Support: Add logic to behave like a router (if so
|
||
|
configured) only in the sense that NuttX will send the router
|
||
|
advertisement message in response to any received router solicitation
|
||
|
messages. Thus, one NuttX node in a network can configure the IPv6
|
||
|
addresses of all other nodes in the network.
|
||
|
- Optional IPv6 address filtering added to all Ethernet drivers for
|
||
|
the all-routers multicast address.
|
||
|
|
||
|
* Atmel AVR:
|
||
|
|
||
|
- Added architecture support for the Atmel AVR ATMega1284P MCU. From
|
||
|
Jedi Tek'Unum.
|
||
|
|
||
|
* Atmel AVR Boards:
|
||
|
|
||
|
- Added support for the LowPowerLab MoteinoMEGA that is based on the
|
||
|
Atmel AVR ATMega1284P MCU. From Jedi Tek'Unum.
|
||
|
|
||
|
* Atmel SAMA4:
|
||
|
|
||
|
- Add support for Tickless mode of operation for the SAM4CM platform.
|
||
|
From Macs Neklyudov.
|
||
|
|
||
|
* Atmel SAMA4 Drivers:
|
||
|
|
||
|
- Ethernet: The SAM4E Ethernet driver can now be configuration to
|
||
|
perform all network processing on the work queue. This greatly
|
||
|
reduces the amount of interrupt level processing to service Ethernet
|
||
|
packets.
|
||
|
- SAM4E Ethernet: Add support multicast address matching and IPv6.
|
||
|
|
||
|
* Atmel SAMA4 Boards:
|
||
|
|
||
|
- SAM4E-EK: The nsh configuration now configures the Ethernet driver
|
||
|
for execution on the work thread.
|
||
|
|
||
|
* Atmel SAMA5D Drivers:
|
||
|
|
||
|
- SAMA5D4 Ethernet: The SAMA5D4 Ethernet driver can now be configuration
|
||
|
to perform all network processing on the work queue. This greatly
|
||
|
reduces the amount of interrupt level processing to service Ethernet
|
||
|
packets.
|
||
|
- SAMA5D3 and SAMA5D4 Ethernet: Add support multicast address matching
|
||
|
and IPv6.
|
||
|
|
||
|
* Atmel SAMA5D Boards:
|
||
|
|
||
|
- SAMA5D4-EK; Added a configuration to testing IPv6.
|
||
|
- SAMA5D4-EK: Converted the nsh and ipv6 configurations to configure
|
||
|
the Ethernet driver to use the work queue (vs. interrupt level
|
||
|
processing).
|
||
|
|
||
|
* Freescale KL:
|
||
|
|
||
|
- Add architectural support for the K26Z128VLH4 chip. From Derek B. Noonburg.
|
||
|
|
||
|
* Freescale KL Boards:
|
||
|
|
||
|
- Add board support for the Freedom KL26Z board. From Derek B. Noonburg.
|
||
|
|
||
|
* NXP LPC17xx Drivers:
|
||
|
|
||
|
- Ethernet: Add support multicast address matching and IPv6.
|
||
|
|
||
|
* SiLabs EFM32:
|
||
|
|
||
|
- Add configurable option to unconditionally enable LE clocking. Even
|
||
|
you don't use core clock LE as source for LFA or LFB, to read are
|
||
|
write any register not clocked by HFPERCLK or HFCORECLK, HFCORECLKLE
|
||
|
should be enabled. From Pierre-noel Bouteville.
|
||
|
|
||
|
* SiLabs EFM32 Drivers:
|
||
|
|
||
|
- EFM32 RTC: RTC driver using BURTC. From Pierre-Noel Bouteville.
|
||
|
|
||
|
* STMicro STM32 Drivers:
|
||
|
|
||
|
- AES: Add driver for STM32L162XX AES peripheral. From Juha Niskanen.
|
||
|
- Ethernet: The STM32 Ethernet driver can now be configuration to
|
||
|
perform all network processing on the work queue. This greatly
|
||
|
reduces the amount of interrupt level processing to service Ethernet
|
||
|
packets.
|
||
|
- Ethernet: Add support multicast address matching and IPv6.
|
||
|
|
||
|
* STMicro STM32 Boards:
|
||
|
|
||
|
- Added an IPv6 configuration for the STM32F4-Discovery board (with the
|
||
|
STM32-DISCO_BB base board).
|
||
|
- Converted all STM32F4-Discovery configurations (with base board) to
|
||
|
configure the Ethernet driver to use the work queue (vs. interrupt
|
||
|
level processing).
|
||
|
|
||
|
* TI Tiva Drivers:
|
||
|
|
||
|
- Added support for TM4C123G timers. From Calvin Maguranis.
|
||
|
- Added a Tiva ADC driver. From Calvin Maguranis.
|
||
|
|
||
|
* TI Tiva Boards:
|
||
|
|
||
|
- Added TM4C123G timers on the TM4C123G Launchpad. From Calvin Maguranis.
|
||
|
- Added Tiva ADC support to the TM4C123G-Launchpad. From Calvin Maguranis.
|
||
|
|
||
|
* C Library/Header Files:
|
||
|
|
||
|
- Math Library: Added support for inverse hyperbolic functions,
|
||
|
isfinite(), error functions, nan(), copysign(), and trunc()
|
||
|
functions. From Brennan Ashton.
|
||
|
|
||
|
* Applications:
|
||
|
|
||
|
- apps/examples/ustream: Add a simple test of Unix domain stream
|
||
|
sockets.
|
||
|
- apps/examples/udgram: Add a simple test of Unix domain datagram
|
||
|
sockets.
|
||
|
- apps/netutils/netlib: Add utilities to convert to/from prefix
|
||
|
lengths from/to 128-bit network masks.
|
||
|
- apps/nshlib: Modify the NSH IPv6 ifconfig command to show the more
|
||
|
standard post-pended prefix value, rather than the full 128-bit
|
||
|
netmask.
|
||
|
|
||
|
Efforts In Progress. The following are features that are partially
|
||
|
implemented but present in this release. They are not likely to be
|
||
|
completed soon.
|
||
|
|
||
|
* Processes. Much of the work in this release is focused on the
|
||
|
realization of Unix-style user processes in NuttX. There is more to
|
||
|
be done, however. The full roadmap and status is available at:
|
||
|
https://cwiki.apache.org/confluence/display/NUTTX/Memory+Configurations
|
||
|
|
||
|
* XMega: There are some fragments in place for an XMega port. That
|
||
|
port has not really started, however.
|
||
|
|
||
|
Bugfixes. Only the most critical bugfixes are listed here (see the
|
||
|
ChangeLog for the complete list of bugfixes and for additional, more
|
||
|
detailed bugfix information):
|
||
|
|
||
|
* Core OS:
|
||
|
|
||
|
- Work Queues: Fix a backward calculation when determining the time
|
||
|
to the next interesting event. . From Liio Chen via the PX4
|
||
|
repository.
|
||
|
- clock_systimespec(): Fixes for compilation errors in certain
|
||
|
configurations. From Macs Neklyudov.
|
||
|
|
||
|
* Graphics
|
||
|
|
||
|
- Fixed a problem with one of the font files. From Pierre-noel Bouteville.
|
||
|
|
||
|
* Networking:
|
||
|
|
||
|
- IOB Deadlock: There were issues with the TCP write-ahead buffering
|
||
|
if CONFIG_NET_NOINTS was enabled: There is a possibility of
|
||
|
deadlocks in certain timing conditions: The network should never
|
||
|
wait for TCP read-ahead buffering space to be available. It should
|
||
|
drop the packets immediately if no buffering is available. This was
|
||
|
fixed by duplicating most of the IOB interfaces: The versions that
|
||
|
waited are still present (like iob_alloc()), but now there are non-
|
||
|
waiting versions of the same interfaces (like iob_tryalloc()). The
|
||
|
TCP read-ahead logic now uses only these non-waiting interfaces.
|
||
|
- TCP Deadlock: Fix another deadlock when CONFIG_NET_NOINTS is enabled.
|
||
|
tcp_write_buffer_alloc() calls sem_wait() with network locked. That
|
||
|
worked if CONFIG_NET_NOINTS was not defined because interrupts are
|
||
|
automatically restored when the wait happens. But with
|
||
|
CONFIG_NET_NOINTS=y, the wait blocks with the network locked -- bad
|
||
|
style and also can lead to a deadlock condition.
|
||
|
- ARP response waiting: Fixes another CONFIG_NET_NOINTS issue. When
|
||
|
called sem_timedwait() with the network locked, the network stays
|
||
|
locked while we wait which is not what we want (without CONFIG_NET_NOINTS,
|
||
|
interrupts are re-enabled while we wait and all is well).
|
||
|
- TCP accept(): Fix a major TCP bug introduced with the NuttX-7.7
|
||
|
IPv6 changes: Some connection logic was reordered; setting the
|
||
|
socket as 'connected' got moved to BEFORE the point where the check
|
||
|
was made if the socket was already connected. The resulting behavior
|
||
|
was odd: Telnet would connect, but then when you exit and reconnect,
|
||
|
it would fail to connect. But then if try again, it would connect
|
||
|
okay. So the symptom was connect-fail-connect-fail-...
|
||
|
- Lots of build problems introduced into multiple NIC support with the
|
||
|
IPv6 changes of NuttX-7.7. Many places where conditional logic based
|
||
|
on CONFIG_NETDEV_MULTINIC is confused with CONFIG_NET_MULTILINK.
|
||
|
Lots of code changed with IPv6 that was never compiled with MULTINIC
|
||
|
enabled.
|
||
|
|
||
|
* Common Drivers:
|
||
|
|
||
|
- Pipes and FIFOs: Fix a race condition between FIFO buffer operations
|
||
|
and the opening and closing of FIFOs which necessary when the FIFOs
|
||
|
are used to support Unix domain, datagram sockets. The default
|
||
|
policy is the deallocate FIFO buffering when the last client closes
|
||
|
the pipe. When when used for datagram communications, packets left
|
||
|
in the FIFO will be lost. Some like UDP read-ahead is needed: The
|
||
|
buffered data in the FIFO needs to be retained until the reader gets
|
||
|
a chance to re-open the FIFO. Added an ioctl (PIPEIOC_POLICY) to
|
||
|
control the buffer policy. Default (0) is the legacy behavior; Unix
|
||
|
domain datagram logic sets the alternative policy so that the packet
|
||
|
data persists after the FIFO is closed.
|
||
|
- RAMTRON: Table of parts is not terminated properly if
|
||
|
CONFIG_RAMTRON_FRAM_NON_JEDEC is not defined. Noted by David
|
||
|
Sidrane.
|
||
|
|
||
|
* All Architectures:
|
||
|
|
||
|
- Removed all occurrences of up_maskack_irq() that disables interrupts
|
||
|
with up_ack_irq() that only acknowledges the interrupts. This is only
|
||
|
used in interrupt decoding logic. Also remove the logic that
|
||
|
unconditionally re-enables interrupts with the interrupt exits. This
|
||
|
interferes with the drivers ability to control the interrupt state.
|
||
|
This is a necessary, sweeping, global change and unfortunately
|
||
|
impossible to test.
|
||
|
|
||
|
* ARM
|
||
|
|
||
|
- ARMv7-A and ARMv7-M memcpy(): Optimized ARM assembly language
|
||
|
memcpy's were not returning a value in R0 they are required to do.
|
||
|
From David Sidrane.
|
||
|
- ARMv7-A interrupt handler should not automatically re-enable interrupts
|
||
|
on interrupt return. That interferes with the driver's ability to
|
||
|
manage interrupts. Analogous change made to all other architectures
|
||
|
as well (ARM7, ARM9, HC, SH, x86, z16, z80, etc,. See above.).
|
||
|
|
||
|
* STMicro STM32:
|
||
|
|
||
|
- GPIO Interrupts: Disabling any of EXTI 5-9 interrupts was disabling
|
||
|
interrupts for all EXTI 5-9. Same issue with EXTI 10-15. From Jussi
|
||
|
Kivilinna.
|
||
|
|
||
|
* STMicro STM32 Drivers:
|
||
|
|
||
|
- RTCC: Fix for recent changes that caused compilation failrues with
|
||
|
STM32L15XX configurations. From Jussi Kivilinna.
|
||
|
- SPI: The source clock for SPI 4,5, and 6 should be PCLK2, not PCLK1
|
||
|
(for F411, F427, and F429). Per David Sidrane.
|
||
|
|
||
|
* C Library/Header Files:
|
||
|
|
||
|
- execl(): Fix bad logic in counting the number of arguments.
|
||
|
execl() parameter passing could never have worked. Noted by
|
||
|
Pierre-noel Bouteville.
|
||
|
|
||
|
* Applications:
|
||
|
|
||
|
- Fix for building with parallel make. Build-server sometimes failed
|
||
|
'make -j24' with errors in the builtin line or or sometimes silently
|
||
|
succeeds but generated builds that contain a random subset of
|
||
|
configured NuttX applications. There are two root causes for this:
|
||
|
(1) Recipes for building builtin_list.h and builtin_proto.h are
|
||
|
not linearizable, and (2) Nothing ensures that 'make context' is run
|
||
|
first for apps/builtin. This change address both issues. From Juha
|
||
|
Niskanen.
|