Version 44 (modified by Sh, on Oct 21, 2009 at 4:58:15 PM) (diff)

/* BSPs and Device Drivers */

4.10 Release Notes

Table of Contents

    Error: Page TBR/UserManual/4.10_Release_Notes does not exist

Open Ideas are are: RTEMS410Ideas?

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

<blockquote> Any snapshots made during this development effort are numbered 4.9.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

  • TBD
  • 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.63
    • automake 1.10.1
    • binutils 2.19
    • gcc 4.4.x (expected) for C/C++ with newlib 1.17.0
    • gdb 6.8

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

  • A number of RTEMS specific types have been deprecated which are no longer necessary based upon the types provided by C99. user is encouraged to use C99 types. If you have application that uses these types, you can defined (RTEMS_DEPRECATED_TYPES when building your application to enabled them. They will be removed completely in a future release series and this is intended to be a transition release. The following types have been deprecated:
    • boolean, rtems_boolean (use bool, instead)
    • single_precision, rtems_single (use float, instead)
    • double_precision, rtems_double (use double, instead)
  • rtems_initialize_data_structures() now takes no arguments. This should impact no application or BSP as this was only referenced in shared framework code.
  • Region Manager directives now use uintptr_t instead of size_t. The size_t type is defined to be able to represent the size of a SINGLE allocatable object. A region instance is intended to be able to hold multiple allocatable object instances and allocations from it should be able to represent pools of objects. This change should be transparent to the user. This impacted the following directives:
    • rtems_region_create
    • rtems_region_extend
    • rtems_region_get_segment
  • stat buffer returns the device the file subject to the stat is on in st_dev and if the file is a device node the device details are returned in st_rdev. RTEMS incorrectly returned the device details in the st_dev field.

API Additions

  • Wei Shen submitted an implementation of POSIX pipes.
  • JoelSherrill submitted an implementation of getrusage().

API Implementation Improvements

  • TBD

Configuration Changes

  • The capability to have RTEMS operate with the RTEMS Workspace and C Program Heap as a combined pool. Historically, RTEMS has had separate memory pools for the RTEMS Workspace and C Program Heap. Having separate pools does have some advantages in the event a task blows a stack or writes outside its memory area. However, in low memory systems the overhead of the two pools plus the potential for unused memory in either pool is very undesirable. Similarly, in high memory environments, this is desirable when you want to use the RTEMS "unlimited" objects option. You will be able to create objects until you run out of all available memory rather then just until you run out of RTEMS Workspace. Define CONFIGURE_UNIFIED_WORK_AREAS to enable this configuration.
  • Filesystem support can be controlled by the user. By default, filesystem infrastructure is included, define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM to disable filesystem support.
  • RTEMS now has a device-only filesystem which is smaller in size than miniIMFS and IMFS, define CONFIGURE_USE_DEVFS_AS_BASE_FILESYTEM to enable this configuration.
  • The Configuration Table has had the pointers to the Classic, POSIX, and ITRON API Configuration Tables removed. RTEMS now directly references the configuration information using variables which are assumed to have the names generated by confdefs.h. This resulted in a small reduction in data space and about 4.5% off the code space for minimum and hello on the SPARC with lesser reductions on the Thumb.
  • Provide a C linkage Init task prototype. By default the Init task now expects a pointer to a global command line string. Set this pointer to NULL is no command line is present. A shared BSP Init task is also provided with weak external linkage so you can now write an application that enters with main rather Init.
  • ITRON configuration defaults to "no". One now has to explicitly pass <i>--enable-itron</i> to configure to build it.
  • TBD

RTEMS Shell Improvements

The following improvements were made to the RTEMS Shell:

  • Reduced non constant memory usage.
  • New command <tt>fdisk</tt>.
  • External mount helpers can be hooked onto the mount command.
  • Login check function is now configurable.


  • SuperCore? Timestamp Handler added. This includes the capability to select struct timespec or int64_t as the data type used for internal RTEMS time management.
  • Heap and region now use uintptr_t for size of memory pools and individual allocations. size_t is only defined to have a range large enough to represent the size of a SINGLE allocated object so this is necessary for correctness and to fix breakages on 16-bit targets.
  • RTEMS now supports configuring less than 256 priorities. During the 4.10 development cycle, all tests were run in a configuration that had a maximum of 16 priorities. This involved improvements to the tests to react to the number of priority levels not being a static value and fixed some bugs in the POSIX and ITRON API implementations.
  • New API to manage partitions of disk devices. The MBR and GPT partition formats are supported. Currently the GPT support is not implemented.
  • New API for Universally Unique Identifiers.
  • RTEMS file system generics have changed removing the {{{rtems_filesystem_evaluate_parent</code>. This call found the parent by evaluating the path ".." on a node how-ever some file systems cannot do this. The {{{rmnod</code> and {{{unlink</code> calls now evaluate the parent path first then the child node with a relative evaluation from the parent. To do this a path length was added to the evaluate call and all file system handlers. Note, some file system such the NFS client still have a work around.
  • The IMFS file system now handles all POSIX flags correctly in the chmod call and ignores flags that are not permission flags.
  • The RAM disk device path has changed to {{{/dev/rd[abcd]</code> where the RAM disk drives are numbered 'a', 'b' etc. This brings the RAM disk inline with the hard disk device naming. The flash disk is now {{{/dev/fdd[abcd]</code> and the Non-volatile disk is {{{/dev/nvd[abcd]</code>.
  • The libblock BD buffer cache has been changed to support demand driven variable size buffers. There is now only a single pool of buffers and the user configures the minimum and maximum buffer size plus the amount of memory in the cache. Driver now have a media block size and file systems can set a block size. Driver need to be able to handle the new block size.

BSPs and Device Drivers

  • General
    • Consolidation of various bsp_cleanup() implementations and a general push for as many BSPs as possible to use shared implementations. [Effort underway]
    • All BSPs have been modified to use the BSP Framework to allocate memory to RTEMS and the C Program Heap. It is now assumed that each BSP will provide an implementation of bsp_get_work_area() and it is HIGHLY encouraged that you use the shared one in libbsp/shared.
    • With the move to have more BSPs provide bsp_get_work_area() and use more of the BSP Framework, some BSPs no longer required BSP specific actions in bsp_start(). Now there is a stub implementation of this method for BSPs not requiring it.
    • Similarly, with the move to have more BSPs use more of the BSP Framework, most BSPs no longer require a BSP specific implementation of bsp_pretasking_hook() and can use the shared stub implementation.
    • NOTE: Please check all BSP calls to boot_card. The boot_card call has changes and now only takes a single pointer to the boot command line. If your BSP does not support a command line pass NULL to boot_card.
  • LibI2C: Bus mutexes will be created now once during registration and not on the fly. Maybe addition of an asynchronous data transfer API.
  • SD Card Driver: Overall cleanup.
  • New BSPs
    • ARM/LPC24XX
      • Drivers: Clock, Console, SSP (SPI mode), I2C, Ethernet (transmit DMA not supported), DMA
    • lm32/lm32_evr
      • Working drivers for Lattice timer (clock), serial port (console), network
      • thread aware gdb-stub support
  • Significant updates to existing BSPs
    • PowerPC/MPC55XX - Overall cleanup and improvements.
  • pc386: Added support for the multiboot kernel command line. The options now supported are:
    • --console=: The options can be console for the PC console, and com1 or com2 for serial port consoles.
    • --ide=: List of IDE controller to initialise. For example --ide=1,2 for both IDE1 and IDE2 and --ide=2 for just IDE2.
  • i386 architecture BSPs:
    • Changed interrupt support to use the generic implementation in {{{c/src/lib/libbsp/shared</code>. They support now also the Interrupt Extension API.

Test Suites

  • TBD


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

  • TBD

=Changes Per Point Release=

==Release 4.10.0 Changes==

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