4.10 Release Notes
The 4.9 branch was cut in June 2010 and 4.10 was released on 8 February 2011. This is the first release from the 4.10 Release Series. Please help by reporting success and updating the list at the bottom of this page.
This page lists the changes and improvements that were 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.
The RTEMS project provides built tools sets that are available for download. For Linux the RPM package format is supported and available from the APT/Yum Repository. For Windows MinGW Executable Installers are available.
If any changes or enhancements are missing in this list, feel free to add them. After all, that's why this is a Wiki.
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.68
- automake 1.11.1
- binutils 2.20.1
- gcc 4.4.x or C/C++ with newlib 1.18.0
- gdb 7.1
The latest patch for each tools is in rtems/contrib/crossrpms/patches.
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
- 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:
- 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.
- The interrupt handler type of the Interrupt Extension API changed.
- The file ops table has been extended with a rename and statvfs handler.
- The mount call has been changed. It does not return a mount table and file operations tables are not needed. An rtems_filesystem_register call has been added to add file systems. A number of file system initialize calls have changed and access to the file ops tables for some file systems have been removed.
- The TFTP file system is not forced to be mounted to "/TFTP". It operates more like a normal file system. See PR 1536 for details.
- Wei Shen submitted an implementation of POSIX pipes.
- JoelSherrill submitted an implementation of getrusage().
API Implementation Improvements
- 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.
- STACK_CHECKER_ON renamed to CONFIGURE_STACK_CHECKER_ENABLED.
- 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 if 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 --enable-itron to configure to build it.
- The BDBUF cache options CONFIGURE_HAS_OWN_BDBUF_TABLE, CONFIGURE_BDBUF_BUFFER_SIZE, and CONFIGURE_BDBUF_BUFFER_COUNT are no longer valid and generate a compile time error. The options CONFIGURE_SWAPOUT_WORKER_TASKS, CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY, CONFIGURE_BDBUF_CACHE_MEMORY_SIZE, CONFIGURE_BDBUF_BUFFER_MIN_SIZE and CONFIGURE_BDBUF_BUFFER_MAX_SIZE are available to the user to configure the cache.
- File systems need to be configured and added to the default file system configuration table. The default is just the IMFS.
RTEMS Shell Improvements
The following improvements were made to the RTEMS Shell:
- Reduced non constant memory usage.
- New command fdisk.
- 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. This call found the parent by evaluating the path ".." on a node how-ever some file systems cannot do this. The
unlinkcalls 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]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]and the Non-volatile disk is
- 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.
- The RTEMS File System or RFS had been added to RTEMS. This is a block based file system capable of handling small to large disks.
- Restored the default behaviour of BOOTP/DHCP to loop for-ever when a failure occurs. If an error occurs, such as no suitable interface is detected, a panic occurs and the target resets. Users can call BOOTP directly to handle system specific cases of BOOTP/DHCP that may not loop for-ever.
- Libblock devices must be added as block type I/O device. The FAT and RFS file system expect the device nodes to be block.
- The IMFS now has a correctly working rename call. It did not handle the rename of a directory that was not empty. The MSDOS file system has a working rename that does not use the link hack.
- SIMD Support for select CPU architectures has been implemented in RTEMS-4.10. This means that RTEMS automatically preserves the SIMD register context across context switches and exceptions/interrupts. Here is more information about SIMD support.
- The powerpc port now supports AltiVec.
- The i386 port now supports SSE.
BSPs and Device Drivers
- 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
- Drivers: Clock, Console, SSP (SPI mode), I2C, RTC, Ethernet (transmit DMA not supported), DMA
- Drivers: Clock, Console, Ethernet, RTC
- 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.
- Removal of obsoleted BSPs
- PowerPC/mbx8xx - http://www.rtems.com/ml/rtems-users/2008/december/msg00066.html
- i386/pck6 - pc386 build variant deemed not worth building anymore
- 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. They support now also the Interrupt Extension API.
- Changed interrupt support to use the generic implementation in
- Many tests have been added since the 4.9 release series. These tests are focused on improving test coverage.
RTEMS API Changes
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.
- There are no API changes.
Changes Per Point Release
Release 4.10.1 Changes
This release will be the second in the 4.10 series and has not been cut yet. This section describes changes on the 4.10 CVS branch made AFTER 4.10.0 was released.
Significant changes between 4.10.0 and 4.10.1 include the following:
Issues With Problems Report Numbers
- 1838/filesystem - fchmod() does not need a writeable file descriptor.
- 1837/bsps - Add mvme2400 board with 750 CPU to list of supported motorola boards
- 1833/bsps - pc386 ne2000 driver had broadcast reception disabled by previous multicast patch. Also includes support for use on big endian CPUs.
- 1832/libcpu - On ARM at91rm9200, the bsp_interrupt_dispatch() routine did not determine the correct interrupt source number.
- 1812/filesystem - IMFS did not set st_blksize.
- 1786/bsps - Update MVME500 BSP
- 1783/bsps - SPARC BSPs - Remove prototypes that do not have bodies
- 1781/bsps - Add TLL6527M BSP
- 1775/filesystem - Address NFS issue where read/write problems when requested bytes greater than nfsStBlksize. Failure to create files and symlinks.
- 1774/filesystem - IMFS limits filename sizes to mounted directories.
- 1772/bsps - mrm332 BSP console default baud rate does not match ROM monitor
- 1768/bsps - Add cld to i386 ISR processing before calling C code.
- 1760/misc - CPP setting in c/make/compilers/gcc-target-default.cfg is broken
- 1759/cpukit - Some POSIX routines not allowing IDs from Classic API Tasks
- 1757/filesystem - Fix a bug in RFS where file size was not handled cleanly on open and then lseek of small amounts to extend a file where lost.
- 1756/bsps - PC386 Timer calibration failure needs retries
- 1751/bsps - ep1a start code has typo
- 1750/bsps - new erc32 console missing polling/interrupt mode lose TX interrupt
- 1749/filesystem - mknod allows more than one file type in the mode flags
- 1748/bsps - SPARC BSPs nanoseconds skipping back when counter wraps during get TOD or uptime call
- 1744/doc - C Users Manual invalid reference to 'rtems_clock_time_value'
- 1738/bsps - Add support for dynamic clock speed determination. This algorithm is described in the README file.
- 1722/networking - Support spaces in FTPD commands and filenames.
- 1381/networking - Multicast sendto() fails unless a reachable gateway is specified
Issues Without Problems Report Numbers
- c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h was missing extern "C"
Release 4.10.0 Changes
This release is the first in the 4.9 series and was cut on 8 February 2011.