vbox5: use nitpicker session

Issue #3196
This commit is contained in:
Alexander Boettcher 2019-03-04 13:53:40 +01:00 committed by Norman Feske
parent af97a581e3
commit 3b36542212
12 changed files with 226 additions and 186 deletions

View File

@ -3,11 +3,8 @@ _/src/vbox5-nova
_/src/base-nova _/src/base-nova
_/src/libc _/src/libc
_/src/init _/src/init
_/src/nit_fb
_/src/libc
_/src/posix _/src/posix
_/src/zlib _/src/zlib
_/src/nit_fb
_/src/libiconv _/src/libiconv
_/src/stdcxx _/src/stdcxx
_/src/vfs _/src/vfs

View File

@ -19,7 +19,6 @@
<rom label="init.config"/> <rom label="init.config"/>
<rom label="ld.lib.so"/> <rom label="ld.lib.so"/>
<rom label="init"/> <rom label="init"/>
<rom label="nit_fb"/>
<rom label="timer"/> <rom label="timer"/>
<rom label="virtualbox5-nova"/> <rom label="virtualbox5-nova"/>
<rom label="libc.lib.so"/> <rom label="libc.lib.so"/>

View File

@ -30,18 +30,6 @@
</route> </route>
</start> </start>
<start name="nit_fb" priority="0">
<resource name="RAM" quantum="8M" />
<provides>
<service name="Framebuffer" /> <service name="Input" />
</provides>
<config xpos="32" ypos="32" initial_width="-64" initial_height="-64" />
<route>
<service name="Nitpicker"> <parent label=""/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="vbox" priority="-1" caps="1000"> <start name="vbox" priority="-1" caps="1000">
<binary name="virtualbox5-nova" /> <binary name="virtualbox5-nova" />
<resource name="RAM" quantum="8G"/> <resource name="RAM" quantum="8G"/>
@ -69,7 +57,7 @@
<service name="Report" label="shape"> <parent label="shape"/> </service> <service name="Report" label="shape"> <parent label="shape"/> </service>
<service name="ROM" label="clipboard"> <parent label="clipboard"/> </service> <service name="ROM" label="clipboard"> <parent label="clipboard"/> </service>
<service name="Report" label="clipboard"> <parent label="clipboard"/> </service> <service name="Report" label="clipboard"> <parent label="clipboard"/> </service>
<any-service> <parent/> <child name="nit_fb"/> </any-service> <any-service> <parent/> </any-service>
</route> </route>
</start> </start>

View File

@ -14,7 +14,6 @@ if { [have_include "power_on/qemu"] || ![have_spec nova] || ![have_spec x86_64]}
} }
set build_components { set build_components {
core init timer
drivers/framebuffer drivers/framebuffer
drivers/input drivers/input
drivers/usb drivers/usb
@ -37,6 +36,11 @@ build $build_components
create_boot_directory create_boot_directory
import_from_depot [depot_user]/src/[base_src] \
[depot_user]/src/init \
[depot_user]/src/nitpicker
set config { set config {
<config prio_levels="4"> <config prio_levels="4">
<parent-provides> <parent-provides>
@ -142,6 +146,39 @@ append config {
<provides><service name="Framebuffer"/></provides> <provides><service name="Framebuffer"/></provides>
</start> </start>
<start name="nitpicker" priority="-1">
<resource name="RAM" quantum="12M"/>
<provides><service name="Nitpicker"/></provides>
<route>
<service name="Framebuffer"> <child name="fb_drv" /> </service>
<service name="Report"> <child name="report_rom" /> </service>
<any-service> <parent/> <any-child /> </any-service>
</route>
<config>
<report focus="yes" hover="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" label="no" focus="click" hover="always" />
<policy label_prefix="pointer" domain="pointer"/>
<policy label_prefix="cpu_load_display" domain="cpu_load"/>
<default-policy domain=""/>
</config>
</start>
<start name="pointer" priority="-1">
<resource name="RAM" quantum="2M"/>
<provides> <service name="Report"/> </provides>
<config shapes="yes"/>
<route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<service name="ROM" label="hover"> <child name="report_rom"/> </service>
<service name="ROM" label="xray"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="log_terminal" priority="-1"> <start name="log_terminal" priority="-1">
<resource name="RAM" quantum="2M"/> <resource name="RAM" quantum="2M"/>
<provides> <provides>
@ -153,6 +190,8 @@ append config {
<resource name="RAM" quantum="1M"/> <resource name="RAM" quantum="1M"/>
<provides> <service name="Report"/> <service name="ROM"/> </provides> <provides> <service name="Report"/> <service name="ROM"/> </provides>
<config> <config>
<policy label="pointer -> hover" report="nitpicker -> hover"/>
<policy label="pointer -> xray" report="nitpicker -> xray"/>
<policy label="usb_report_filter -> devices" report="usb_drv -> devices"/> <policy label="usb_report_filter -> devices" report="usb_drv -> devices"/>
<policy label="usb_report_filter -> usb_drv_config" report="usb_drv -> config"/> <policy label="usb_report_filter -> usb_drv_config" report="usb_drv -> config"/>
<policy label="virtualbox -> usb_devices" report="usb_report_filter -> usb_devices"/> <policy label="virtualbox -> usb_devices" report="usb_report_filter -> usb_devices"/>

View File

@ -196,6 +196,8 @@ set config_of_app {
<resource name="RAM" quantum="1M"/> <resource name="RAM" quantum="1M"/>
<provides> <service name="Report"/> <service name="ROM"/> </provides> <provides> <service name="Report"/> <service name="ROM"/> </provides>
<config> <config>
<policy label="pointer -> hover" report="nitpicker -> hover"/>
<policy label="pointer -> xray" report="nitpicker -> xray"/>
<policy label="usb_report_filter -> devices" report="usb_drv -> devices"/> <policy label="usb_report_filter -> devices" report="usb_drv -> devices"/>
<policy label="usb_report_filter -> usb_drv_config" report="usb_drv -> config"/> <policy label="usb_report_filter -> usb_drv_config" report="usb_drv -> config"/>
<policy label="vbox1 -> usb_devices" report="usb_report_filter -> usb_devices"/> <policy label="vbox1 -> usb_devices" report="usb_report_filter -> usb_devices"/>
@ -224,6 +226,40 @@ append config_of_app {
</route> </route>
</start> </start>
<start name="nitpicker" priority="-1">
<resource name="RAM" quantum="12M"/>
<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" />
<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" label="no" focus="click" hover="always" />
<policy label_prefix="pointer" domain="pointer"/>
<policy label_prefix="cpu_load_display" domain="cpu_load"/>
<default-policy domain=""/>
</config>
</start>
<start name="pointer" priority="-1">
<resource name="RAM" quantum="2M"/>
<provides> <service name="Report"/> </provides>
<config shapes="yes"/>
<route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<service name="ROM" label="hover"> <child name="report_rom"/> </service>
<service name="ROM" label="xray"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="vbox1" priority="-2" caps="600">} <start name="vbox1" priority="-2" caps="600">}
append_if [expr $use_vbox5] config_of_app " append_if [expr $use_vbox5] config_of_app "
<binary name=\"$virtualbox5_binary\" />" <binary name=\"$virtualbox5_binary\" />"

View File

@ -27,9 +27,6 @@ set build_components {
server/input_merger server/input_merger
drivers/nic drivers/nic
drivers/audio drivers/audio
server/nitpicker
app/pointer
server/nit_fb
server/report_rom server/report_rom
server/dynamic_rom server/dynamic_rom
} }
@ -38,19 +35,13 @@ set boot_modules {
input_merger input_merger
nic_drv nic_drv
audio_drv audio_drv
nitpicker
pointer
nit_fb
report_rom report_rom
dynamic_rom dynamic_rom
} }
set virtualbox_binary "virtualbox-rem"
set virtualbox5_binary "virtualbox5-rem" set virtualbox5_binary "virtualbox5-rem"
if {[have_spec muen]} { set virtualbox_binary "virtualbox-muen" }
if {[have_spec nova]} { if {[have_spec nova]} {
set virtualbox_binary "virtualbox-nova"
set virtualbox5_binary "virtualbox5-nova" set virtualbox5_binary "virtualbox5-nova"
} }
@ -124,26 +115,17 @@ append config_of_app {
</config> </config>
</start> </start>
<start name="nitpicker" priority="-1"> <start name="nitpicker" priority="-1" caps="150">
<resource name="RAM" quantum="12M"/> <resource name="RAM" quantum="12M"/>
<provides><service name="Nitpicker"/></provides> <provides><service name="Nitpicker"/></provides>
<configfile name="nitpicker.config"/>
<route> <route>
<service name="Framebuffer"> <child name="fb_drv" /> </service> <service name="Framebuffer"> <child name="fb_drv" /> </service>
<service name="Input"> <child name="input_merger" /> </service> <service name="Input"> <child name="input_merger" /> </service>
<service name="Report"> <child name="report_rom" /> </service> <service name="Report"> <child name="report_rom" /> </service>
<service name="ROM" label="nitpicker.config"> <child name="dynamic-config"/> </service>
<any-service> <parent/> <any-child /> </any-service> <any-service> <parent/> <any-child /> </any-service>
</route> </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="pointer" domain="pointer"/>
<policy label_prefix="cpu_load_display" domain="cpu_load"/>
<default-policy domain=""/>
</config>
</start> </start>
<start name="pointer" priority="-1"> <start name="pointer" priority="-1">
@ -151,79 +133,33 @@ append config_of_app {
<provides> <service name="Report"/> </provides> <provides> <service name="Report"/> </provides>
<config shapes="yes"/> <config shapes="yes"/>
<route> <route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>} <service name="Nitpicker"> <child name="nitpicker"/> </service>
append config_of_app {
<service name="ROM" label="hover"> <child name="report_rom"/> </service> <service name="ROM" label="hover"> <child name="report_rom"/> </service>
<service name="ROM" label="xray"> <child name="report_rom"/> </service> <service name="ROM" label="xray"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service> <any-service> <parent/> </any-service>
</route> </route>
</start>} </start>}
for { set i 1} { $i <= $use_vms } { incr i} { if { $use_vms > 1 } {
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 { append config_of_app {
<start name="wm" caps="1000">
<resource name="RAM" quantum="32M"/>
<binary name="init"/>
<provides> <service name="Nitpicker"/> <service name="Report"/> </provides>
<route>
<service name="ROM" label="config"> <parent label="wm.config"/> </service>
<service name="Nitpicker"> <child name="nitpicker"/> </service> <service name="Nitpicker"> <child name="nitpicker"/> </service>
<any-service> <parent /> </any-service> <any-service> <parent/> <any-child/> </any-service>
</route> </route>
</start>} </start>}
} }
append config_of_app { append config_of_app {
<start name="nit_fb-config" priority="-1"> <start name="dynamic-config" priority="-1">
<binary name="dynamic_rom"/> <binary name="dynamic_rom"/>
<resource name="RAM" quantum="1M"/> <resource name="RAM" quantum="1M"/>
<provides> <service name="ROM"/> </provides> <provides> <service name="ROM"/> </provides>
<config>} <config verbose="yes">
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 {
<rom name="capslock"> <rom name="capslock">
<inline> <inline>
<capslock enabled="yes"/> <capslock enabled="yes"/>
@ -234,6 +170,40 @@ append config_of_app {
</inline> </inline>
<sleep milliseconds="5000"/> <sleep milliseconds="5000"/>
</rom> </rom>
<rom name="nitpicker.config">
<inline description="standard_mode">
<config>
<report focus="yes" hover="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" label="no" focus="click" hover="always"/>
<policy label_prefix="pointer" domain="pointer"/>
<policy label_prefix="cpu_load_display" domain="cpu_load"/>
<default-policy domain=""/>
</config>
</inline>
<sleep milliseconds="50000"/>}
append_if [expr !$use_rumpfs] config_of_app {
<inline description="shutdown">
<config>
<report focus="yes" hover="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" label="no" focus="click" hover="always" width="1" height="1" />
<policy label_prefix="pointer" domain="pointer"/>
<policy label_prefix="cpu_load_display" domain="cpu_load"/>
<default-policy domain=""/>
</config>
</inline>
<sleep milliseconds="500000"/>}
append config_of_app {
</rom>
</config> </config>
<route> <route>
<service name="Timer"> <child name="timer"/> </service> <service name="Timer"> <child name="timer"/> </service>
@ -284,6 +254,9 @@ for { set i 1} { $i <= $use_vms } { incr i} {
</config> </config>
<route>} <route>}
append_if [expr ($use_vms > 1)] config_of_app {
<service name="Nitpicker"> <child name="wm"/></service>}
append_if [expr $use_ram_fs] config_of_app { append_if [expr $use_ram_fs] config_of_app {
<service name="File_system" label="from_ram_fs"> <child name="ram_fs"/> </service>} <service name="File_system" label="from_ram_fs"> <child name="ram_fs"/> </service>}
@ -291,16 +264,11 @@ for { set i 1} { $i <= $use_vms } { incr i} {
<service name="File_system"> <child name="rump_fs"/> </service>} <service name="File_system"> <child name="rump_fs"/> </service>}
append_if [expr !$use_rumpfs] config_of_app { append_if [expr !$use_rumpfs] config_of_app {
<service name="Block"> <child name="part_block"/> </service>} <service name="Block"> <child name="part_block"/> </service>}
append config_of_app "
<service name=\"Framebuffer\"> <child name=\"nit_fb${i}\" /> </service>
<service name=\"Input\"> <child name=\"nit_fb${i}\" /> </service>
<service name=\"Report\" label=\"shape\">
<child name=\"pointer\" label=\"nit_fb${i} -> shape\"/>
</service>"
append config_of_app { append config_of_app {
<service name="Report" label="shape"> <child name="pointer"/></service>
<service name="Report"><child name="report_rom" /></service> <service name="Report"><child name="report_rom" /></service>
<service name="ROM" label="usb_devices"> <child name="report_rom" /> </service> <service name="ROM" label="usb_devices"> <child name="report_rom" /> </service>
<service name="ROM" label="capslock"> <child name="nit_fb-config"/> </service> <service name="ROM" label="capslock"> <child name="dynamic-config"/> </service>
<any-service> <parent/> <any-child /> </any-service> <any-service> <parent/> <any-child /> </any-service>
</route> </route>
</start>} </start>}

View File

@ -11,8 +11,8 @@ set use_gui 0
set use_bridge [expr $use_net && $use_gui] set use_bridge [expr $use_net && $use_gui]
set build_components { set build_components {
core init timer
drivers/framebuffer drivers/framebuffer
server/report_rom
} }
if {$use_vbox5} { if {$use_vbox5} {
@ -21,6 +21,12 @@ if {$use_vbox5} {
if {[have_spec nova]} { set virtualbox_binary "virtualbox5-nova" } if {[have_spec nova]} { set virtualbox_binary "virtualbox5-nova" }
} }
create_boot_directory
import_from_depot [depot_user]/src/[base_src] \
[depot_user]/src/init \
[depot_user]/src/nitpicker
source ${genode_dir}/repos/base/run/platform_drv.inc source ${genode_dir}/repos/base/run/platform_drv.inc
# override defaults of platform_drv.inc # override defaults of platform_drv.inc
proc platform_drv_priority {} { return { priority="-1"} } proc platform_drv_priority {} { return { priority="-1"} }
@ -33,17 +39,10 @@ lappend_if [have_spec x86] build_components drivers/rtc
lappend_if [expr $use_net] build_components drivers/nic lappend_if [expr $use_net] build_components drivers/nic
lappend_if [expr $use_bridge] build_components server/nic_bridge lappend_if [expr $use_bridge] build_components server/nic_bridge
lappend_if [expr $use_gui] build_components server/report_rom
lappend_if [expr $use_gui] build_components server/nitpicker
lappend_if [expr $use_gui] build_components server/nit_fb
lappend_if [expr $use_gui] build_components app/pointer
append_platform_drv_build_components append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory
set config { set config {
<config prio_levels="4"> <config prio_levels="4">
<parent-provides> <parent-provides>
@ -98,6 +97,7 @@ append_if [have_spec framebuffer] config {
<start name="fb_drv" priority="-1" caps="150"> <start name="fb_drv" priority="-1" caps="150">
<resource name="RAM" quantum="4M"/> <resource name="RAM" quantum="4M"/>
<provides><service name="Framebuffer"/></provides> <provides><service name="Framebuffer"/></provides>
<config width="1280" height="1024" depth="16" buffered="yes"/>
</start>} </start>}
append_if [have_spec sdl] config { append_if [have_spec sdl] config {
@ -145,7 +145,7 @@ append_if [expr $use_bridge] config {
</start> </start>
} }
append_if [expr $use_gui] config { append config {
<start name="report_rom" priority="-1"> <start name="report_rom" priority="-1">
<resource name="RAM" quantum="2M"/> <resource name="RAM" quantum="2M"/>
<provides> <service name="Report"/> <service name="ROM"/> </provides> <provides> <service name="Report"/> <service name="ROM"/> </provides>
@ -162,12 +162,12 @@ append_if [expr $use_gui] config {
<service name="Framebuffer"> <child name="fb_drv" /> </service> <service name="Framebuffer"> <child name="fb_drv" /> </service>
<service name="Report"> <child name="report_rom" /> </service>} <service name="Report"> <child name="report_rom" /> </service>}
append_if [expr ($use_gui && $use_ps2)] config { append_if [expr $use_ps2] config {
<service name="Input"> <child name="ps2_drv"/> </service>} <service name="Input"> <child name="ps2_drv"/> </service>}
append_if [expr ($use_gui && $use_usb)] config { append_if [expr $use_usb] config {
<service name="Input"> <child name="usb_drv"/> </service>} <service name="Input"> <child name="usb_drv"/> </service>}
append_if [expr $use_gui] config { append config {
<any-service> <parent/> <any-child /> </any-service> <any-service> <parent/> <any-child /> </any-service>
</route> </route>
<config> <config>
@ -183,6 +183,7 @@ append_if [expr $use_gui] config {
<start name="pointer" priority="-1"> <start name="pointer" priority="-1">
<resource name="RAM" quantum="2M"/> <resource name="RAM" quantum="2M"/>
<provides><service name="Report"/></provides>
<config shapes="yes"/> <config shapes="yes"/>
<route> <route>
<service name="Nitpicker"> <child name="nitpicker"/> </service> <service name="Nitpicker"> <child name="nitpicker"/> </service>
@ -190,39 +191,11 @@ append_if [expr $use_gui] config {
<service name="ROM" label="xray"> <child name="report_rom"/> </service> <service name="ROM" label="xray"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service> <any-service> <parent/> </any-service>
</route> </route>
</start> </start>}
<start name="nit_fb1" priority="-1">
<binary name="nit_fb"/>
<resource name="RAM" quantum="8M" />
<provides>
<service name="Framebuffer" />
<service name="Input" />
</provides>
<config xpos="10" ypos="10" width="1024" height="768"/>
<route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="nit_fb2" priority="-1">
<binary name="nit_fb"/>
<resource name="RAM" quantum="8M" />
<provides>
<service name="Framebuffer" />
<service name="Input" />
</provides>
<config xpos="410" ypos="310" width="1024" height="768"/>
<route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
append_if [expr $use_gui] config {
<start name="vbox2" priority="-2" caps="500">} <start name="vbox2" priority="-2" caps="500">}
append_if [expr $use_gui] config " append_if [expr $use_gui] config "
<binary name=\"$virtualbox_binary\"/>" <binary name=\"$virtualbox_binary\"/>"
append_if [expr $use_gui] config { append_if [expr $use_gui] config {
@ -269,13 +242,11 @@ append config {
append_if [expr $use_bridge] config { append_if [expr $use_bridge] config {
<service name="Nic"> <child name="nic_bridge"/> </service>} <service name="Nic"> <child name="nic_bridge"/> </service>}
append_if [expr $use_gui] config { append config {
<service name="Report" label="shape"> <child name="pointer" label="nit_fb1 -> shape"/> </service> <service name="Report" label="shape"> <child name="pointer" label="nit_fb1 -> shape"/> </service>
<service name="Report"> <child name="report_rom"/> </service> <service name="Report"> <child name="report_rom"/> </service>
<service name="Framebuffer"> <child name="nit_fb1" /> </service> <service name="Framebuffer"> <child name="nit_fb1" /> </service>
<service name="Input"> <child name="nit_fb1" /> </service>} <service name="Input"> <child name="nit_fb1" /> </service>
append config {
<any-service> <parent /> <any-child /> </any-service> <any-service> <parent /> <any-child /> </any-service>
</route> </route>
</start> </start>
@ -286,7 +257,7 @@ install_config $config
exec cp ${genode_dir}/repos/ports/run/test.vbox bin/. exec cp ${genode_dir}/repos/ports/run/test.vbox bin/.
set boot_modules { core ld.lib.so init timer test.iso test.vbox } set boot_modules { test.iso test.vbox }
append boot_modules $virtualbox_binary append boot_modules $virtualbox_binary
@ -298,9 +269,6 @@ lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec x86] boot_modules rtc_drv lappend_if [have_spec x86] boot_modules rtc_drv
lappend_if [expr $use_gui] boot_modules report_rom lappend_if [expr $use_gui] boot_modules report_rom
lappend_if [expr $use_gui] boot_modules nitpicker
lappend_if [expr $use_gui] boot_modules nit_fb
lappend_if [expr $use_gui] boot_modules pointer
append boot_modules { append boot_modules {
ld.lib.so libc.lib.so vfs.lib.so libm.lib.so libc_pipe.lib.so ld.lib.so libc.lib.so vfs.lib.so libm.lib.so libc_pipe.lib.so

View File

@ -27,8 +27,17 @@ if {[have_spec nova]} {
proc kernel_output { } { return "novga logmem" } proc kernel_output { } { return "novga logmem" }
} }
create_boot_directory
import_from_depot [depot_user]/src/[base_src] \
[depot_user]/src/init \
[depot_user]/src/nitpicker
if {$use_vms > 1} {
import_from_depot [depot_user]/pkg/themed_wm
}
append build_components { append build_components {
core init timer
server/part_block server/part_block
server/fs_rom server/fs_rom
drivers/ahci drivers/ahci
@ -55,8 +64,6 @@ append_platform_drv_build_components
build $build_components build $build_components
create_boot_directory
set config { set config {
<config verbose="yes" prio_levels="4">} <config verbose="yes" prio_levels="4">}
@ -363,9 +370,8 @@ append config {
install_config $config install_config $config
append boot_modules { append boot_modules {
core init timer
part_block ahci_drv fs_rom part_block ahci_drv fs_rom
ld.lib.so libc.lib.so vfs.lib.so libm.lib.so libc.lib.so vfs.lib.so libm.lib.so
libc_pipe.lib.so libc_terminal.lib.so libc_pipe.lib.so libc_terminal.lib.so
libiconv.lib.so stdcxx.lib.so libiconv.lib.so stdcxx.lib.so
qemu-usb.lib.so qemu-usb.lib.so

View File

@ -108,7 +108,7 @@ void GenodeConsole::update_video_mode()
if (!fb) if (!fb)
return; return;
if ((fb->w() == 0) && (fb->h() == 0)) { if ((fb->w() <= 1) && (fb->h() <= 1)) {
/* interpret a size of 0x0 as indication to quit VirtualBox */ /* interpret a size of 0x0 as indication to quit VirtualBox */
if (PowerButton() != S_OK) if (PowerButton() != S_OK)
Genode::error("ACPI shutdown failed"); Genode::error("ACPI shutdown failed");
@ -281,7 +281,7 @@ void GenodeConsole::handle_mode_change()
Genodefb *fb = dynamic_cast<Genodefb *>(pFramebuffer); Genodefb *fb = dynamic_cast<Genodefb *>(pFramebuffer);
fb->update_mode(); fb->update_mode(_nitpicker.mode());
update_video_mode(); update_video_mode();
} }
@ -330,8 +330,7 @@ void GenodeConsole::init_backends(IKeyboard * gKeyboard, IMouse * gMouse)
HRESULT rc = i_getDisplay()->QueryFramebuffer(0, &pFramebuffer); HRESULT rc = i_getDisplay()->QueryFramebuffer(0, &pFramebuffer);
Assert(SUCCEEDED(rc) && pFramebuffer); Assert(SUCCEEDED(rc) && pFramebuffer);
Genodefb *fb = dynamic_cast<Genodefb *>(pFramebuffer); _nitpicker.mode_sigh(_mode_change_signal_dispatcher);
fb->mode_sigh(_mode_change_signal_dispatcher);
handle_mode_change(); handle_mode_change();
} }

View File

@ -14,11 +14,14 @@
/* Genode includes */ /* Genode includes */
#include <base/log.h> #include <base/log.h>
#include <base/attached_dataspace.h>
#include <base/attached_rom_dataspace.h>
#include <input/event.h> #include <input/event.h>
#include <input/keycodes.h> #include <input/keycodes.h>
#include <input_session/connection.h> #include <input_session/connection.h>
#include <base/attached_dataspace.h> #define Framebuffer Fb_Genode
#include <base/attached_rom_dataspace.h> #include <nitpicker_session/connection.h>
#undef Framebuffer
#include <os/reporter.h> #include <os/reporter.h>
#include <report_session/connection.h> #include <report_session/connection.h>
#include <timer_session/connection.h> #include <timer_session/connection.h>
@ -111,7 +114,8 @@ class GenodeConsole : public Console {
private: private:
Input::Connection _input; Nitpicker::Connection _nitpicker;
Input::Session_client &_input;
unsigned _ax, _ay; unsigned _ax, _ay;
bool _last_received_motion_event_was_absolute; bool _last_received_motion_event_was_absolute;
Report::Connection _shape_report_connection; Report::Connection _shape_report_connection;
@ -141,7 +145,8 @@ class GenodeConsole : public Console {
GenodeConsole() GenodeConsole()
: :
Console(), Console(),
_input(genode_env()), _nitpicker(genode_env()),
_input(*_nitpicker.input()),
_ax(0), _ay(0), _ax(0), _ay(0),
_last_received_motion_event_was_absolute(false), _last_received_motion_event_was_absolute(false),
_shape_report_connection(genode_env(), "shape", _shape_report_connection(genode_env(), "shape",
@ -172,6 +177,8 @@ class GenodeConsole : public Console {
} }
} }
Nitpicker::Connection &nitpicker() { return _nitpicker; }
void init_clipboard(); void init_clipboard();
void init_backends(IKeyboard * gKeyboard, IMouse * gMouse); void init_backends(IKeyboard * gKeyboard, IMouse * gMouse);

View File

@ -14,7 +14,7 @@
/* Genode includes */ /* Genode includes */
#define Framebuffer Fb_Genode #define Framebuffer Fb_Genode
#include <framebuffer_session/connection.h> #include <framebuffer_session/connection.h>
#include <nitpicker_session/nitpicker_session.h> #include <nitpicker_session/connection.h>
#undef Framebuffer #undef Framebuffer
#include <os/texture_rgb565.h> #include <os/texture_rgb565.h>
@ -26,20 +26,24 @@
#include "Global.h" #include "Global.h"
#include "VirtualBoxBase.h" #include "VirtualBoxBase.h"
typedef Nitpicker::Session::View_handle View_handle;
class Genodefb : class Genodefb :
VBOX_SCRIPTABLE_IMPL(IFramebuffer) VBOX_SCRIPTABLE_IMPL(IFramebuffer)
{ {
private: private:
Genode::Env &_env; Genode::Env &_env;
Fb_Genode::Connection _fb; Nitpicker::Connection &_nitpicker;
Fb_Genode::Session &_fb;
View_handle _view;
/* The mode at the time when the mode change signal was received */
Fb_Genode::Mode _next_fb_mode { 1024, 768, Fb_Genode::Mode::RGB565 };
/* The mode matching the currently attached dataspace */ /* The mode matching the currently attached dataspace */
Fb_Genode::Mode _fb_mode; Fb_Genode::Mode _fb_mode;
/* The mode at the time when the mode change signal was received */
Fb_Genode::Mode _next_fb_mode;
/* /*
* The mode currently used by the VM. Can be smaller than the * The mode currently used by the VM. Can be smaller than the
* framebuffer mode. * framebuffer mode.
@ -56,14 +60,42 @@ class Genodefb :
_fb.refresh(0, 0, _virtual_fb_mode.width(), _virtual_fb_mode.height()); _fb.refresh(0, 0, _virtual_fb_mode.width(), _virtual_fb_mode.height());
} }
void _adjust_buffer()
{
_nitpicker.buffer(Fb_Genode::Mode(_next_fb_mode.width(), _next_fb_mode.height(),
Fb_Genode::Mode::RGB565), false);
typedef Nitpicker::Session::Command Command;
Nitpicker::Rect rect(Nitpicker::Point(0, 0),
Nitpicker::Area(_next_fb_mode.width(), _next_fb_mode.height()));
_nitpicker.enqueue<Command::Geometry>(_view, rect);
_nitpicker.execute();
}
Fb_Genode::Mode _initial_setup()
{
typedef Nitpicker::Session::Command Command;
_view = _nitpicker.create_view();
_adjust_buffer();
_nitpicker.enqueue<Command::To_front>(_view, View_handle());
_nitpicker.execute();
return _next_fb_mode;
}
public: public:
Genodefb (Genode::Env &env) Genodefb (Genode::Env &env, Nitpicker::Connection &nitpicker)
: :
_env(env), _env(env),
_fb(env, Fb_Genode::Mode(0, 0, Fb_Genode::Mode::INVALID)), _nitpicker(nitpicker),
_fb_mode(_fb.mode()), _fb(*nitpicker.framebuffer()),
_next_fb_mode(_fb_mode), _fb_mode(_initial_setup()),
_virtual_fb_mode(_fb_mode), _virtual_fb_mode(_fb_mode),
_fb_base(env.rm().attach(_fb.dataspace())) _fb_base(env.rm().attach(_fb.dataspace()))
{ {
@ -75,15 +107,10 @@ class Genodefb :
int w() const { return _next_fb_mode.width(); } int w() const { return _next_fb_mode.width(); }
int h() const { return _next_fb_mode.height(); } int h() const { return _next_fb_mode.height(); }
void mode_sigh(Genode::Signal_context_capability sigh) void update_mode(Fb_Genode::Mode mode)
{
_fb.mode_sigh(sigh);
}
void update_mode()
{ {
Lock(); Lock();
_next_fb_mode = _fb.mode(); _next_fb_mode = mode;
Unlock(); Unlock();
} }
@ -111,7 +138,9 @@ class Genodefb :
Genode::log("fb resize : [", screen, "] ", Genode::log("fb resize : [", screen, "] ",
_virtual_fb_mode.width(), "x", _virtual_fb_mode.width(), "x",
_virtual_fb_mode.height(), " -> ", _virtual_fb_mode.height(), " -> ",
w, "x", h); w, "x", h,
" (host: ", _next_fb_mode.width(), "x",
_next_fb_mode.height(), ")");
if ((w < (ULONG)_next_fb_mode.width()) || if ((w < (ULONG)_next_fb_mode.width()) ||
(h < (ULONG)_next_fb_mode.height())) { (h < (ULONG)_next_fb_mode.height())) {
@ -125,6 +154,8 @@ class Genodefb :
_env.rm().detach(_fb_base); _env.rm().detach(_fb_base);
_adjust_buffer();
_fb_base = _env.rm().attach(_fb.dataspace()); _fb_base = _env.rm().attach(_fb.dataspace());
result = S_OK; result = S_OK;
@ -133,7 +164,9 @@ class Genodefb :
Genode::log("fb resize : [", screen, "] ", Genode::log("fb resize : [", screen, "] ",
_virtual_fb_mode.width(), "x", _virtual_fb_mode.width(), "x",
_virtual_fb_mode.height(), " -> ", _virtual_fb_mode.height(), " -> ",
w, "x", h, " ignored"); w, "x", h, " ignored"
" (host: ", _next_fb_mode.width(), "x",
_next_fb_mode.height(), ")");
Unlock(); Unlock();

View File

@ -169,7 +169,7 @@ HRESULT setupmachine(Genode::Env &env)
for (unsigned uScreenId = 0; uScreenId < cMonitors; uScreenId++) for (unsigned uScreenId = 0; uScreenId < cMonitors; uScreenId++)
{ {
Genodefb *fb = new Genodefb(env); Genodefb *fb = new Genodefb(env, genodeConsole->nitpicker());
HRESULT rc = display->AttachFramebuffer(uScreenId, fb, gaFramebufferId[uScreenId].asOutParam()); HRESULT rc = display->AttachFramebuffer(uScreenId, fb, gaFramebufferId[uScreenId].asOutParam());
if (FAILED(rc)) if (FAILED(rc))
return rc; return rc;