Okay,

I guess I've been like everybody, just expecting somebody else to reply to this
message (either that or I've missed the reply !).  As nobody appears to have
done so, I guess I'll need to do it ;)

>Hi, my name is Mark Hurenkamp, and I've been
>following this list ever since it first got started.
>I must say, I'm quite impressed with the current
>state of development, and the speed at which
>features get implemented.
[snip]
>Anyway, recently, some of my colleagues and I
>started a special interest group, to study Linux
>development, and what our company can do with it.
>(we work for Philips Tass, which is a software
>group within Philips doing mostly embedded
>applications for a.o. consumer electronics).
[snip]
>What I'd like to know is, is there any sort of sub-system
>which we could develop (the six of us), or maybe there
>are several things you would like us to concentrate
>on? I was thinking about maybe emulation of a specific
>hardware device, or develop parts of the GUI.
>(also depending on interrests of my colleagues)

Well, I'd also like to hear opinions from Kevin and Ulrich, but as most core
issues with the kernel module now appear to be in the hands of specific people,
I guess you'd be best off working on plugins.  Here are a few things you could
attempt:

(1)  Port more devices from BOCHS.  We'll need them anyway !
(2)  Separate out the hardware devices in libbochs.so into multiple
     plugins.  Currently, all devices ported from BOCHS are in one
     plugin (this was done so that there would be minimal porting
     effort).  However, a situation where each device has its own plugin
     is much more optimal.  I suggest taking the following approach:
     first split off the "general" BOCHS support code into a library.
     Then move each device into its own plugin directory, and link them
     all to the BOCHS support library.  That way porting effort of new
     devices is minimal.
(3)  Something I have been thinking about for a while:  eventually, we
     want to support VM orthogonal persistance (i.e. suspend/resume capability).
     In order to do that properly, we need to not only dump the CPU state
     and the physical memory to a file, but also the state of each hardware
     device (so they don't have to be reinitialised by the guest !)
     This is the way I was planning to implement this:  when doing
     plugin_init(), each plugin needs to return a pointer to a plugin
     configuration structure to the main user program.  This structure would
     look something like

         struct plugin_config {
             void * persistant_data;
             int size;
         };

     When the VM suspends, the user program dumps the persistant_data
     with size size to the VM-core file, together with the CPU state and
     v-physical memory.  When it resumes, it reloads the plugin with the
     persistant data from the file, so the plugin returns into its
     original state.
     What needs to be done:  all plugin "state variables", that need to
     be saved across a suspend, need to be separated into a persistant
     structure, and the rest of the plugin needs to be modified to access
     this structure.  Also, the plugin system needs to be changed to
     work with plugin_config structure.  Finally, a useful memory dump
     needs to be made (I was thinking of using ELF file format to store
     this --- but anyway, by that time we can have another look at it ;).

>Also I'd like to hear suggestions about how we can
>best get started with all this.

I guess you should read through the code and make sure you understand it.
The virtualisation paper will help.  If you're working on plugins the user
program is especially important, and the internal workings of the kernel
module slightly less.

-- Ramon




Reply via email to