From e864e84c5a681b2d0c0bdd22b4c72761a068805a Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Wed, 12 Oct 2016 15:20:04 +0200 Subject: [PATCH] run: add vm running directly from block partition Fixes #2130 --- repos/ports/run/vbox_auto_win7.run | 1 + repos/ports/run/vbox_auto_win7_64.run | 1 + repos/ports/run/vbox_auto_win7_64_raw.run | 20 +++++ repos/ports/run/vbox_auto_win7_share.run | 1 + repos/ports/run/vbox_auto_win7_vbox5.run | 1 + repos/ports/run/vbox_auto_win81_64.run | 1 + repos/ports/run/vbox_win.inc | 87 +++++++++++++++++--- repos/ports/run/virtualbox_auto.inc | 28 ++++--- repos/ports/run/vm_win7_64_raw.vbox | 98 +++++++++++++++++++++++ repos/ports/run/win7_64_raw.vmdk | 24 ++++++ tool/autopilot.list | 1 + 11 files changed, 241 insertions(+), 22 deletions(-) create mode 100644 repos/ports/run/vbox_auto_win7_64_raw.run create mode 100644 repos/ports/run/vm_win7_64_raw.vbox create mode 100644 repos/ports/run/win7_64_raw.vmdk diff --git a/repos/ports/run/vbox_auto_win7.run b/repos/ports/run/vbox_auto_win7.run index a16251fc4b..625fc85f7e 100644 --- a/repos/ports/run/vbox_auto_win7.run +++ b/repos/ports/run/vbox_auto_win7.run @@ -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 diff --git a/repos/ports/run/vbox_auto_win7_64.run b/repos/ports/run/vbox_auto_win7_64.run index 1643c91d3d..1fc2121893 100644 --- a/repos/ports/run/vbox_auto_win7_64.run +++ b/repos/ports/run/vbox_auto_win7_64.run @@ -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 diff --git a/repos/ports/run/vbox_auto_win7_64_raw.run b/repos/ports/run/vbox_auto_win7_64_raw.run new file mode 100644 index 0000000000..d725b7d57f --- /dev/null +++ b/repos/ports/run/vbox_auto_win7_64_raw.run @@ -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 diff --git a/repos/ports/run/vbox_auto_win7_share.run b/repos/ports/run/vbox_auto_win7_share.run index 239fcff84f..ae7b075c8f 100644 --- a/repos/ports/run/vbox_auto_win7_share.run +++ b/repos/ports/run/vbox_auto_win7_share.run @@ -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] diff --git a/repos/ports/run/vbox_auto_win7_vbox5.run b/repos/ports/run/vbox_auto_win7_vbox5.run index aa5a40c8be..c8c026bae6 100644 --- a/repos/ports/run/vbox_auto_win7_vbox5.run +++ b/repos/ports/run/vbox_auto_win7_vbox5.run @@ -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 diff --git a/repos/ports/run/vbox_auto_win81_64.run b/repos/ports/run/vbox_auto_win81_64.run index 6028047e92..d73dc4caae 100644 --- a/repos/ports/run/vbox_auto_win81_64.run +++ b/repos/ports/run/vbox_auto_win81_64.run @@ -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 diff --git a/repos/ports/run/vbox_win.inc b/repos/ports/run/vbox_win.inc index 1a6b406add..29ccd9bc64 100644 --- a/repos/ports/run/vbox_win.inc +++ b/repos/ports/run/vbox_win.inc @@ -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 { - - - - - - - - + + + + + + @@ -141,11 +142,43 @@ append config_of_app { - + + + + + + + + + + + + + + + + + + } + +append_if [expr !$use_rumpfs] config_of_app { + + + + } + +append config_of_app { + + + + + + + } @@ -161,15 +194,26 @@ append config_of_app " append config_of_app { - } + + } + +append_if [expr !$use_rumpfs] config_of_app { + } +append config_of_app { + } append_if [expr $use_ram_fs] config_of_app { } append config_of_app " " +append_if [expr !$use_rumpfs] config_of_app " + " + +append_if [expr $use_rumpfs || $use_ram_fs] config_of_app { + } + append config_of_app { - @@ -181,8 +225,11 @@ append_if [expr $use_ram_fs] config_of_app { } +append_if [expr $use_rumpfs] config_of_app { + } +append_if [expr !$use_rumpfs] config_of_app { + } append config_of_app { - @@ -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} +} diff --git a/repos/ports/run/virtualbox_auto.inc b/repos/ports/run/virtualbox_auto.inc index 2fc3bab348..5fa25d09e6 100644 --- a/repos/ports/run/virtualbox_auto.inc +++ b/repos/ports/run/virtualbox_auto.inc @@ -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 { - - + } +append_if [expr $use_rumpfs] config { + } +append_if [expr !$use_rumpfs] config { + } +append config { - + } + +append_if [expr $use_rumpfs] config { } -append_if [expr $use_ram_fs && $use_overlay_from_disk] config { +append_if [expr $use_rumpfs && $use_ram_fs && $use_overlay_from_disk] config { } -append config { +append_if [expr $use_rumpfs] config { @@ -124,8 +130,10 @@ append_if [expr $use_ram_fs && $use_overlay_from_disk] config { - - + } +append_if [expr $use_rumpfs && $use_ram_fs && $use_overlay_from_disk] config { + } +append_if [expr $use_ram_fs && $use_overlay_from_disk] config { } @@ -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 diff --git a/repos/ports/run/vm_win7_64_raw.vbox b/repos/ports/run/vm_win7_64_raw.vbox new file mode 100644 index 0000000000..b81ef2d737 --- /dev/null +++ b/repos/ports/run/vm_win7_64_raw.vbox @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/repos/ports/run/win7_64_raw.vmdk b/repos/ports/run/win7_64_raw.vmdk new file mode 100644 index 0000000000..db31a6aee8 --- /dev/null +++ b/repos/ports/run/win7_64_raw.vmdk @@ -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" diff --git a/tool/autopilot.list b/tool/autopilot.list index 1642086d61..1e892cd134 100644 --- a/tool/autopilot.list +++ b/tool/autopilot.list @@ -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