mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-01 19:46:45 +00:00
5a1cef6381
This patch unconditionally applies the labeling of sessions and thereby removes the most common use case of 'Child_policy::filter_session_args'. Furthermore, the patch removes an ambiguity of the session labels of sessions created by the parent of behalf of its child, e.g., the PD session created as part of 'Child' now has the label "<child-name>" whereas an unlabeled PD-session request originating from the child has the label "<child-name> -> ". This way, the routing-policy of 'Child_policy::resolve_session_request' can differentiate both cases. As a consequence, the stricter labeling must now be considered wherever a precise label was specified as a key for a session route or a server- side policy selection. The simplest way to adapt those cases is to use a 'label_prefix' instead of the 'label' attribute. Alternatively, the 'label' attribute may used by appending " -> " (note the whitespace). Fixes #2171
336 lines
9.5 KiB
HTML
336 lines
9.5 KiB
HTML
# 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
|
|
}
|
|
|
|
if {[expr !$use_rumpfs && $use_vms > 1] } {
|
|
puts "\nConfiguration bug - have only one raw block partition.\n"
|
|
exit 1
|
|
}
|
|
|
|
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"/>}
|
|
|
|
for { set i 1} { $i <= $use_vms } { incr i} {
|
|
append config_of_app "
|
|
<policy label=\"vbox_pointer -> shape$i\" report=\"vbox$i -> shape\"/>"
|
|
}
|
|
|
|
append config_of_app {
|
|
<policy label="usb_report_filter -> devices" report="usb_drv -> devices"/>
|
|
<policy label="usb_report_filter -> usb_drv_config" report="usb_drv -> config"/>
|
|
<policy label="vbox1 -> usb_devices" report="usb_report_filter -> usb_devices"/>}
|
|
append_if [expr $use_cpu_load] config_of_app {
|
|
<policy label="cpu_load_display -> trace_subjects"
|
|
report="trace_subject_reporter -> trace_subjects"/>}
|
|
append config_of_app {
|
|
</config>
|
|
</start>
|
|
|
|
<start name="nitpicker" priority="-1">
|
|
<resource name="RAM" quantum="4M"/>
|
|
<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="cpu_load" layer="2" content="client" label="no" />
|
|
<domain name="" layer="3" content="client" focus="click" hover="always" />
|
|
|
|
<policy label_prefix="vbox_pointer" domain="pointer"/>
|
|
<policy label_prefix="cpu_load_display" domain="cpu_load"/>
|
|
<default-policy domain=""/>
|
|
</config>
|
|
</start>
|
|
|
|
<start name="vbox_pointer" priority="-1">
|
|
<resource name="RAM" quantum="1200K"/>
|
|
<config>}
|
|
|
|
for { set i 1} { $i <= $use_vms } { incr i} {
|
|
append config_of_app "
|
|
<policy label_prefix=\"nit_fb$i\" rom=\"shape$i\"/>"
|
|
}
|
|
|
|
append config_of_app {
|
|
</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>}
|
|
|
|
for { set i 1} { $i <= $use_vms } { incr i} {
|
|
append config_of_app "
|
|
<start name=\"nit_fb${i}\" priority=\"-1\">"
|
|
append config_of_app {
|
|
<binary name="nit_fb"/>
|
|
<resource name="RAM" quantum="8M" />
|
|
<provides>
|
|
<service name="Framebuffer" />
|
|
<service name="Input" />
|
|
</provides>}
|
|
|
|
append config_of_app "
|
|
<configfile name=\"nit_fb${i}.config\"/>"
|
|
|
|
append config_of_app {
|
|
<route>}
|
|
|
|
append config_of_app "
|
|
<service name=\"ROM\" label=\"nit_fb${i}.config\"> <child name=\"nit_fb-config\"/> </service>"
|
|
|
|
append config_of_app {
|
|
<service name="LOG"> <parent/> </service>
|
|
<service name="Nitpicker"> <child name="nitpicker"/> </service>
|
|
</route>
|
|
</start>}
|
|
}
|
|
|
|
append config_of_app {
|
|
<start name="nit_fb-config" priority="-1">
|
|
<binary name="dynamic_rom"/>
|
|
<resource name="RAM" quantum="1M"/>
|
|
<provides> <service name="ROM"/> </provides>
|
|
<config>}
|
|
|
|
for { set i 1} { $i <= $use_vms } { incr i} {
|
|
append config_of_app "
|
|
<rom name=\"nit_fb${i}.config\">"
|
|
|
|
append config_of_app {
|
|
<inline description="standard">}
|
|
|
|
if { $use_vms > 1 } {
|
|
append config_of_app "
|
|
<config xpos=\"[expr ${i} * 50]\" ypos=\"[expr (${i} - 1) * 5 + 2]\" width=\"1024\" height=\"768\"/>"
|
|
} else {
|
|
append config_of_app {
|
|
<config/>}
|
|
}
|
|
|
|
append config_of_app {
|
|
</inline>
|
|
<sleep milliseconds="50000" />}
|
|
|
|
append_if [expr !$use_rumpfs] config_of_app {
|
|
<inline description="shutdown">
|
|
<config width="0" height="0"/>
|
|
</inline>
|
|
<sleep milliseconds="500000" />}
|
|
|
|
append config_of_app {
|
|
</rom>}
|
|
}
|
|
|
|
append config_of_app {
|
|
</config>
|
|
<route>
|
|
<service name="RM"> <parent/> </service>
|
|
<service name="LOG"> <parent/> </service>
|
|
<service name="Timer"> <child name="timer"/> </service>
|
|
</route>
|
|
</start>}
|
|
|
|
for { set i 1} { $i <= $use_vms } { incr i} {
|
|
append config_of_app "
|
|
<start name=\"vbox${i}\" 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"/>}
|
|
if { $use_vms eq 1 } {
|
|
append config_of_app "
|
|
<config ld_verbose=\"yes\" vbox_file=\"${vbox_file}\" vm_name=\"${flavor}\" xhci=\"yes\">"
|
|
} else {
|
|
append config_of_app "
|
|
<affinity xpos=\"[expr $i]\" width=\"2\" />
|
|
<config ld_verbose=\"yes\" vbox_file=\"${vbox_file}\" vm_name=\"${flavor}\" xhci=\"no\">"
|
|
}
|
|
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" label="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${i}\" /> </service>
|
|
<service name=\"Input\"> <child name=\"nit_fb${i}\" /> </service>"
|
|
append config_of_app {
|
|
<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
|
|
# run_genode_until forever 0 [output_spawn_id]
|
|
|
|
if {$use_rumpfs} {
|
|
set wait_timeout 170
|
|
for { set i 1 } { $i <= $use_vms } { incr i } {
|
|
run_genode_until {\[init -\> vbox.*].*Guest Additions capability report:.*seamless: yes, hostWindowMapping: no, graphics: yes} $wait_timeout [output_spawn_id]
|
|
set wait_timeout 25
|
|
}
|
|
} else {
|
|
run_genode_until {\[init\] child "vbox1" 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}
|
|
}
|