[GSoC] Paravirtualization Layer
philipp.eppelt at mailbox.tu-dresden.de
Fri Sep 20 07:22:25 UTC 2013
what did I do in my project?
I designed and implemented a virtualization layer, which should ease the
virtualization of RTEMS across different hypervisors.
To test the layer and because of the ARINC 653 compliance POK was chosen
as a proof-of-concept host OS.
The project was a partial success. The layer is designed, implemented
and a BSP is using it, and it is at least partially working.
I didn't succeed in changing POK so it can forward interrupts to
partitions reliably. But this is an POK related issue, which I think
won't be an issue on a host OS providing a vCPU abstraction. Also
implementing this for other architectures might be easier than for x86.
A console is printing hello World and sometimes under some circumstances
the base_sp sample printed output, too. But the latter is not reliable.
I have documented my efforts, including implementation issues, GDB traps
and where I left off on the wiki page .
Also explanations on how to port the i386/virtualpok BSP to other
hypervisors and how to port this approach to other architectures can be
found there. The latter is pretty abstract, as I don't know much about
the other architectures(arm, ppc, sparc).
I provide two patches:
* Split of the i386 CPU between score/cpu and libcpu. The interrupt
handling was moved to libcpu and two new CPU variants were introduced
there: Native and virtual. The native one works like before but the
virtual one calls the virtualization layer instead of executing cli,sti
or hlt. The list of affected functions is documented in the wiki.
BUT: This patch won't be merged, as includes in cpukit from libcpu
aren't allowed (but it works). But before the discussion about a new
configuration option isn't finished and the option is implemented there
is no other way to achieve this.
* A new i386 BSP is introduced: virtualpok. It is the corresponding BSP
to the virtual i386 CPU model and brings along the virtualization layer
as two header files in it's include/ directory. A console driver, clock
driver and IRQ management is implemented and as far as possible tested
If you have questions on the work, I'd be happy to answer them.
More information about the devel