| 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. |