run: add vm running directly from block partition

Fixes #2130
This commit is contained in:
Alexander Boettcher 2016-10-12 15:20:04 +02:00 committed by Christian Helmuth
parent d9c6f46fe5
commit e864e84c5a
11 changed files with 241 additions and 22 deletions

View File

@ -7,6 +7,7 @@ set flavor "win7"
set use_vbox4 1
set use_vbox5 0
set use_rumpfs 1
# Write overlay only into ram
set use_ram_fs 1
# However read initial overlay from disk

View File

@ -9,6 +9,7 @@ set flavor "win7_64"
set use_vbox4 1
set use_vbox5 0
set use_rumpfs 1
# Write overlay only into ram
set use_ram_fs 1
# However read initial overlay from disk

View File

@ -0,0 +1,20 @@
#
# Windows 7 64bit in VirtualBox
#
assert_spec 64bit
set flavor "win7_64_raw"
set use_vbox4 1
set use_vbox5 0
# use vm image from a raw disk partition
set use_rumpfs 0
set use_ram_fs 0
set use_overlay_from_disk 0
set use_usb 1
set use_ps2 [have_spec ps2]
source ${genode_dir}/repos/ports/run/vbox_win.inc

View File

@ -78,6 +78,7 @@ set vdi_image "${flavor}.vdi"
set use_ram_fs 0
set use_overlay_from_disk 0
set overlay_image "overlay_${flavor}.vdi"
set use_rumpfs 1
set use_usb 0
set use_ps2 [have_spec ps2]

View File

@ -10,6 +10,7 @@ set flavor "win7"
set use_vbox4 0
set use_vbox5 5
set use_rumpfs 1
# Write overlay only into ram
set use_ram_fs 1
# However read initial overlay from disk

View File

@ -9,6 +9,7 @@ set flavor "win81_64"
set use_vbox4 1
set use_vbox5 0
set use_rumpfs 1
# Write overlay only into ram
set use_ram_fs 1
# However read initial overlay from disk

View File

@ -10,6 +10,7 @@ if {[have_include "power_on/qemu"]} {
}
set vdi_image "${flavor}.vdi"
set raw_image "${flavor}.vmdk"
set vbox_file "vm_${flavor}.vbox"
set overlay_image "overlay_${flavor}.vdi"
@ -21,6 +22,7 @@ set build_components {
app/vbox_pointer
server/nit_fb
server/report_rom
server/dynamic_rom
}
set boot_modules {
@ -31,6 +33,7 @@ set boot_modules {
vbox_pointer
nit_fb
report_rom
dynamic_rom
}
set config_of_app {
@ -94,14 +97,12 @@ append config_of_app {
<resource name="RAM" quantum="1M"/>
<provides> <service name="Report"/> <service name="ROM"/> </provides>
<config>
<rom>
<policy label="vbox_pointer -> hover" report="nitpicker -> hover"/>
<policy label="vbox_pointer -> xray" report="nitpicker -> xray"/>
<policy label="vbox_pointer -> shape" report="vbox -> shape"/>
<policy label="usb_report_filter -> devices" report="usb_drv -> devices"/>
<policy label="usb_report_filter -> usb_drv_config" report="usb_drv -> config"/>
<policy label="vbox -> usb_devices" report="usb_report_filter -> usb_devices"/>
</rom>
<policy label="vbox_pointer -> hover" report="nitpicker -> hover"/>
<policy label="vbox_pointer -> xray" report="nitpicker -> xray"/>
<policy label="vbox_pointer -> shape" report="vbox -> shape"/>
<policy label="usb_report_filter -> devices" report="usb_drv -> devices"/>
<policy label="usb_report_filter -> usb_drv_config" report="usb_drv -> config"/>
<policy label="vbox -> usb_devices" report="usb_report_filter -> usb_devices"/>
</config>
</start>
@ -141,11 +142,43 @@ append config_of_app {
<start name="nit_fb" priority="-1">
<resource name="RAM" quantum="8M" />
<config/>
<configfile name="nit_fb.config"/>
<provides>
<service name="Framebuffer" />
<service name="Input" />
</provides>
<route>
<service name="ROM" label="nit_fb.config"> <child name="nit_fb-config"/> </service>
<service name="LOG"> <parent/> </service>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
</route>
</start>
<start name="nit_fb-config" priority="-1">
<binary name="dynamic_rom"/>
<resource name="RAM" quantum="1M"/>
<provides> <service name="ROM"/> </provides>
<config>
<rom name="nit_fb.config">
<inline description="standard">
<config/>
</inline>
<sleep milliseconds="60000" />}
append_if [expr !$use_rumpfs] config_of_app {
<inline description="shutdown">
<config width="0" height="0"/>
</inline>
<sleep milliseconds="600000" />}
append config_of_app {
</rom>
</config>
<route>
<service name="RM"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Timer"> <child name="timer"/> </service>
</route>
</start>
<start name="vbox" priority="-2">}
@ -161,15 +194,26 @@ append config_of_app "
append config_of_app {
<libc stdout="/dev/log" stderr="/dev/log" rtc="/dev/rtc">
<vfs>
<dir name="dev"> <log/> <rtc/> </dir>}
<dir name="dev">
<log/> <rtc/>}
append_if [expr !$use_rumpfs] config_of_app {
<block name="sda3" label="raw" block_buffer_count="128" />}
append config_of_app {
</dir>}
append_if [expr $use_ram_fs] config_of_app {
<dir name="ram"> <fs label="from_ram_fs"/> </dir>}
append config_of_app "
<rom name=\"${vbox_file}\"/>"
append_if [expr !$use_rumpfs] config_of_app "
<rom name=\"${raw_image}\"/>"
append_if [expr $use_rumpfs || $use_ram_fs] config_of_app {
<fs />}
append config_of_app {
<fs />
</vfs>
</libc>
</config>
@ -181,8 +225,11 @@ append_if [expr $use_ram_fs] config_of_app {
<child name="ram_fs"/>
</service>}
append_if [expr $use_rumpfs] config_of_app {
<service name="File_system"> <child name="rump_fs"/> </service>}
append_if [expr !$use_rumpfs] config_of_app {
<service name="Block"> <child name="part_blk"/> </service>}
append config_of_app {
<service name="File_system"> <child name="rump_fs"/> </service>
<service name="Framebuffer"> <child name="nit_fb" /> </service>
<service name="Input"> <child name="nit_fb" /> </service>
<service name="Report"><child name="report_rom" /></service>
@ -199,12 +246,26 @@ source ${genode_dir}/repos/ports/run/virtualbox_auto.inc
# copy vbox configuration to bin directory
exec cp ${genode_dir}/repos/ports/run/${vbox_file} bin/.
if {!$use_rumpfs} {
exec cp ${genode_dir}/repos/ports/run/${raw_image} bin/.
}
append boot_modules " ${vbox_file} "
append_if [expr !$use_rumpfs] boot_modules " ${raw_image} "
build_boot_image $boot_modules
run_genode_until {\[init -\> vbox\].*Guest Additions capability report:.*seamless: no, hostWindowMapping: no, graphics: no} 70
run_genode_until {\[init -\> vbox\].*Guest Additions capability report:.*seamless: yes, hostWindowMapping: no, graphics: yes} 170 [output_spawn_id]
if {$use_rumpfs} {
run_genode_until {\[init -\> vbox\].*Guest Additions capability report:.*seamless: yes, hostWindowMapping: no, graphics: yes} 170 [output_spawn_id]
} else {
run_genode_until {\[init\] child "vbox" exited with exit value 0} 60 [output_spawn_id]
# give block driver bit time to write data to disk
sleep 5
}
# cleanup bin directory - remove vbox file
exec rm bin/${vbox_file}
if {!$use_rumpfs} {
exec rm bin/${raw_image}
}

View File

@ -11,13 +11,13 @@ if {[have_include "power_on/qemu"]} {
append build_components {
core init
server/part_blk
server/rump_fs
server/fs_rom
drivers/ahci
drivers/framebuffer
drivers/timer
}
lappend_if [expr $use_rumpfs] build_components server/rump_fs
lappend_if [expr $use_vbox4] build_components virtualbox
lappend_if [expr $use_vbox5] build_components virtualbox5
lappend_if [expr $use_ps2] build_components drivers/input
@ -78,17 +78,23 @@ append config {
<route>
<any-service><child name="ahci_drv"/> <parent/><any-child/></any-service>
</route>
<config>
<policy label="rump_fs" partition="4"/>
<config>}
append_if [expr $use_rumpfs] config {
<policy label="rump_fs" partition="4"/>}
append_if [expr !$use_rumpfs] config {
<policy label="vbox -> raw" partition="3"/>}
append config {
</config>
</start>
</start>}
append_if [expr $use_rumpfs] config {
<start name="rump_fs" priority="-1">
<resource name="RAM" quantum="32M"/>
<provides><service name="File_system"/></provides>
<config fs="ext2fs">}
append_if [expr $use_ram_fs && $use_overlay_from_disk] config {
append_if [expr $use_rumpfs && $use_ram_fs && $use_overlay_from_disk] config {
<policy label="overlay_from_disk" root="/ram" writeable="yes"/>}
append config {
append_if [expr $use_rumpfs] config {
<default-policy root="/" writeable="yes"/>
</config>
<route>
@ -124,8 +130,10 @@ append_if [expr $use_ram_fs && $use_overlay_from_disk] config {
<binary name="fs_rom"/>
<resource name="RAM" quantum="256M"/>
<provides><service name="ROM"/></provides>
<route>
<service name="File_system"><child name="rump_fs"/></service>
<route>}
append_if [expr $use_rumpfs && $use_ram_fs && $use_overlay_from_disk] config {
<service name="File_system"><child name="rump_fs"/></service>}
append_if [expr $use_ram_fs && $use_overlay_from_disk] config {
<any-service><parent/><any-child/></any-service>
</route>
</start>}
@ -271,10 +279,12 @@ append boot_modules {
ld.lib.so libc.lib.so libm.lib.so pthread.lib.so
libc_pipe.lib.so libc_terminal.lib.so
libiconv.lib.so stdcxx.lib.so
rump.lib.so rump_fs.lib.so rump_fs
qemu-usb.lib.so
}
lappend_if [expr $use_rumpfs] boot_modules rump.lib.so
lappend_if [expr $use_rumpfs] boot_modules rump_fs.lib.so
lappend_if [expr $use_rumpfs] boot_modules rump_fs
lappend_if [expr $use_vbox4] boot_modules virtualbox
lappend_if [expr $use_vbox5] boot_modules virtualbox5
lappend_if [expr $use_ram_fs || $use_usb] boot_modules ram_fs

View File

@ -0,0 +1,98 @@
<?xml version="1.0"?>
<!--
** DO NOT EDIT THIS FILE.
** If you make changes to this file while any VirtualBox related application
** is running, your changes will be overwritten later, without taking effect.
** Use VBoxManage or the VirtualBox Manager GUI to make changes.
-->
<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.14-linux">
<Machine uuid="{37ab43a5-38d8-4491-93f5-5b0b077f5c32}" name="Win7" OSType="Windows7" snapshotFolder="Snapshots" lastStateChange="2014-11-14T11:58:35Z">
<MediaRegistry>
<HardDisks>
<HardDisk uuid="{386d400b-0e8d-451f-ae1e-ec6f3a7be169}" location="/win7_64_raw.vmdk" format="VMDK"/>
</HardDisks>
<DVDImages/>
<FloppyImages/>
</MediaRegistry>
<ExtraData>
<ExtraDataItem name="GUI/LastGuestSizeHint" value="1024,768"/>
<ExtraDataItem name="GUI/LastNormalWindowPosition" value="513,100,1024,790"/>
</ExtraData>
<Hardware version="2">
<CPU count="2" hotplug="false">
<HardwareVirtEx enabled="true"/>
<HardwareVirtExNestedPaging enabled="true"/>
<HardwareVirtExVPID enabled="true"/>
<HardwareVirtExUX enabled="true"/>
<PAE enabled="true"/>
<LongMode enabled="true"/>
<HardwareVirtExLargePages enabled="false"/>
<HardwareVirtForce enabled="false"/>
</CPU>
<Memory RAMSize="1024" PageFusion="false"/>
<HID Pointing="PS2Mouse" Keyboard="PS2Keyboard"/>
<HPET enabled="false"/>
<Chipset type="PIIX3"/>
<Boot>
<Order position="1" device="Floppy"/>
<Order position="2" device="DVD"/>
<Order position="3" device="HardDisk"/>
<Order position="4" device="None"/>
</Boot>
<Display VRAMSize="20" monitorCount="1" accelerate3D="false" accelerate2DVideo="false"/>
<VideoCapture enabled="false" screens="18446744073709551615" horzRes="1024" vertRes="768" rate="512" fps="25"/>
<RemoteDisplay enabled="false" authType="Null"/>
<BIOS>
<ACPI enabled="true"/>
<IOAPIC enabled="true"/>
<Logo fadeIn="true" fadeOut="true" displayTime="0"/>
<BootMenu mode="MessageAndMenu"/>
<TimeOffset value="0"/>
<PXEDebug enabled="false"/>
</BIOS>
<USB>
<Controllers/>
<DeviceFilters/>
</USB>
<Network>
<Adapter slot="0" enabled="false" MACAddress="0800271D7901" cable="true" speed="0" type="82540EM">
<HostInterface/>
<DisabledModes/>
</Adapter>
</Network>
<UART>
<Port slot="0" enabled="false" IOBase="0x3f8" IRQ="4" hostMode="Disconnected"/>
<Port slot="1" enabled="false" IOBase="0x2f8" IRQ="3" hostMode="Disconnected"/>
</UART>
<LPT>
<Port slot="0" enabled="false" IOBase="0x378" IRQ="7"/>
<Port slot="1" enabled="false" IOBase="0x378" IRQ="7"/>
</LPT>
<AudioAdapter controller="AC97" driver="Pulse" enabled="false"/>
<RTC localOrUTC="UTC"/>
<SharedFolders/>
<Clipboard mode="Disabled"/>
<DragAndDrop mode="Disabled"/>
<IO>
<IoCache enabled="true" size="5"/>
<BandwidthGroups/>
</IO>
<HostPci>
<Devices/>
</HostPci>
<EmulatedUSB>
<CardReader enabled="false"/>
</EmulatedUSB>
<Guest memoryBalloonSize="0"/>
<GuestProperties/>
</Hardware>
<StorageControllers>
<StorageController name="SATA" type="AHCI" PortCount="2" useHostIOCache="true" Bootable="true">
<AttachedDevice type="HardDisk" port="0" device="0">
<Image uuid="{386d400b-0e8d-451f-ae1e-ec6f3a7be169}"/>
</AttachedDevice>
<AttachedDevice passthrough="false" type="DVD" port="1" device="0"/>
</StorageController>
</StorageControllers>
</Machine>
</VirtualBox>

View File

@ -0,0 +1,24 @@
# Disk DescriptorFile
version=1
CID=6f6498e1
parentCID=ffffffff
createType="fullDevice"
# Extent description
RW 164005888 FLAT "/dev/sda3" 0
# The disk Data Base
#DDB
ddb.virtualHWVersion = "4"
ddb.adapterType="ide"
ddb.geometry.cylinders="16383"
ddb.geometry.heads="16"
ddb.geometry.sectors="63"
ddb.uuid.image="386d400b-0e8d-451f-ae1e-ec6f3a7be169"
ddb.uuid.parent="00000000-0000-0000-0000-000000000000"
ddb.uuid.modification="911680c2-4951-4c5f-b794-c6f342e22c72"
ddb.uuid.parentmodification="00000000-0000-0000-0000-000000000000"
ddb.geometry.biosCylinders="1024"
ddb.geometry.biosHeads="255"
ddb.geometry.biosSectors="63"

View File

@ -49,6 +49,7 @@ thread
pthread
vbox_auto_win7
vbox_auto_win7_64
vbox_auto_win7_64_raw
vbox_auto_win7_vbox5
vbox_auto_win7_share
vbox_auto_win81_64