Virtualbox + rump_fs + qemu

Christian Prochaska christian.prochaska at ...1...
Tue Feb 24 19:21:54 CET 2015


Hello Adrian,

I could not reproduce the same problem you reported, but found two other
problems when trying to run VirtualBox in Qemu:

First, 'atapi_drv' does not run well on newer Qemu versions (I used Qemu
2.2.0), so I changed your run script to use the 'ahci' driver instead
(see attachment).

Then I tried to run TinyCore Linux in the VM (with both the .vbox and
the .iso file in the root directory of the ext2 image) and when the
Linux kernel started to boot, VirtualBox reported 'invalid gueststate'
errors and the kernel boot process never finished.

So, even if you can find out why your VirtualBox complains about the
'w7.vbox' file, I would not have too high hopes of getting your VM
running in VirtualBox on Qemu (or with AMD SVM hardware virtualization
in general) without some prior work on the VirtualBox port. So far we
have used and tested VirtualBox mainly on Intel hardware. Would that be
an option for you?

Regards,
Christian

-------------- next part --------------
set use_net 0

set build_components {
     core init virtualbox
     drivers/input
     drivers/framebuffer
     drivers/timer
     server/rump_fs
     test/libc_vfs
     drivers/ahci
}

lappend_if [have_spec acpi]  build_components drivers/acpi
lappend_if [have_spec pci]   build_components drivers/pci
lappend_if [have_spec x86]   build_components drivers/rtc

lappend_if [expr $use_net]   build_components drivers/nic

build $build_components

create_boot_directory

set config {
<config prio_levels="4">
     <parent-provides>
         <service name="ROM"/>
         <service name="RAM"/>
         <service name="IRQ"/>
         <service name="IO_MEM"/>
         <service name="IO_PORT"/>
         <service name="CAP"/>
         <service name="PD"/>
         <service name="RM"/>
         <service name="CPU"/>
         <service name="LOG"/>
         <service name="SIGNAL"/>
     </parent-provides>
     <default-route>
         <any-service> <any-child/> <parent/> </any-service>
     </default-route>
     <start name="timer">
         <resource name="RAM" quantum="1M"/>
         <provides><service name="Timer"/></provides>
     </start>}

append_if [have_spec acpi] config {
     <start name="acpi" priority="-1">
         <resource name="RAM" quantum="8M"/>
         <binary name="acpi_drv"/>
         <provides>
             <service name="PCI"/>
             <service name="IRQ" />
         </provides>
         <route>
             <service name="PCI"> <any-child /> </service>
             <any-service> <parent/> <any-child /> </any-service>
         </route>
     </start>}

append_if [expr ![have_spec acpi] && [have_spec pci]] config {
     <start name="pci_drv" priority="-1">
         <resource name="RAM" quantum="2M"/>
         <provides> <service name="PCI"/> </provides>
     </start>}

append_if [have_spec ps2] config {
     <start name="ps2_drv" priority="-1">
         <resource name="RAM" quantum="1M"/>
         <provides><service name="Input"/></provides>
     </start>}

append_if [have_spec framebuffer] config {
     <start name="fb_drv" priority="-1">
         <resource name="RAM" quantum="4M"/>
         <provides><service name="Framebuffer"/></provides>
     </start>}

append_if [have_spec sdl] config {
     <start name="fb_sdl" priority="-1">
         <resource name="RAM" quantum="4M"/>
         <provides>
             <service name="Input"/>
             <service name="Framebuffer"/>
         </provides>
     </start>}

append_if [have_spec x86] config {
     <start name="rtc_drv" priority="-1">
         <resource name="RAM" quantum="1M"/>
         <provides>
             <service name="Rtc"/>
         </provides>
     </start>}

append_if [expr $use_net] config {
     <start name="nic_drv" priority="-1">
         <resource name="RAM" quantum="4M"/>
         <provides><service name="Nic"/></provides>
     </start>
}

append config {

	<start name="ahci">
		<resource name="RAM" quantum="10M" />
		<provides><service name="Block" /></provides>
	</start>

     <start name="rump_fs" priority="-1">
         <resource name="RAM" quantum="32M" />
         <provides><service name="File_system"/></provides>
         <config fs="ext2fs"><policy label="" root="/" writeable="yes"/></config>
     </start>


     <start name="virtualbox" priority="-2">
         <resource name="RAM" quantum="750M"/>
         <config vbox_file="w7.vbox" vm_name="w7">
             <libc stdout="/dev/log" stderr="/dev/log">
                 <vfs>
                     <dir name="dev"> <log/> </dir>
                     <fs/>
                 </vfs>
             </libc>
         </config>
     </start>
</config>
}

install_config $config

exec cp ${genode_dir}/repos/ports/run/test.vbox bin/.

set boot_modules { core init timer virtualbox }

# platform-specific modules
lappend_if [have_spec         ps2] boot_modules ps2_drv
lappend_if [have_spec        acpi] boot_modules acpi_drv
lappend_if [have_spec         pci] boot_modules pci_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [have_spec       linux] boot_modules fb_sdl
lappend_if [have_spec        nova] boot_modules pci_device_pd
lappend_if [have_spec         x86] boot_modules rtc_drv

append boot_modules {
     ld.lib.so libc.lib.so libm.lib.so pthread.lib.so libc_lock_pipe.lib.so
     libc_terminal.lib.so libiconv.lib.so stdcxx.lib.so
     rump.lib.so rump_fs.lib.so rump_fs
     ahci
}

append_if [expr $use_net] boot_modules { nic_drv }

build_boot_image $boot_modules

append qemu_args " -m 512 "
append qemu_args " -cpu phenom -boot order=d -drive id=disk,file=/tmp/tmp.img,if=none -device ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0"

run_genode_until forever



More information about the users mailing list