Changes between Version 13 and Version 14 of Developer/OpenProjects


Ignore:
Timestamp:
03/06/08 21:56:13 (16 years ago)
Author:
JoelSherrill
Comment:

Bulk replacement edited offline. Some formatting errors will be corrected subsequently.

Legend:

Unmodified
Added
Removed
Modified
  • Developer/OpenProjects

    v13 v14  
    22
    33
    4 This page captures ideas for RTEMS projects.  They range from OS projects to development environment to testing to just about anything else.  If you like one of the ideas, you can pitch in and tackle it.  If you aren't able to code and test it yourself, consider sponsoring one of the core RTEMS developers to do it for you.  This is really the only way things get done -- USERS LIKE YOU KEEP RTEMS DEVELOPMENT ALIVE!!!
    5 
    6 The projects on this page are lumped into broad categories but there is no prioritization applied to the order.  It is just an organized dump of ideas. :)
    7 
    8 Most of the projects are feasible as a Google [wiki:Summer_of_Code Summer of Code] project.  A few have multiple steps and a [wiki:Summer_of_Code Summer of Code] participant should work with us to size up how much is doable.
     4This page captures ideas for RTEMS projects.  They range from OS projects
     5to development environment to testing to just about anything else.
     6If you like one of the ideas, you can pitch in and tackle it.  If you
     7aren't able to code and test it yourself, consider sponsoring one of
     8the core RTEMS developers to do it for you.  This is really the only
     9way things get done -- USERS LIKE YOU KEEP RTEMS DEVELOPMENT ALIVE!!!
     10
     11The projects on this page are lumped into broad categories but there is
     12no prioritization applied to the order.  It is just an organized dump
     13of ideas with enough details to give an outline of the effort required.
     14
     15We do not provide time estimates on these because the time depends
     16on the experience and skill of the developer. Most of these projects
     17will fall between a few weeks and a few months of effort by a
     18person who is not completely unfamiliar with the general use of GNU/Linux
     19and GNU tools.  Some of these projects may consist of multiple steps.  In
     20this case, each step is defined to fall into short discrete steps.
     21
     22Many RTEMS projects are done as student or volunteer efforts in a person's
     23spare time or as a hobby.  This means it is imperative that projects be
     24either relatively small or divided into steps that can be considered
     25complete and committed to the main RTEMS source base.  Thus we have
     26lots of experience in defining useful projects that are sized to be
     27doable and useful to the community in relatively small work packages.
     28
     29Most of the projects are feasible as a Google [wiki:Summer_of_Code Summer of Code] project.
     30Since some projects have multiple steps, a [wiki:Summer_of_Code Summer of Code] participant
     31should work with us to size up how many of those steps to undertake.
    932= Development Environment Oriented =
    1033
    1134
    12 Remember that RTEMS is a real-time operating system targeting embedded applications.  Applications are cross-compiled on a development host to produce executables that are transferred to and executed on target systems.  The projects in this section are more focused on the host side of that equation.  This means they will run on GNU/Linux or MS-Windows and possibly communicate with embedded hardware. 
    13 
    14 RTEMS is a free real-time operating system that must compete against commercial closed source offerings that have very impressive looking GUI oriented Development Environments.  The RTEMS Project has spent years honing RTEMS and tuning it to be a competitive run-time and it certainly the technical capabilities to compete.  But often RTEMS gets dinged for not having a "pretty face".  Some of the projects in this category address that deficiency.
     35Remember that RTEMS is a real-time operating system targeting embedded
     36applications.  Applications are cross-compiled on a development host
     37to produce executables that are transferred to and executed on target
     38systems.  The projects in this section are more focused on the host side
     39of that equation.  This means they will run on GNU/Linux or MS-Windows
     40and possibly communicate with embedded hardware.
     41
     42RTEMS is a free real-time operating system that must compete against
     43commercial closed source offerings that have very impressive looking
     44GUI oriented Development Environments.  The RTEMS Project has spent
     45years honing RTEMS and tuning it to be a competitive run-time and it
     46certainly the technical capabilities to compete.  But often RTEMS gets
     47dinged for not having a "pretty face".  Some of the projects in this
     48category address that deficiency.
    1549= Eclipse Integration =
    1650
     
    1852STATUS: No active work
    1953
    20 [http://www.eclipse.org Eclipse] is an open source Integrated Development Environment (IDE) which has become very popular in the real-time embedded systems community.  For RTEMS to continue to compare favorably against its commercial proprietary competition, Eclipse support is an important feature.  Eclipse has a plug-in architecture and there are already multiple plug-ins and add-ons for embedded development. 
    21 
    22 This is a very open ended project which has a number of steps based upon subprojects or plugins which need to be made available to RTEMS developers.
     54[http://www.eclipse.org Eclipse] is an open source Integrated Development
     55Environment (IDE) which has become very popular in the real-time embedded
     56systems community.  For RTEMS to continue to compare favorably against
     57its commercial proprietary competition, Eclipse support is an important
     58feature.  Eclipse has a plug-in architecture and there are already
     59multiple plug-ins and add-ons for embedded development.
     60
     61This is a very open ended project which has a number of steps based
     62upon subprojects or plugins which need to be made available to RTEMS
     63developers.
    2364
    2465 *  C/C++ Development Tooling (CDT)
     
    2667 *  Target Management.
    2768
    28 See http://www.eclipse.org/home/categories/embedded_device.php as a reference.
    29 
    30 Since RTEMS has multiple targets, this project would focus on getting Eclipse working nicely with multiple targets.  There are over half a dozen simulators which are capable of supporting a multithreaded RTEMS application and a few of those simulate target hardware with networking capabilities. There are existing RTEMS BSPs that run on simulators so the person(s) working on this project would not require special target hardware or anything that costs to verify that their implementation works with multiple hardware configurations.
     69See http://www.eclipse.org/home/categories/embedded_device.php as
     70a reference.
     71
     72Since RTEMS has multiple targets, this project would focus on getting
     73Eclipse working nicely with multiple targets.  There are over half a
     74dozen simulators which are capable of supporting a multithreaded RTEMS
     75application and a few of those simulate target hardware with networking
     76capabilities. There are existing RTEMS BSPs that run on simulators so
     77the person(s) working on this project would not require special target
     78hardware or anything that costs to verify that their implementation
     79works with multiple hardware configurations.
    3180= CEXP =
    3281
    3382
    34 Status: [wiki:ChrisJohns ChrisJohns] has started this effort.  Contact him for information on how you can help.
    35 
    36 The goal of this project is to integrate CEXP into the main RTEMS Project.  By integrating CEXP into the main RTEMS Project, it can more easily be updated to stay in sync with the main code base and re-released as new RTEMS versions come out.
    37 
    38 [http://www.slac.stanford.edu/comp/unix/package/rtems/doc/ CEXP] in conjunction with GeSYS provide RTEMS with capabilities long familiar to VxWorks users.  They provide a base system and the ability to dynamically load software modules onto the embedded system.  Without this system, RTEMS can only be used with statically linked executables in which the entire application is linked together with RTEMS and loaded onto the board.
    39 
    40 
    41 Till Straumman wrote CEXP and GeSYS anbd provides instructions and a Live CD to demonstrate it running with the target environment on qemu.  This would be useful to someone on this project because it provides a baseline reference for what the software does.
     83Status: [wiki:ChrisJohns ChrisJohns] has started this effort.  Contact him for
     84information on how you can help.
     85
     86The goal of this project is to integrate CEXP into the main RTEMS Project.
     87By integrating CEXP into the main RTEMS Project, it can more easily be
     88updated to stay in sync with the main code base and re-released as new
     89RTEMS versions come out.
     90
     91[http://www.slac.stanford.edu/comp/unix/package/rtems/doc/ CEXP] in
     92conjunction with GeSYS provide RTEMS with capabilities long familiar to
     93VxWorks users.  They provide a base system and the ability to dynamically
     94load software modules onto the embedded system.  Without this system,
     95RTEMS can only be used with statically linked executables in which
     96the entire application is linked together with RTEMS and loaded onto
     97the board.
     98
     99
     100Till Straumman wrote CEXP and GeSYS anbd provides instructions and a
     101Live CD to demonstrate it running with the target environment on qemu.
     102This would be useful to someone on this project because it provides a
     103baseline reference for what the software does.
    42104= Application Configuration GUI =
    43105
     
    45107Status: No active volunteers.
    46108
    47 The goal is to have a graphical tool to configure RTEMS for a certain Application e.g. max number of tasks, semaphores etc. It could generate a userconf.h which includes confdefs.h. The complete list of RTEMS configuration parameters for release 4.8.0 are documented in the [http://www.rtems.org/onlinedocs/releases/rtemsdocs-4.8.0/share/rtems/html/c_user/c_user00400.html Configuring a System] chapter in the User's Guide.
     109The goal is to have a graphical tool to configure RTEMS for a certain
     110Application e.g. max number of tasks, semaphores etc. It could
     111generate a userconf.h which includes confdefs.h. The complete list
     112of RTEMS configuration parameters for release 4.8.0 are documented in the
     113[http://www.rtems.org/onlinedocs/releases/rtemsdocs-4.8.0/share/rtems/html/c_user/c_user00400.html
     114Configuring a System] chapter in the User's Guide.
    48115
    49116There are a variety of ways to approach this project.
     
    52119 *  Another solution is to use the config infrastructure used by the GNU/Linux kernel.
    53120
    54 [wiki:TBR/User/JoelSherrill JoelSherrill] has used the GNU/Linux kernel config infrastructure for similar jobs in the past and things it is likely the best alternative as a baseline.  This would certainly provide multiple interfaces on GNU/Linux hosts (e.g. X11, menu, command line).  But we would like a solution that also addresses MS-Windows users.  One possibility is to write a GUI program in Python which parses the same configuration information and provides a portable GUI interface.
     121[wiki:TBR/User/JoelSherrill JoelSherrill] has used the GNU/Linux kernel config infrastructure for
     122similar jobs in the past and things it is likely the best alternative
     123as a baseline.  This would certainly provide multiple interfaces on
     124GNU/Linux hosts (e.g. X11, menu, command line).  But we would like
     125a solution that also addresses MS-Windows users.  One possibility is
     126to write a GUI program in Python which parses the same configuration
     127information and provides a portable GUI interface.
    55128= Automated GNU Tools Testing =
    56129
    57130
    58 Status: No active volunteers.
    59 
    60 Automate gcc testing on RTEMS targets.
     131Status: [wiki:TBR/User/JoelSherrill JoelSherrill] is slowly building test scripts. He has reported
     132gcc results on mulitiple targets but there is still a lot to do.
     133
     134This project broadly consists of doing whatever is required to automate
     135testing of GNU tools on RTEMS targets.  The first steps are to be able
     136to automate the building of binutils, gcc/newlib, and gdb from source
     137using either released versions of the tools or the development version
     138checked out and updated from the source code control repositories of
     139those projects.
     140
     141Since there are approximately a dozen active RTEMS targets, this
     142effort will have to be able to support all targets.  Some of the targets
     143have simulators.  If there are executable tests, then the project will
     144have to address being able to run those executable tests on the simulators
     145capturing the output and verifying tests do not run too long.
     146
     147The RTEMS Project has been offered access to the GCC Compile Farm for
     148the purpose of testing GNU tools and providing automated reports.  This
     149is a collection of high power servers and our intent is to do as much
     150of the automated tools testing as possible on those machines.  But the
     151scripting needed to drive this will be portable to other environments.
     152
     153The RTEMS Project has a lab or test hardware hosted at OAR Corporation
     154which includes multiple target boards and infrastructure to remotely
     155access as well as power on/off each board.  Once the simulator targets
     156have been completely exercised, we will want support running executable
     157tests on real embedded hardware targets -- with highest priority going
     158to those with no simulator.
    61159= RTEMS Tool Support on Debian =
    62160
     
    64162Status: No active volunteers.
    65163
    66 TBD
     164Pre-compiled versions of the RTEMS tools are currently available for
     165RPM-based GNU/Linux distributions such as Fedora, RedHat Enterprise
     166Linux, CentOS, and SUSE as well as MS-Windows via MinGW.  This project
     167consists of the development of comparable .deb package specifications
     168and build scripts.  The resulting packaging and infrastructure should
     169be suitable for at least GNU/Debian and Ubuntu distributions.  As the
     170RTEMS toolset updates frequently, there must be scripting infrastructure
     171developed to build these tools easily when updates are required.
     172
     173[wiki:RalfCorsepius RalfCorsepius] is the RPM builder and maintainer.  He uses Mock
     174to use a single development machine to build binaries for a variety
     175of distributions.  He is a good resource or mentor for this project.
     176
     177The RTEMS Project currently does not have a computer running a
     178Debian based GNU/Linux distribution and would have to have one
     179before these could be supported long term.
    67180= RTEMS Tool Support on MacOS =
    68181
     
    70183Status: No active volunteers.
    71184
    72 TBD
     185The goal of this project is to provide precompiled versions of the
     186RTEMS tools for the x86 MacOS.  As the RTEMS toolset updates frequently,
     187there must be scripting infrastructure developed to build these tools
     188easily when updates are required.
     189
     190Little is know by those who currently build RTEMS tool binaries about
     191the packaging and legal requirements associated with providing
     192MacOS binaries.
     193
     194The RTEMS Project currently does not have a MacOS X computer and would
     195have to have one before these could be supported long term.
    73196= Multilib GNU Ada =
    74197
     
    76199Status: No active volunteers.
    77200
    78 Implement Multilib support for GNU Ada (GNAT) run-time libraries in GCC.
     201The goal of this project is to implement Multilib support
     202for GNU Ada (GNAT) run-time libraries in GCC.  This primary
     203focus of this project will be to augment the existing
     204configure and Makefile infrastructure for the GNU Ada run-time
     205libraries in GCC to build multilib rather than a single library
     206variant.
     207
     208Multilib is a GNU term for building a single source library to be
     209tailored for multiple CPU variants within a single architecture.
     210This is done because even within a CPU architecture, not every
     211CPU model is object code compatible.  For example, on the RTEMS
     212SPARC tools, we provide four libc.a versions -- SPARC V7 and V8
     213with and without hardware floating point support.  Similarly,
     214the m68k target supports many m680x0 and Coldfire core
     215implementations with and without hardware floating point.
    79216= GNU Java =
    80217
     
    82219Status: No active volunteers.
    83220
    84 Get GJC (GNU Java Compiler) to work out of the box with RTEMS
    85 = Visual Studio Integration =
    86 
    87 
    88 Status: No active volunteers.
    89 
    90 Integrate RTEMS Development Environment with [http://msdn2.microsoft.com/en-us/vstudio/bb510103.aspx Visual Studio 2008 Shell].  This would ideally allow project level target configuration, code development, building with GCC backend, deployment, and debugging.
     221The purpose of this project is to make the GJC (GNU Java Compiler)
     222work with RTEMS.  RTEMS is supported as a target in GCC so it is
     223expected that the primary focuses of this project are to adapt
     224the run-time library to RTEMS and make sure as many tests as possible
     225run correctly.
     226
     227There was a previous effort to do this but it was not submitted
     228to the GCC Maintainers.  At this point, it was against such
     229an old version of gcc that it would probably have to be used as
     230a reference more than a code base. 
     231= eVisual Studio Integration ==
     232
     233
     234Status: No active volunteers.
     235
     236Integrate RTEMS Development Environment with
     237[http://msdn2.microsoft.com/en-us/vstudio/bb510103.aspx Visual Studio
     2382008 Shell].  This would ideally allow project level target configuration,
     239code development, building with GCC backend, deployment, and debugging.
     240
     241[wiki:ChrisJohns ChrisJohns] is a good resource for this project because he is
     242the maintainer for the RTEMS MinGW hosted tools
    91243= RTEMS Run-Time Oriented =
    92244
    93245
    94 The projects in this category are more focused on the development of software that runs on RTEMS on target hardware.
     246The projects in this category are more focused on the development of
     247software that runs on RTEMS on target hardware.
    95248= Add Sixty-Four Bit Timestamps =
    96249
     
    98251Status: No active volunteers.
    99252
    100 Prior to the RTEMS 4.8 Releases, RTEMS based all timing on clock ticks.  At each clock tick, the current time of day was updated.  This meant that the granularity of all time stamps and statistics on per-thread CPU usage were constrained to that of the clock tick.  In RTEMS 4.8.0, the lowest level of RTEMS -- the SuperCore (e.g. rtems/cpukit/score) was converted to use POSIX ''struct timespec'' as the format for all timestamps.  In conjunction with the addition of the ability of a BSP to report "nanoseconds since last clock tick", RTEMS could now provide nanosecond accurate timestamps and CPU usage statistics.
    101 
    102 Unfortunately, performing mathematical operations on ''struct timespec'' is painful and slow.  This project will consist of the following work:
    103 
    104  *  Baseline Testing
    105   *  Verify all test cases work as baseline.
    106   *  Capture execution times of RTEMS Timing Tests on reference hardware.
    107   *  Capture sizes of sample tests.
    108 
    109  *  Add a SuperCore object "ScoreTimestamp". 
    110   *  This is an opaque class which will be used by all SuperCore time related functions.
    111   *  Methods will be provided to convert timespec and other standard time formats to and from ScoreTimestamp.
    112   *  RTEMS has a class to operate upon timespec's so this will be implemented in terms of this.
    113   *  Direct operations on timespec's will be eliminated throughout RTEMS except as necessary near API calls which operate upon struct timespec arguments.
    114   *  Initial implementation will be using struct timespec and all methods should be simple pass throughs or wrapper of existing functionality in the Timespec math helper class.
     253Prior to the RTEMS 4.8 Releases, RTEMS based all timing on clock ticks.
     254At each clock tick, the current time of day was updated.  This meant
     255that the granularity of all time stamps and statistics on per-thread
     256CPU usage were constrained to that of the clock tick.  In RTEMS 4.8.0,
     257the lowest level of RTEMS -- the SuperCore (e.g. rtems/cpukit/score)
     258was converted to use POSIX ''struct timespec'' as the format for all
     259timestamps.  In conjunction with the addition of the ability of a BSP
     260to report "nanoseconds since last clock tick", RTEMS could now provide
     261nanosecond accurate timestamps and CPU usage statistics.
     262
     263Unfortunately, performing mathematical operations on ''struct timespec''
     264is painful and slow.  This project will consist of the following work:
     265
     266# Baseline Testing
     267#* Verify all test cases work as baseline.
     268#* Capture execution times of RTEMS Timing Tests on reference hardware.
     269#* Capture sizes of sample tests.
     270
     271# Add a SuperCore object "ScoreTimestamp". 
     272#* This is an opaque class which will be used by all SuperCore time related functions.
     273
     274#* Methods will be provided to convert timespec and other standard time formats to and from ScoreTimestamp.
     275
     276#* RTEMS has a class to operate upon timespec's so this will be implemented in terms of this.
     277
     278#* Direct operations on timespec's will be eliminated throughout RTEMS except as necessary near API calls which operate upon struct timespec arguments.
     279
     280#* Initial implementation will be using struct timespec and all methods should be simple pass throughs or wrapper of existing functionality in the Timespec math helper class.
    115281
    116282Note that by adding the class "ScoreTimestamp", we have added a class whose implementation can be changed.
    117283
    118  *  Verify all existing test cases still work.
    119 
    120  *  Implement alternate version of SuperCore object "ScoreTimestamp" which uses unsigned sixty-four bit integers to represent nanoseconds since the POSIX epoch.
    121   *  This implementation should be fairly simple as you can do direct math on 64-bit integers.
    122 
    123  *  Post Testing
    124   *  Verify all test cases work as they did baseline.
    125   *  Capture execution times of RTEMS Timing Tests again on reference hardware for both implementations.
    126   *  Capture sizes of sample tests.
    127 
    128  *  Evaluation
    129   *  We anticipate that most of the target architectures RTEMS supports will benefit from using the 64-bit integer version.  But RTEMS supports over a dozen architectures so this is certainly not guaranteed.
    130   *  Work with RTEMS Community to run tests on as many targets as possible to decide which is best choice on each architecture.
    131   *  Simulators are available for most of the primary target architectures so we will be able to judge the impact of your work.
     284# Verify all existing test cases still work.
     285# Implement alternate version of SuperCore object "ScoreTimestamp"
     286which uses unsigned sixty-four bit integers to represent nanoseconds
     287since the POSIX epoch.
     288#* This implementation should be fairly simple as you can do direct math on 64-bit integers.
     289
     290# Post Testing
     291#* Verify all test cases work as they did baseline.
     292#* Capture execution times of RTEMS Timing Tests again on reference hardware for both implementations.
     293#* Capture sizes of sample tests.
     294
     295# Evaluation
     296#* We anticipate that most of the target architectures RTEMS supports will benefit from using the 64-bit integer version.  But RTEMS supports over a dozen architectures so this is certainly not guaranteed.
     297#* Work with RTEMS Community to run tests on as many targets as possible to decide which is best choice on each architecture.
     298#* Simulators are available for most of the primary target architectures so we will be able to judge the impact of your work.
    132299= Run-Time Tracing =
    133300
     
    135302Status: [wiki:ChrisJohns ChrisJohns] and [wiki:TBR/User/JoelSherrill JoelSherrill] have done initial work on adding trace points to RTEMS. 
    136303
    137 Instrument RTEMS so that a timeline visualization tool can be used to "place a scope" on a running RTEMS system.  This project has multiple parts. 
     304Instrument RTEMS so that a timeline visualization tool can be used to
     305"place a scope" on a running RTEMS system.  This project has multiple
     306parts.
    138307
    139308 *  Addition of trace points to generate log entries
     
    143312 *  GUI Timeline Visualization tool
    144313
    145 Chris and Joel have done some initial work and prototyping has been done on the first four parts of this.   Chris wrote the capture engine and together Chris and Joel believe that the bulk of the work adding trace points can be done automatically using the GNU ld "wrap capability".  In addition, we believe that a simple text dump of the trace log on the host side can be derived in a highly automated manner.  The code to transmit data from the RTEMS system and to receive the data on the host computer will have to be written.
    146 
    147 Once data has been received on the host side, the next logical step is to display the timeline of events in a graphical fashion.  This may include the development of the visualization tool or an existing may be able to be leveraged. 
    148 
    149 Greg Menke of NASA has used GNU plot to do a simple version of this and may have advice.
     314Chris and Joel have done some initial work and prototyping has been done
     315on the first four parts of this.   Chris wrote the capture engine and
     316together Chris and Joel believe that the bulk of the work adding trace
     317points can be done automatically using the GNU ld "wrap capability".
     318In addition, we believe that a simple text dump of the trace log on
     319the host side can be derived in a highly automated manner.  The code to
     320transmit data from the RTEMS system and to receive the data on the host
     321computer will have to be written.
     322
     323Once data has been received on the host side, the next logical step
     324is to display the timeline of events in a graphical fashion.  This may
     325include the development of the visualization tool or an existing may be
     326able to be leveraged.
     327
     328Greg Menke of NASA has used GNU plot to do a simple version of this and
     329may have advice.
    150330= Implement POSIX Asynchronous and List IO =
    151331
     
    153333Status: No active volunteers.
    154334
    155 RTEMS does not currently support POSIX Asynchronous IO as defined by OpenGroup.  These methods and associated constants are prototyped by the [http://www.opengroup.org/onlinepubs/009695399/basedefs/aio.h.html <aio.h>] header file which is ''cpukit/posix/include/aio.h'' in the RTEMS source tree.  The following methods would have to be implemented:
     335RTEMS does not currently support POSIX Asynchronous IO as defined by
     336OpenGroup.  These methods and associated constants are prototyped by
     337the [http://www.opengroup.org/onlinepubs/009695399/basedefs/aio.h.html
     338<aio.h>] header file which is ''cpukit/posix/include/aio.h'' in the
     339RTEMS source tree.  The following methods would have to be implemented:
    156340
    157341 *  [http://www.opengroup.org/onlinepubs/009695399/functions/aio_read.html aio_read()]
     
    164348All methods currently are implemented in RTEMS as stubs which return ENOSYS.
    165349
    166 It is assumed that the implementation would have to have one or more server threads and these methods would interact with that server thread by enqueueing operation requests and checking on the completion status.  The number of server threads along with characteristics such as stack size and priority would need to be application configurable.
     350It is assumed that the implementation would have to have one or more
     351server threads and these methods would interact with that server thread
     352by enqueueing operation requests and checking on the completion status.
     353The number of server threads along with characteristics such as stack
     354size and priority would need to be application configurable.
    167355= Implement POSIX FIFOs =
    168356
     
    170358Status: No active volunteers.
    171359
    172 Implement POSIX (named) FIFOs and (unnamed) Pipes.  See [wiki:Projects/POSIXFIFOs POSIXFIFOs] for technical details.
     360Implement POSIX (named) FIFOs and (unnamed) Pipes.  See [wiki:Projects/POSIXFIFOs POSIXFIFOs]
     361for technical details.
    173362= Implement Functionality Currently Missing in dup =
    174363
     
    182371Status: No active volunteers.
    183372
    184 Reimplement Classic API notepads and POSIX keys using code like std::map but in C.  I think an implementation of the map code is available under an appropriate license as a starting point.
     373Reimplement Classic API notepads and POSIX keys using code like std::map
     374but in C.  The current implementation requires that enough memory
     375be reserved for every task to have memory for all notepads and
     376every key whether they use them or not.  This results in simple and fast
     377array lookups to access individual values but is obviously heavy on memory.
     378It is hoped that a hash/map algorithm can be found or designed which
     379reduces the memory overhead without adding excessive lookup overhead
     380or heavy handed O(n) algorithms for management of the entries.  This
     381is particularly important because tasks and keys can be dynamically
     382created and deleted.
     383
     384[wiki:TBR/User/JoelSherrill JoelSherrill] and [wiki:PavelPisa PavelPisa] are good resources for this.  Joel
     385can answer questions about the rationale driving this need and help
     386evaluate algorithms.  The run-time behavior of the algorithm is very
     387important because RTEMS strives to be as predictable in run-time
     388execution times and memory usage as possible.  Pavel is very
     389knowledgable about hash algorithms.
    185390= TinyRTEMS =
    186391
     
    188393Status: Ongoing effort with multiple discrete projects.
    189394
    190 Reduce footprint of minimum RTEMS application. Currently a minimum RTEMS application assumes that you want items like a reentrant C library, shutdown code and a minimal filesystem infrastructure.  Some ideas in this area are captured at [wiki:Projects/TinyRTEMS TinyRTEMS].  The project would focus on breaking linkages between components so they can be configured out by the user, dropped out automatically at link time, or other mechanisms.  The goal is to be able to provide the user with a full featured RTEMS library and defer as much configuration as possible to application configuration and link time.
     395Reduce footprint of minimum RTEMS application. Currently a minimum RTEMS
     396application assumes that you want items like a reentrant C library,
     397shutdown code and a minimal filesystem infrastructure.  Some ideas in
     398this area are captured at [wiki:Projects/TinyRTEMS TinyRTEMS].  The project would focus on
     399breaking linkages between components so they can be configured out by
     400the user, dropped out automatically at link time, or other mechanisms.
     401The goal is to be able to provide the user with a full featured RTEMS
     402library and defer as much configuration as possible to application
     403configuration and link time.
    191404= More NIC Drivers =
    192405
     
    194407Status: No active volunteers.
    195408
    196 Convert more NIC drivers from FreeBSD to RTEMS.
     409Convert more NIC drivers from FreeBSD to RTEMS. It would actually be more
     410useful to have an semi-automated procedure to assist developers in porting
     411individual drivers on an as needed basis than a large collection of
     412untested drivers.
    197413= RTEMS Initialization By Constructor =
    198414
     
    200416Status: [wiki:ChrisJohns ChrisJohns] has file a PR with a prototype.
    201417
    202 Add an ordered constructor type system for automatic manager initialization. This should be general enough to support RTEMS managers, drivers and BSD sysctl type nodes.  This is expected to significantly impact the [wiki:Projects/TinyRTEMS TinyRTEMS] effort as it would provide a central mechanism to eliminate code.  If you don't reference it, the initialization code would automatically drop out.
     418Add an ordered constructor type system for automatic manager
     419initialization. This should be general enough to support RTEMS managers,
     420drivers and BSD sysctl type nodes.  This is expected to significantly
     421impact the [wiki:Projects/TinyRTEMS TinyRTEMS] effort as it would provide a central mechanism
     422to eliminate code.  If you don't reference it, the initialization code
     423would automatically drop out.
    203424= BSPs for CPU Simulators =
    204425
    205426
    206 Status: Please ask for detailed information on the particular BSP/simulator combination you are interested in.  There are lots of combinations available and the status changes frequently.
    207 
    208 There are a variety of potential projects listed on the [wiki:Emulator Emulator] and [wiki:Skyeye Skyeye] pages.  Some of these involve addressing issues in the simulator itself.  Others involve developing BSPs for specific simulators.  This is an important area of work since any target that can be tested easily and in an automated fashion on a simulator is always in better shape.
    209 
    210 [wiki:TBR/User/JoelSherrill JoelSherrill] hopes someone will tackle RTEMS support for the ARM PXA models and edp9312 as supported by [wiki:Skyeye Skyeye].  This would benefit RTEMS testing a lot.
     427Status: Please ask for detailed information on the particular
     428BSP/simulator combination you are interested in.  There are lots of
     429combinations available and the status changes frequently.
     430
     431There are a variety of potential projects listed on the [wiki:Emulator Emulator]
     432and [wiki:Skyeye Skyeye] pages.  Some of these involve addressing issues in the
     433simulator itself.  Others involve developing BSPs for specific simulators.
     434This is an important area of work since any target that can be tested
     435easily and in an automated fashion on a simulator is always in better
     436shape.
     437
     438[wiki:TBR/User/JoelSherrill JoelSherrill] hopes someone will tackle RTEMS support for the ARM
     439PXA models and edp9312 as supported by [wiki:Skyeye Skyeye].  This would benefit
     440RTEMS testing a lot.
    211441= RTEMS Virtual Machine Monitor =
    212442
     
    214444Status: No active volunteers.
    215445
    216 RTEMS based RT-VMM (Real-Time Virtual Machine Monitor). Current RTEMS can not support to run another OS (such as Linux or uClinux). We want to add hypervisor (or Virtual Machine Monitor) function on RTEMS, then RTEMS has the power like XEN that can run Linux or other OS, but RTEMS also maintain original hard Real-Time funtions. First, we will try to make RTEMS run uClinux on ARM simulator SkyEye( http://www.skyeye.org ), then  we will try to make RTEMS run ARM Linux on XSCALE CPU based board or SkyEye simulator. We consider virtualization techs on Embedded RTOS area has potential value.  (from chyyuu@gmail.com)
     446RTEMS based RT-VMM (Real-Time Virtual Machine Monitor). Current RTEMS
     447can not support to run another OS (such as Linux or uClinux). We want
     448to add hypervisor (or Virtual Machine Monitor) function on RTEMS, then
     449RTEMS has the power like XEN that can run Linux or other OS, but RTEMS
     450also maintain original hard Real-Time funtions. First, we will try to
     451make RTEMS run uClinux on ARM simulator SkyEye( http://www.skyeye.org ),
     452then  we will try to make RTEMS run ARM Linux on XSCALE CPU based board
     453or SkyEye simulator. We consider virtualization techs on Embedded RTOS
     454area has potential value.  (from chyyuu@gmail.com)
    217455= LWIP =
    218456
     
    220458Status: No active volunteers.
    221459
    222 Update the RTEMS port of LWIP.  Provide reproducible test cases so we can be sure it stays in working condition. 
    223 
    224 A goal of this effort is to be able to use the standard TCP/IP NIC drivers already in RTEMS.  If this is feasible, then a user could switch between the full-featured BSD TCP/IP stack in RTEMS or the LWIP stack to save memory at the expense of reduced functionality.
     460Update the RTEMS port of LWIP.  Provide reproducible test cases so we
     461can be sure it stays in working condition.
     462
     463A goal of this effort is to be able to use the standard TCP/IP NIC drivers
     464already in RTEMS.  If this is feasible, then a user could switch between
     465the full-featured BSD TCP/IP stack in RTEMS or the LWIP stack to save
     466memory at the expense of reduced functionality.
    225467= USB Stack =
    226468
     
    238480
    239481
    240 Status: [wiki:TBR/User/JoelSherrill JoelSherrill] has done a lot of BSP and initialization refactoring to lay the groundwork for this..
     482Status: [wiki:TBR/User/JoelSherrill JoelSherrill] has done a lot of BSP and initialization
     483refactoring to lay the groundwork for this..
    241484
    242485Add optional capability to use merged Heap and Workspace [PR46]. 
    243486
    244 By default, RTEMS limits the amount of memory and number of operating system object instances that can be created.  By merging the C Program Heap and RTEMS Workspace, all usable memory available could be used by RTEMS to allocate objects.  This would make RTEMS be able to behave like VxWorks in regards to limits on object instances while still preserving the hard limits which are needed by many RTEMS users.
    245 = Memory Management =
    246 
    247 
    248 Status: No active volunteers.
    249 
    250 Add advance memory management feature in RTEMS.
    251 The memory management in current RTEMS is fast and simple. But for a complex embedded systems, a page based memory systems is more preferable. other feature like runtime memory compression, memory tracer(for leak detection), DMA and cache management interface is also preferable.
     487By default, RTEMS limits the amount of memory and number of operating
     488system object instances that can be created.  By merging the C Program
     489Heap and RTEMS Workspace, all usable memory available could be used by
     490RTEMS to allocate objects.  This would make RTEMS be able to behave like
     491VxWorks in regards to limits on object instances while still preserving
     492the hard limits which are needed by many RTEMS users.
    252493= RTEMS Testing =
    253494
    254495
    255 Testing a large body of software like RTEMS is in a continual state of improvement.  There is always a need for more test cases and easier ways to run them all and decode the results.  In addition, we want to be able to run all tests on as many hardware and simulator configurations as possible.
     496Testing a large body of software like RTEMS is in a continual state
     497of improvement.  There is always a need for more test cases and easier
     498ways to run them all and decode the results.  In addition, we want to be
     499able to run all tests on as many hardware and simulator configurations
     500as possible.
    256501= POSIX Timing Tests =
    257502
     
    259504Status: No active volunteers.
    260505
    261 There are very few tests in the RTEMS source base which benchmark the POSIX Threading API and other POSIX services.  The first step in this project would be to develop POSIX API Timing Tests which test the same logical tests cases as the existing Classic API Timing Tests.  After that is complete, we would want to see Timing Tests for POSIX specific objects such as conditional variables and keys.
    262 
    263 RTEMS does not use Timing Tests as much for comparison with other operating systems but as a ruler for self-improvement.  Each RTEMS version should maintain or exceed the performance characteristics of previous versions.
    264 = =Coverage Analysis ==
     506There are very few tests in the RTEMS source base which benchmark the
     507POSIX Threading API and other POSIX services.  The first step in this
     508project would be to develop POSIX API Timing Tests which test the same
     509logical tests cases as the existing Classic API Timing Tests.  After that
     510is complete, we would want to see Timing Tests for POSIX specific objects
     511such as conditional variables and keys.
     512
     513RTEMS does not use Timing Tests as much for comparison with other
     514operating systems but as a ruler for self-improvement.  Each RTEMS
     515version should maintain or exceed the performance characteristics of
     516previous versions.
     517= Coverage Analysis =
    265518
    266519
    267520Status: [wiki:TBR/User/JoelSherrill JoelSherrill] and [wiki:JenniferAverett JenniferAverett] have done work in this area.
    268521
    269 This task consists of performing automated coverage testing using an open source simulator.  The [wiki:Skyeye Skyeye] project is currently adding coverage analysis capabilities per our specifications.  When those are available, the person(s) undertaking this project could analysis the binary object level coverage provided by the RTEMS Test Suites on any target BSP supported by the [[Skyeye]]/RTEMS combination.
     522This task consists of performing automated coverage testing using an open
     523source simulator.  The [wiki:Skyeye Skyeye] project is currently adding coverage
     524analysis capabilities per our specifications.  When those are available,
     525the person(s) undertaking this project could analysis the binary object
     526level coverage provided by the RTEMS Test Suites on any target BSP
     527supported by the [wiki:Skyeye Skyeye]/RTEMS combination.
     528
     529The resulting analysis is expected to provide a report on individual
     530assembly instructions within RTEMS subsystems which are not currently
     531exercised by existing tests.  Each case has to be individually analyzed
     532and addressed.  Historically, we have identified multiple categories
     533for code being uncovered:
     534
     535 *  Needs a new test case
     536
     537 *  Unreachable in current RTEMS configuration.  For example, the SuperCore
     538could have a feature only exercised by a POSIX API object.  It could
     539be disabled when POSIX is not configured.
     540
     541 *  Debug or sanity checking code which can be placed inside an RTEMS_DEBUG
     542conditional.
     543
     544 *  Unreachable paths generated by gcc for switches.  Sometimes you
     545have to restructure switches to avoid unreachable object code.
     546
     547 *  Critical sections which are synchronizing actions with ISRs.  Most of these are very hard to hit and may require very specific support from a simulator environment.  OAR has used tsim to exercise these paths but this is not reproducible in a BSP independent manner.  Worse, there is often no external way to know the case in question has been hit and no way to do it in a one shot test.