[PATCH] i386/virtualpok BSP, virtual BSP to be used with POK, build with enable-paravirt

Chris Johns chrisj at rtems.org
Sat Jan 11 22:50:34 UTC 2014

On 12/01/2014 12:45 am, Philipp Eppelt wrote:
> On 01/10/2014 10:27 PM, Chris Johns wrote:
>> On 7/01/2014 9:14 pm, Philipp Eppelt wrote:
>>> On 01/07/2014 04:25 AM, Chris Johns wrote:
>>>> On 7/01/2014 12:18 pm, Joel Sherrill wrote:
>>>>> On 1/6/2014 5:14 PM, Chris Johns wrote:
>>>>>> On 7/01/2014 4:24 am, Joel Sherrill wrote:
>>>>>>> On 1/6/2014 11:13 AM, Philipp Eppelt wrote:
>>>>>>>> Where are we on this?
>>>>>>> I think I was OK on it. If Gedare is also, then it should be merged.
>>>>>> How will this change be tested on a regular basis ? As we move to
>>>>>> constant integration testing we need a way to test this code.
>>>>> Philipp.. can you provide us a "test plan"? That is, how you build and
>>>>> test today
>>>>> for what you have. I know that it is likely only a couple of tests at
>>>>> this point
>>>>> from an RTEMS perspective.
>>>>>> I would like to understand how this extra dependency is tested and
>>>>>> managed on an on going basis before getting my support.
>>>>> Agreed. We need to be conscious of this.
>>>>> Is a test plan sufficient? We don't have the infrastructure
>>>>> currently to
>>>>> automate
>>>>> testing this. I really hope Philipp enjoyed the project and will stay
>>>>> involved and help
>>>>> us grow this.
>>>> Currently I do not know what I would need to run "Pok", can I build it
>>>> from source and what is needed to do this ? Does Pok itself need special
>>>> tools ?
>>>> What development hosts does Pok support ?
>>> POK is short for Partitioned Operating system Kernel. It supports x86,
>>> ppc and sparc. You can obtain the source here:
>>> http://pok.safety-critical.net/pokdownload
>>> To build it on Debian you need:
>>> GCC, binutils, perl, libxml-xpath-perl (the XML::XPath::XMLParser),
>>> libxml-libxml-perl (the XML::LibXML Perl module), mtools (optional),
>>> qemu, make.
>> Do you need qemu to build it ?
> No. Only as a test platform.

Great. One less dependence to supporting building.

>>> For ppc and sparc you need to build the cross toolchain described here:
>>> http://pok.safety-critical.net/wiki
>> Do you need those specific versions of GCC ? They look a little old.
> No, I used gcc 4.8.0.


>> I see for the sparc is a sparc-elf target. I also see --with-newlib is
>> present but the wiki page does not indicate a version or how this is
>> handled.
> I only followed these steps and it worked. I guess it just concerns the
> files delivered together with gcc.

Ok. I will have a play.

>>>> If RTEMS is to offer a Pok based solution the project needs to address
>>>> all these factors.
>>>>> This is an important capability for the growth of RTEMS as a project.
>>>>> We
>>>>> need to
>>>>> lay the groundwork so we can eventually test Pok, help it grow,  and
>>>>> ensure
>>>>> its stability. In a perfect world, it would have good test results
>>>>> before we  test
>>>>> Pok+RTEMS and put it through our acceptance tests.
>>>> I was not wishing to address acceptance tests. I am currently only
>>>> concerned with patches entering RTEMS and knowing this code is being
>>>> tested. As we move to constant integration we need to make sure the Pok
>>>> component is maintained or we risk it rotting. I would rather have the
>>>> commitment to support it addressed up front. I have no idea what this
>>>> is.
>>> I don't have a script to build all this. If I update things in POK I
>>> rebuild 'libpart.a' and copy it to RTEMS.
>> Why not use an installed version directly from pok ? I do not think
>> adding binary blobs to RTEMS is a good idea.
> To build POK you need to set an environment variable $POK_PATH. So you
> could grab libpart.a from e.g.
> $POK_PATH/examples/rtems_guest/generated-code/cpu/part1/libpart.a. But
> the user must be made aware to change this path for his setup.

Reliance on environment variables is not good. The path needs to be part 
of RTEMS's configuration.

>>> This provides all information
>>> for the interaction with POK to RTEMS.
>> Does this include headers ?
> POK separates kernel and partition code. The kernel code is not affected
> by the partitions running on top. And each partition has the 'knowledge'
> of how to communicate with the kernel. libpart.a consits of this
> communication code or 'partition base code' and the implementation of
> the functions in virtualizationlayercpu.h and virtualizationlayerbsp.h.
> Or what do you mean with headers?

Where do the virtualizationlayercpu.h and virtualizationlayerbsp.h come 
from and live ?

>>> Then I just build the RTEMS
>>> samples with --enable-paravirt for virtualpok and wait for it to fail at
>>> the timertests (no timer implemented).
>>> To execute the code, I need to copy for example hello.exe to a POK
>>> program, place it in a partition and relink the POK binary to pull the
>>> 'foreign' binary into POK's final system binary.
>>> It's then tested with qemu.
>> That will be a interesting challenge to add into our testing framework.
>> Is the qemu the standard one or does pok have extra patches ?
> No. Standard Qemu is used.


>>> More details, but missing --enable-paravirt, here:
>>> http://phipse.github.io/rtems/blog/2013/07/08/HelloWorld/
>>> Do you want to test if the code compiles or if it runs on the system?
>> I am looking a little further into the future and Joel has been clear
>> that POK is important so we need to get the testing (compile and
>> running) sorted and to manage its integration so it does not bitrot.
>> This means RTEMS developers need easy access to POK, it tools and the
>> ability to run it so we can do this. It might be POK is only built and
>> tested on the RTEMS test hardware via buildbot when code is committed
>> however we need to set this up and then maintain it.
>> As stated before my concern is constant integration and what it brings.
>> The end objective is to have buildbot build and test all commits to a
>> certain level. This level is still be determined and relates to the
>> resources available and time it takes. Once working and after things
>> settle we will start to remove the parts from RTEMS that are not being
>> tested for cannot be tested. When the core team makes an RTEMS release
>> we need to make be clear what works and what does not and if POK is not
>> being built and being tested over time it will rot and then we would
>> need to consider it for removal. It makes no sense to release code in
>> RTEMS that does not build or has not been tested.
>>> You can shortcut the compile step, by providing a 'libpart.a' to copy
>>> into virtualpok/. Then it's just configure and compile.
>> As a rule I tend not to like the coping of files into the tree. Could a
>> path to pok be passed to configure with the --enable-paravirt option ?
> I would prefer a file in 'virtualpok' to set the path for libpart.a.
> Because the Makefile in 'virtualpok' is the one checking for the
> presence of 'libpart.a' and you don't need to reconfigure the if you
> change the path.

I prefer setting via configure and no other backdoor method such as 
special files or environment variables. It makes configuration audits 
much simpler.

If you need to switch versions when testing pok builds I suggest you use 
something external to RTEMS. For example symlinks work where you 
reference a symlink from RTEMS and move things as you want via the symlink.

>>> The execution test needs all steps, including a version of POK
>>> supporting this.
>>> My development version can be found on github:
>>> https://github.com/phipse/pok
>>> For more details on POK - including a what works and what doesn't - I
>>> would write a wiki page.
>>> Was this what you were looking for? Or did I miss the point?
>> Yes it is and I think my understanding is becoming clearer.
>> I am wondering if the RSB should get a pok section.
> RSB?



More information about the devel mailing list