Pre-Qualified RTEMS Build

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Apr 17 13:54:18 UTC 2020


Hello,

for the ESA pre-qualification activity we would like to have an RTEMS 
build which includes the pre-qualified parts and in addition give 
applications the option to use most of the remaining functionality 
provided by a standard RTEMS (excluded are POSIX signals and timers). To 
achieve this I wrote a new build system for RTEMS based on specification 
items last year as a task of this ESA activity. The RTEMS Project 
decided to not integrate it in RTEMS 5 and postpone this to RTEMS 6 
(maybe). To avoid further delays in the ESA activity I decided to start 
with the modifications for a pre-qualified build on top of the not yet 
integrated new build system.

I can now build an RTEMS sparc/leon3 BSP which provides potentially 
pre-qualified start.o, librtemsbsp.a, librtemscpu.a, and librtemstest.a 
artifacts. It offers the full set of RTEMS header files and provides 
librtemsbspextra.a, librtemscpuextra.a, librtemstestextra.a, etc. 
libraries as non-pre-qualified components. In the build specification, 
every header and source file belongs exactly one of two pairwise 
disjoint sets (pre-qualified and non-pre-qualified). The source and 
header files necessary for the pre-qualified artifacts are determined by 
the new space profile validation test:

https://git.rtems.org/sebh/rtems.git/tree/testsuites/validation/ts-profile.c?h=qual

This test includes all functions of the space profile proposal (except 
device drivers and the interrupt controller API).

https://ftp.rtems.org/pub/rtems/people/sebh/tn-space-profile-r2-18072019.pdf

In the pre-qualified set of files for sparc/leon3, there are 242 header 
files, 255 C source files, and 8 assembler source files.

The pre-qualified set has no reference to the heap free function. To 
achieve this, I wrote more than a hundred patches for RTEMS in 2019 and 
2020 (thanks for reviewing all this stuff and all the help to find 
better solutions). A change in the space profile is necessary for this 
also. We have to replace the rtems_task_create() function with an 
rtems_task_build() function. This needs to be discussed:

https://devel.rtems.org/ticket/3959

The application configuration using the pre-qualified artifacts is done 
through the standard <rtems/confdefs.h> header file. To achieve this, I 
had to rework a nearly 4k lines of code header file. I split it into 22 
different header files:

https://git.rtems.org/rtems/tree/cpukit/include/rtems/confdefs

All 149 application configuration options are now documented and 
(partly) specified:

https://git.rtems.org/sebh/rtems-qual.git/tree/spec/acfg/opt

How can we verify which source and header files are required for the 
space profile? For this I added a verification build. All files of the 
pre-qualified set are copied to a separate directory, then a build of 
only the pre-qualified artifacts is done in this separate directory 
using the build specification of the corresponding RTEMS sources. Only 
the artifacts and header file in this separate directory are used to 
link the space profile validation test. You can install this build and 
get a BSP installation without the extras. Doing this specialized build 
is done with 11 lines of Python code. Gathering the files necessary for 
this build is done with 57 lines of Python code. You find it here:

https://git.rtems.org/sebh/rtems-qual.git/

The specification items are in YAML format. I am very happy with this 
file format, however, the Python YAML parser is quite slow. So, I wrote 
an item cache in Python pickle format. It loads the current 
specification (2439 files) in about 0.2 seconds compared to several 
seconds if loaded from YAML.

The code was written according to the new RTEMS Python Development 
Guidelines:

https://docs.rtems.org/branches/master/eng/python-devel.html

The code is formatted by yapf and analyzed by flake8, mypy, and pylint. 
It is tested with pytest. The code coverage through unit tests is:

coverage report -m 
--include=rtems_spec_to_x.py,rtemsqual/util.py,rtemsqual/items.py,rtemsqual/__init__.py,rtemsqual/glossary.py,rtemsqual/content.py,rtemsqual/build.py,rtemsqual/applconfig.py
Name                      Stmts   Miss  Cover   Missing
-------------------------------------------------------
rtemsqual/__init__.py         8      0   100%
rtemsqual/applconfig.py     130      0   100%
rtemsqual/build.py           36      0   100%
rtemsqual/content.py        133      0   100%
rtemsqual/glossary.py        71      0   100%
rtemsqual/items.py          126      0   100%
rtemsqual/util.py            26      0   100%
-------------------------------------------------------
TOTAL                       530      0   100%

I found that using the analyzers helped during development and is not a 
burden. I think it improves productivity. You just need to get used to it.




More information about the devel mailing list