Skip to content
ReleaseNotes 350 KiB
Newer Older
Gregory Nutt's avatar
Gregory Nutt committed
      - Granule allocator: Fixes some issues found by the PX4 team using
        Coverity.  From Pavel Krienko

    * Networking:

      - Several fixes correcting issues with the CC3000 networking.  From
        Jussi  Kivilinna
      - CC3000 Fix: Data can be unaligned.  When dereferenced as an input
        ntosh(), a bad value is returned.  Reported by Alan Carvalho de
        Assis
      - Correct naming of fields in struct sockaddr_in6:  sin6_port and
        sin6_family, not sin_port and sin_family.
      - accept(): Correct the value returned by accept() in the case where
        net_lockingwait() is called.  It was returning -1 and losing the
        errno value.  Noted by Rony Xln

    * Common Drivers:

      - Loop device should return -EINTR is interrupted by a signal.
      - M25P serial flash driver:  Add subsector size of the M24P16 part. 
        From Lazlo
      - Common serial driver: In case a thread is doing a blocking operation
        (e.g. read()) on a serial device, while it is being terminated by
        pthread_cancel(), then uart_close() gets called, but the semaphore
        is still blocked. This means that once the serial device is opened
        next time, data will arrive on the serial port (and driver
        interrupts handled as normal), but the received characters never
        arrive in the reader thread.  The problem was fixed by re-
        initializing the semaphores on the last uart_close() on the device.
        From Harald Welte
      - Pipes: Fixes some issues found by the PX4 team using Coverity.  From
        Pavel Krienko
      - CDC/ACM driver: Fixes some issues found by the PX4 team using
        Coverity.  From Pavel Krienko

    * NXP LPC43xx Drivers:

      - LPC4357: Changes required to get USART 2 & 3 working on the
        lpc4357-evb.  From Toby Duckworth.

    * STMicro STM32:

      - Several fixes correcting issues with the STM32 header files from
        Jussi Kivilinna

    * STMicro STM32 Drivers:

      - Ported Tridge's STM32 I2C noise resilience logic from the PX4
        repository.
      - STM32 F2 and F4:  Set the GPIO_SPEED_50MHz on all F2 and F4 SPI pin
        configurations.  This is based on an F411 SPI1 errata but the fixed
        is generalized to all SPI and all F2 and F4.  Discovered and fixed
        by Sebastien Lorquet.
      - Fix for STM32 OTGHS device driver working in FS mode.  From Ken
        Pettit.
      - For STM32 OTG HS DEV (in FS mode): Disable ULPI clock enable in RCC
        AHB1 Register.  If Both ULPI and the FS clock enable bits are set in
        FS mode, then the ARM never awakens from WFI due to a chip issue.
        This is only an issue if you are using the internal PHY.  From Ken
        Pettit.
      - STM32 F429 LTDC: Add missing clut register definition. From Marco
        Krahl
      - STM32 serial: fix declaration and definition of up_receive() and
        up_dma_receive() to match fields in the interface definition of
        struct uart_ops_s.  From Freddie Chopin.

    * TI Tiva Drivers:

      - Fix Tiva IRQ control logic; was limited to only 64 IRQs.  That is a
        problem for higher numbered IRQs on many platforms

    * C Library/Header Files:

      - avsprintf():  Fix a bug in usage of va_list on x86.  On x86,
        va_list is a pointer to a single copy on the stack.  avsprintf()
        calls lib_vsprintf() twice and so traverses the va_list twice using
        va_start.  va_start modifies that single copy on the stack so that
        the second call to lib_vsprintf() fails.  This appears to be an
        issue with x86 only so far.
      - stdint.h:  Don't use hex values to specify minimum values of fixed
        width, signed values.  Hex values are inherently unsigned and not
        usable for this purpose in all contexts.
      - strncpy():  Would trash a lot of memory if n == 0.  From Yasuhiro
        Osaki.
      - sscanf().  Accept %X and %F as well as %x %f as a format specifiers.
        From Sébastien Lorquet

    * Applications:

      - apps/examples/romfs: fix romfs example builtin app registry issue.
        From Librae
      - apps/system/cdcacm, composite and usbmsc:  Fix some strangely placed
        conditional compilation.  Looks like an automated update went awry
      - apps/netutils/telnetd:  Add protection when CONFIG_SCHED_HAVE_PARENT
        is enabled:  Call sigaction with SA_NOCLDWAIT so that exit status is
        not retained (no zombies) and block receipt of SIGCHLD so that
        accept is not awakened by a signal.  If accept() is awakened by a
        signal, do not do anything crazy like exit.  Most from Rony Xln
      - apps/nshlib/: NSH TFTP get command:  Wrong file name used for the
        destination.  From Lazlo
Gregory Nutt's avatar
Gregory Nutt committed
8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419

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:
      http://www.nuttx.org/doku.php?id=wiki:nxinternal:memconfigs#the_roadmap_toward_processes

    * 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 Archtectures:

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