Version 32 (modified by ChrisJohns, on May 2, 2008 at 3:36:43 AM) (diff)

DHCP Client changes.

4.9 Release Notes

Open Ideas are are: RTEMS49Ideas?

This page lists the changes and improvements that are planned and/or have been made to the RTEMS development source since the 4.8 release branch was made. As usual, there will be submissions that are not expected and incorporated as ready into the 4.8 release. In keeping with project history, the feature set of the 4.9 release series will be largely be driven by user submissions and requests.

<blockquote> Snapshots from this development effort are numbered 4.8.99.x. </blockquote>

<blockquote> The RTEMS project provides built tools sets that are available for download. For Linux the RPM package formater is support and avaliable from the APT/Yum Repository. For Windows MinGW Executable Installers are available. </blockquote>

If any changes or enhancements are missing in this list, feel free to add them. After all, that's why this is a Wiki.

Tool Improvements

  • Ralf Corsepius is continuing on his effort to improve the build infratructure and eventually support the CPU and BSP Kits in released version. This is both an RTEMS and a Tool Improvement as Ralf's goal is to be able to release CPU Kits in binary RPM form. In late May 2007, he made his first cpukits available for testing.
  • Thanks again to Ralf, it is possible to provide target specific versions of the development tools. This is important when GCC drops support for an old architecture or we are avoiding target specific bugs in a particular tool version. Nominally, most RTEMS targets will use the same tools and they have been upgraded to the following versions:
    • autoconf 2.61
    • automake 1.10
    • binutils 2.18
    • gcc 4.3.x for C/C++ with newlib 1.16.0
    • gdb 6.7.1

The latest patch for each tools is in rtems/contrib/crossrpms/patches.

RTEMS Improvements

In this section, we discuss public API level changes as well as improvements to the implementation of those API routines.

Public API changes usually fall into one of the following categories:

  • Addition of new methods
  • Modifications to prototypes
  • Deletion of obsoleted methods

Implementation improvements usually fall into one of the following categories:

  • Algorithm improvements in execution time or memory usage
  • Critical section reduction

API Changes

  • Added readv() and writev(). Implemented by JoelSherrill
  • Added rtems_task_self(). Implemented by JoelSherrill
  • Added posix_memalign(). Implemented by JoelSherrill
  • Added Object Manager including documentation. Includes many new helper services related to object classes, Ids, and names and renamed some existing but unofficially available and undocumented services. Implemented by JoelSherrill. Changes include:
    • Added rtems_build_name() - build object name from characters
    • Added rtems_object_get_classic_name() - lookup name from id
    • Added rtems_object_get_name() - obtain object name as string
    • Added rtems_object_set_name() - set object name
    • rtems_object_id_api_minimum() - obtain minimum API value
    • rtems_object_id_api_maximum() - obtain maximum API value
    • rtems_object_id_api_minimum_class() - obtain minimum class value
    • rtems_object_id_api_maximum_class() - obtain maximum class value
    • rtems_object_get_api_name() - obtain API name
    • rtems_object_get_api_class_name() - obtain class name
    • rtems_object_get_class_information() - obtain class information
    • Renamed rtems_get_node() to rtems_object_id_get_node()
    • Renamed rtems_get_api() to rtems_object_id_get_api()
    • Renamed rtems_get_class() to rtems_object_id_get_class()
    • Renamed rtems_get_index() to rtems_object_id_get_index()
  • rtems_clock_get() is an overloaded routine which takes an enumerated value to indicate that format of the time related information that will be returned through the void * pointer. This particular method is certainly not an example of strong typing. Moreover, since its generality results in the inclusion of code which is almost certainly unused in any particular application. For example, it can return the current time of day in three formats. In this light, a set of new, smaller methods were refactored from rtems_clock_get() and the new version of rtems_clock_get() is implemented as subroutine calls to the new routines. These new routines should be simpler and easier to use. They are:
    • rtems_clock_get_tod() - Obtain TOD in Classic API structure
    • rtems_clock_get_tod_timeval() - Obtain TOD in struct timeval
    • rtems_clock_get_seconds_since_epoch() - Obtain TOD as seconds since 1988
    • rtems_clock_get_ticks_since_boot() - Obtain ticks since boot
    • rtems_clock_get_ticks_per_second() - Obtain ticks per second

API Implementation Improvements

  • The region directives were restructured in order to produce simpler assembly code and allow for complete test coverage. Changes included:
    • move the OBJECTS_LOCAL case to the top of the switch statement,
    • use a single exit with one call to _RTEMS_Unlock_allocator,
    • eliminate the fall-through return of RTEMS_INTERNAL_ERROR.
  • Code Space Reduced - Much work has gone on and continues to go on in this area. Some of the improvements are:
    • Configure time control over inlining of some RTEMS internal routines.
    • OBJECT_REMOTE is now defined only in multiprocessor configuration. Having this constant led to the generation of code which could not be reached in single processor configurations.
    • More files with multiple methods were split including the Malloc Family, POSIX timers, and many of the POSIX stubs for routines RTEMS does not support.
    • When a set of initialization tasks or threads is not configured for a particular API, those task/thread creation routines are no longer required in the minimum executable. For examnple, in 4.8 and older, the code to create POSIX initialization threads was always present when POSIX was enabled and thus pthread_create() was included in the executable.
  • Each object class no longer allocates a name table. The name information is always stored directly with the object. This was an improvement in memory usage.

Configuration Changes

  • Addition of configure constants in confdefs.h:
    • CONFIGURE_MALLOC_DIRTY - enable dirtying of memory returned by malloc().
    • CONFIGURE_MALLOC_STATISTICS - enable more detailed statistics gathering.
    • CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY - By default, RTEMS does not zero the RTEMS Work Space or C Program Heap. The BSP can change the default to zeroing this memory. Further even if the BSP does not require this zeroing, the application can use this constant to specify that it requires it.
    • CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK - defined by BSP which wants to be able to extend the C Program Heap at run-time.
    • CONFIGURE_TASK_STACK_ALLOCATOR and CONFIGURE_TASK_STACK_DEALLOCATOR - allow the application to define their own task stack allocation routines.
  • Addition of network stack configuration parameters to control default buffer sizes for sockets. This addresses the issue that was described in in which the default socket buffer tend to be large in comparison to the amount of memory users configure for mbufs. This leads to a starvation and TCP/IP "freeze". This scenario can be created with just a handful of sockets and fairly light traffic and is worsened by use of UDP sockets which default to larger buffering than TCP sockets. See the Network Supplement for more details on each of the following parameters:
    • sb_efficiency - buffering factor or multiplier
    • udp_tx_buf_size - default size of transmit buffers for UDP sockets
    • udp_rx_buf_size - default size of receive buffers for UDP sockets
    • tcp_tx_buf_size - default size of transmit buffers for TCP sockets
    • tcp_rx_buf_size - default size of receive buffers for TCP sockets
  • Addition of error checks for the following common application configuration mistakes:
    • Configuring POSIX objects or a POSIX initialization thread without POSIX being configured
    • Configuring ITRON objects or a POSIX initialization task without ITRON being configured
    • Add CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER configuration parameter so the application has to explicitly configure the Clock driver in or out if the Timer driver is not configured.
    • Configuring a multiprocessor application when RTEMS was configured for multiprocessing.

RTEMS Shell Improvements

The RTEMS Shell has many improvements.

  • Can run scripts from a file.
  • Can configure set of commands available in application.
  • Commands not tied to shell implementation so you can use them in your own "maintenance shell".
  • Many new commands:
    • malloc [info|stats]
    • cpuuse - [-r] print or reset per thread cpu usage
    • stackuse - print per thread stack usage
    • perioduse - [-r] print or reset per period usage
    • wkspace - Report on RTEMS Executive Workspace
    • ifconfig
    • route
    • cp, mv, ln from NetBSD
    • mount


  • telnetd overhaul submitted by Till Straumann.
  • Promotion of libmisc components to "first class citizens". This involves changing the name of routines to reflect RTEMS naming standards, adding documentation to the Users Guide and where appropriate integrating them more tightly with the RTEMS SuperCore? or API implementations.
    • Components left TBD
  • Malloc Family refactoring and improvements. Previously, these routines were in only a couple of files. Now they are in multiple files. In addition, the malloc() features that were previously now conditionally compiled can be enabled at run-time. This includes statistics and setting all malloc'ed memory to 0xc5c5c5c5 to ease debugging.
  • DHCP client changes from Arnout Vandecappelle and Maarten Van Es to allow a DHCP request to be request when the interface detects valid media.

BSPs and Device Drivers

  • New BSPs
    • powerpc/gen83xx - New BSP for MPC83xx from Thomas Doerfler
    • TBD
  • Significant updates to existing BSPs
    • i386/pc386 - Clock driver now supports nanoseconds per tick
    • powerpc/gen5200 - Now supports Freescale IceCube? board variant.
    • TBD
  • Removal of obsoleted BSPs
    • TBD

Test Suites

  • In addition to adding new tests to the psxtests and sptests for new functionality, existing tests were enhanced and new tests added to improve coverage.
  • The Ada tests were updated so that they would compile and run without errors. Tests that were no longer valid using the current binding were removed.
  • The Ada example programs received a considerable amount of cleanup and saw the addition of a few new tests.
    • cpuuse to demonstrate long names for POSIX threads via Ada by JoelSherrill
    • test_exception to demonstrate Ada exceptions by Laurent Guerby?
    • dumpwebpage from web to demonstrate GNAT sockets
    • delay_until from web to demonstrate stability of RTEMS timing
    • pingpong is from web to demonstrate GNAT sockets
    • stack_check to demonstrate GNAT Ada task stack checking is functional by JoelSherrill
    • task_priority to show how Ada priorities map onto SuperCore? priorities by JoelSherrill


This section covers the API changes between the 4.8 and 4.9 release series which are expected to have an impact on application source code. This section does NOT cover additions to the API.

  • As part of adding the new set of Object Services, some existing undocumented routines that previously existed were renamed as follows:
    • Renamed rtems_get_node() to rtems_object_id_get_node()
    • Renamed rtems_get_api() to rtems_object_id_get_api()
    • Renamed rtems_get_class() to rtems_object_id_get_class()
    • Renamed rtems_get_index() to rtems_object_id_get_index()

=Changes Per Point Release=

Release 4.9.0 Changes

When this happens, you will be the first to know. :)