genode/repos/ports/run/vbox_win.inc
2016-10-21 12:39:36 +02:00

272 lines
7.9 KiB
PHP

# Tested for nova and hw_x86_64_muen.
if {(![have_spec nova] && ![have_spec hw_x86_64_muen])} {
puts "Platform is unsupported."
exit 0
}
if {[have_include "power_on/qemu"]} {
puts "\nRun script does not support Qemu.\n"
exit 0
}
set vdi_image "${flavor}.vdi"
set raw_image "${flavor}.vmdk"
set vbox_file "vm_${flavor}.vbox"
set overlay_image "overlay_${flavor}.vdi"
set build_components {
server/input_merger
drivers/nic
drivers/audio
server/nitpicker
app/vbox_pointer
server/nit_fb
server/report_rom
server/dynamic_rom
}
set boot_modules {
input_merger
nic_drv
audio_drv
nitpicker
vbox_pointer
nit_fb
report_rom
dynamic_rom
}
set config_of_app {
<start name="input_merger">
<resource name="RAM" quantum="1M" />
<provides>
<service name="Input" />
</provides>
<config>}
append_if [expr $use_ps2] config_of_app {
<input label="ps2" /> }
append_if [expr $use_usb] config_of_app {
<input label="usb_hid" />}
append config_of_app {
</config>
<route> }
append_if [expr $use_ps2] config_of_app {
<service name="Input">
<if-arg key="label" value="ps2" /> <child name="ps2_drv" />
</service> }
append_if [expr $use_usb] config_of_app {
<service name="Input">
<if-arg key="label" value="usb_hid" /> <child name="usb_drv" />
</service> }
append config_of_app {
<any-service> <parent /> <any-child /> </any-service>
</route>
</start>
<!--
Note: to get network access in the VM, the virtual network adapter
needs to be enabled in the .vbox file (disabled by default)
-->
<start name="nic_drv" priority="-1">
<resource name="RAM" quantum="8M" />
<provides>
<service name="Nic" />
</provides>
</start>
<!--
Note: to use audio in the VM, the virtual audio adapter
needs to be enabled in the .vbox file (disabled by default).
(Recording is configured to use the external mic.)
-->
<start name="audio_drv" priority="-1">
<resource name="RAM" quantum="9M"/>
<provides>
<service name="Audio_out"/>
<service name="Audio_in"/>
</provides>
<config recording="yes">
<mixer field="outputs.master" value="255"/>
<mixer field="record.adc-0:1_source" value="sel2"/>
<mixer field="record.adc-0:1" value="255"/>
</config>
</start>
<start name="report_rom">
<resource name="RAM" quantum="1M"/>
<provides> <service name="Report"/> <service name="ROM"/> </provides>
<config>
<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>
<start name="nitpicker" priority="-1">
<resource name="RAM" quantum="2M"/>
<provides><service name="Nitpicker"/></provides>
<route>
<service name="Framebuffer"> <child name="fb_drv" /> </service>
<service name="Input"> <child name="input_merger" /> </service>
<service name="Report"> <child name="report_rom" /> </service>
<any-service> <parent/> <any-child /> </any-service>
</route>
<config>
<report focus="yes" hover="yes" xray="yes" />
<domain name="pointer" layer="1" content="client" label="no" origin="pointer" />
<domain name="vbox" layer="2" content="client" focus="click" hover="always" />
<domain name="" layer="2" content="client" focus="click" hover="always" />
<policy label="vbox_pointer" domain="pointer"/>
<policy label="nit_fb" domain="vbox"/>
<default-policy domain=""/>
</config>
</start>
<start name="vbox_pointer" priority="-1">
<resource name="RAM" quantum="1200K"/>
<config>
<policy label="nit_fb" rom="shape"/>
</config>
<route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<service name="ROM"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="nit_fb" priority="-1">
<resource name="RAM" quantum="8M" />
<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">}
append_if [expr $use_vbox4] config_of_app {
<binary name="virtualbox" />}
append_if [expr $use_vbox5] config_of_app {
<binary name="virtualbox5" />}
append config_of_app {
<resource name="RAM" quantum="1280M"/>}
append config_of_app "
<config ld_verbose=\"yes\" vbox_file=\"${vbox_file}\" vm_name=\"${flavor}\" xhci=\"yes\">"
append config_of_app {
<libc stdout="/dev/log" stderr="/dev/log" rtc="/dev/rtc">
<vfs>
<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 {
</vfs>
</libc>
</config>
<route>}
append_if [expr $use_ram_fs] config_of_app {
<service name="File_system">
<if-arg key="label" value="from_ram_fs" />
<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="Framebuffer"> <child name="nit_fb" /> </service>
<service name="Input"> <child name="nit_fb" /> </service>
<service name="Report"><child name="report_rom" /></service>
<service name="ROM">
<if-arg key="label" value="usb_devices"/> <child name="report_rom"/>
</service>
<any-service> <parent/> <any-child /> </any-service>
</route>
</start>
}
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
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}
}