genode/repos/ports/run/virtualbox_auto.inc
Norman Feske ef741ef80d Change pixel format to 32 bits per pixel
Until now, Genode's framebuffer session interface was based on the
RGB565 pixel format. This patch changes the pixel format to 32-bit
XRGB where the X part is ignored. It adapts all graphical applications
and device drivers accordingly.

The patch also adjusts the users of the drivers_interactive packages,
assigning 64 MiB RAM and 1500 caps to the drivers subsystem, which is
sufficient for covering high resolutions at 32 bits per pixel and to
accommodate multi-component USB HID input stacks.

Fixes #3784
2020-06-29 14:22:29 +02:00

411 lines
13 KiB
PHP

assert_spec x86
if {(![have_spec nova] && ![have_spec foc])} {
puts "Platform is unsupported."
exit 0
}
if {[have_include "power_on/qemu"]} {
puts "\nRun script does not support Qemu.\n"
exit
}
if { [get_cmd_switch --autopilot] && [have_spec x86_32] } {
puts "Run script does not support autopilot mode on 32 bit"
exit 0
}
if {[have_spec nova]} {
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 {
server/part_block
server/fs_rom
drivers/ahci
drivers/framebuffer
}
lappend_if [expr $use_serial] build_components server/log_terminal
lappend_if [expr $use_rumpfs] build_components lib/vfs/rump
lappend_if [expr $use_rumpfs] build_components server/vfs
lappend_if [expr $use_vbox5] build_components virtualbox5
lappend_if [expr $use_ps2] build_components drivers/input
lappend_if [expr $use_usb] build_components drivers/usb
lappend_if [expr $use_usb] build_components app/usb_report_filter
lappend_if [have_spec x86] build_components drivers/rtc
lappend_if [expr $use_ram_fs || $use_usb] build_components lib/vfs/import
lappend_if [expr $use_cpu_load] build_components app/trace_subject_reporter
lappend_if [expr $use_cpu_load] build_components app/cpu_load_display
lappend_if [expr $use_cpu_load] build_components app/top
lappend_if [have_spec nova] build_components app/log_core
source ${genode_dir}/repos/base/run/platform_drv.inc
# override defaults of platform_drv.inc
proc platform_drv_priority {} { return { priority="-1"} }
append_platform_drv_build_components
build $build_components
if {$use_rumpfs && !$use_ram_fs} {
set rump_writable true
} else {
set rump_writable false
}
set config {
<config verbose="yes" prio_levels="4">}
if {$use_vms > 1} {
append config "
<affinity-space width=\"${affinity_space_width}\" height=\"1\"/>"
}
append config {
<parent-provides>
<service name="ROM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
<service name="VM"/>}
append_if [expr $use_cpu_load] config {
<service name="TRACE"/>}
append config {
</parent-provides>
<default-route>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
<default caps="100"/>
<start name="timer">
<resource name="RAM" quantum="1M"/>
<provides><service name="Timer"/></provides>
</start>
<start name="ahci_drv" priority="-1">
<resource name="RAM" quantum="10M"/>
<provides><service name="Block"/></provides>
<config>
<policy label_prefix="part_block" device="0" writeable="yes"/>
</config>
</start>
<start name="part_block" priority="-1">
<resource name="RAM" quantum="10M"/>
<provides><service name="Block"/></provides>
<route>
<any-service><child name="ahci_drv"/> <parent/><any-child/></any-service>
</route>
<config>}
append_if [expr $use_rumpfs] config {
<policy label_prefix="rump_fs" partition="4" writeable="yes"/>}
append_if [expr !$use_rumpfs] config {
<policy label_prefix="vbox1 -> raw" partition="3" writeable="yes"/>}
append config {
</config>
</start>}
append_if [have_spec nova] config {
<start name="log_kernel">
<binary name="log_core"/>
<resource name="RAM" quantum="10M"/>
<config period_ms="2000"/>
<route>
<service name="ROM" unscoped_label="log_core"> <parent/> </service>
<service name="ROM" unscoped_label="ld.lib.so"> <parent/> </service>
<service name="ROM" label="log"> <parent label="kernel_log"/> </service>
<service name="Timer"> <child name="timer"/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
</route>
</start>}
append_if [expr $use_rumpfs] config {
<start name="rump_fs" priority="-1" caps="200">
<binary name="vfs"/>
<resource name="RAM" quantum="32M"/>
<provides><service name="File_system"/></provides>
<config ld_verbose="yes">
<vfs>
<rump fs="ext2fs" ram="28M"/>
</vfs>}
append_if [expr $use_rumpfs && $use_ram_fs && $use_overlay_from_disk] config {
<policy label_prefix="overlay_from_disk" root="/ram" writeable="no"/>}
append_if [expr $use_rumpfs] config {
<default-policy root="/" writeable="} $rump_writable {"/>
</config>
<route>
<any-service><child name="part_block"/> <parent/><any-child/></any-service>
</route>
</start>}
append_if [expr $use_ram_fs] config {
<start name="ram_fs" priority="-1" caps="1800">
<binary name="vfs"/>}
append_if [expr $use_ram_fs] config "
<resource name=\"RAM\" quantum=\"[expr $use_vms * 8 * 128]M\"/>"
append_if [expr $use_ram_fs] config {
<provides><service name="File_system"/></provides>
<config>
<vfs>
<ram/>
<import>}
for { set i 1} { $i <= ${use_vms} } { incr i} {
append_if [expr $use_ram_fs] config "
<dir name=\"ram${i}\">
<rom name=\"${overlay_image}\"/>
</dir>"
}
append_if [expr $use_ram_fs] config {
</import>
</vfs>
<!-- constrain sessions according to their labels -->}
for { set i 1} { $i <= ${use_vms} } { incr i} {
append_if [expr $use_ram_fs] config "
<policy label_prefix=\"vbox${i} -> from_ram_fs\" root=\"/ram${i}\" writeable=\"yes\"/>"
}
append_if [expr $use_ram_fs] config {
</config>
<route>}
append_if [expr $use_ram_fs && $use_overlay_from_disk] config "<service name=\"ROM\" label=\"${overlay_image}\">"
append_if [expr $use_ram_fs && $use_overlay_from_disk] config {
<child name="overlay_from_disk"/></service>}
append_if [expr $use_ram_fs] config {
<any-service> <parent/> <any-child/></any-service>
</route>
</start>}
append_if [expr $use_ram_fs && $use_overlay_from_disk] config {
<start name="overlay_from_disk" priority="-1">
<binary name="fs_rom"/>
<resource name="RAM" quantum="32M"/>
<provides><service name="ROM"/></provides>
<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>}
append_platform_drv_config
append_if [expr $use_ps2] config {
<start name="ps2_drv" priority="-1">
<resource name="RAM" quantum="1M"/>
<provides><service name="Input"/></provides>
<config/>
</start>}
append_if [expr $use_cpu_load] config {
<start name="trace_subject_reporter" priority="-1">
<resource name="RAM" quantum="6M"/>
<config period_ms="500">
<report activity="yes" affinity="yes"/>
</config>
<route>
<service name="TRACE"><parent/></service>
<service name="LOG"><parent/></service>
<service name="Timer"><child name="timer"/></service>
<service name="Report"><child name="report_rom"/></service>
<any-service><parent/></any-service>
</route>
</start>
<start name="cpu_load_display" priority="-1">
<resource name="RAM" quantum="6M"/>
<config/>
<route>
<service name="LOG"><parent/></service>
<service name="Timer"><child name="timer"/></service>
<service name="ROM" label="trace_subjects"><child name="report_rom"/></service>
<service name="Gui"><child name="nitpicker"/></service>
<any-service><parent/></any-service>
</route>
</start>
<start name="top" priority="-1">
<resource name="RAM" quantum="2M"/>
<config period_ms="10000"/>
<route>
<service name="TRACE"><parent/></service>
<service name="LOG"><parent/></service>
<service name="Timer"><child name="timer"/></service>
<service name="Report"><child name="report_rom"/></service>
<any-service><parent/></any-service>
</route>
</start>}
append_if [expr $use_usb] config {
<start name="usb_config_fs" priority="-1">
<binary name="vfs"/>
<resource name="RAM" quantum="2M"/>
<provides><service name="File_system"/></provides>
<config verbose="yes">
<vfs>
<ram/>
<import>
<inline name="usb_drv.config">
<config uhci="yes" ohci="yes" ehci="yes" xhci="yes">
<hid/>
<raw>
<report devices="yes"/>
</raw>
</config>
</inline>
<inline name="usb_report_filter.config">
<config>
<!-- USB device whitelist -->
<client label="vbox1"/>
<device vendor_id="0x13fe" product_id="0x5200"/> <!-- platinum stick -->
<device vendor_id="0x148f" product_id="0x2573"/> <!-- ralink wifi -->
<device vendor_id="0x1f75" product_id="0x0917"/> <!-- intenso stick -->
<device vendor_id="0x04f9" product_id="0x0051"/> <!-- brother printer -->
<device vendor_id="0x090c" product_id="0x6000"/> <!-- hama sd/hc reader -->
<device vendor_id="0x1b1c" product_id="0x1a09"/> <!-- voyager gt stick -->
<device vendor_id="0x1b1c" product_id="0x1a03"/> <!-- voyager stick -->
<device vendor_id="0x04b3" product_id="0x310d"/> <!-- lenovo mouse -->
<device vendor_id="0x04b3" product_id="0x310c"/> <!-- lenovo mouse -->
<device vendor_id="0x04b3" product_id="0x3025"/> <!-- lenovo keyboard -->
<device vendor_id="0x046a" product_id="0x0001"/> <!-- cherry keyboard -->
<device vendor_id="0x0482" product_id="0x0015"/> <!-- kyo printer -->
<device vendor_id="0x04a9" product_id="0x2220"/> <!-- canon scanner -->
<device vendor_id="0x067b" product_id="0x2303"/> <!-- prolific serial -->
<device vendor_id="0x0583" product_id="0x2060"/> <!-- snes controller -->
<device vendor_id="0x045e" product_id="0x028e"/> <!-- x360 controller -->
<device vendor_id="0x046d" product_id="0xc00e"/> <!-- logitech mouse -->
<device vendor_id="0x0984" product_id="0x0066"/> <!-- lenovo DVDRW -->
<device vendor_id="0x174c" product_id="0x5106"/> <!-- delock SATA -->
</config>
</inline>
</import>
</vfs>
<policy label_prefix="usb_report_filter" root="/" writeable="yes"/>
<policy label_prefix="usb_config_rom" root="/"/>
</config>
</start>
<start name="usb_config_rom" priority="-1">
<binary name="fs_rom"/>
<resource name="RAM" quantum="1200K"/>
<provides><service name="ROM"/></provides>
<route>
<service name="File_system"><child name="usb_config_fs"/></service>
<any-service><parent/><any-child/></any-service>
</route>
</start>
<start name="usb_report_filter" priority="-1">
<resource name="RAM" quantum="1200K"/>
<route>
<service name="Report"><child name="report_rom"/></service>
<service name="ROM" label="config">
<child name="usb_config_rom" label="usb_report_filter.config"/>
</service>
<service name="ROM" label="devices">
<child name="report_rom"/>
</service>
<service name="ROM" label="usb_drv_config">
<child name="report_rom"/>
</service>
<service name="File_system" label="usb_drv.config">
<child name="usb_config_fs"/>
</service>
<any-service><parent/><any-child/></any-service>
</route>
</start>
<start name="usb_drv" priority="-1" caps="120">
<resource name="RAM" quantum="20M"/>
<provides>
<service name="Input"/>
<service name="Usb"/>
</provides>
<route>
<service name="Report"><child name="report_rom"/></service>
<service name="ROM" label="config">
<child name="usb_config_rom" label="usb_drv.config"/> </service>
<any-service><parent/><any-child/></any-service>
</route>
</start>
}
append_if [have_spec framebuffer] config {
<start name="fb_drv" priority="-1" caps="150">
<binary name="vesa_fb_drv"/>
<resource name="RAM" quantum="16M"/>
<provides><service name="Framebuffer"/></provides>
<config buffered="yes"/>
</start>}
append_if [have_spec x86] config {
<start name="rtc_drv" priority="-1">
<resource name="RAM" quantum="1M"/>
<provides>
<service name="Rtc"/>
</provides>
</start>}
append_if [expr $use_serial] config {
<start name="log_terminal" priority="-1">
<resource name="RAM" quantum="2M"/>
<provides>
<service name="Terminal"/>
</provides>
</start>}
append config $config_of_app
append config {
</config>
}
install_config $config
append boot_modules {
part_block ahci_drv fs_rom vfs
libc.lib.so vfs.lib.so libm.lib.so
libc_pipe.lib.so
libiconv.lib.so stdcxx.lib.so
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 vfs_rump.lib.so
lappend_if [expr $use_serial] boot_modules log_terminal
lappend_if [expr $use_vbox5] boot_modules $virtualbox5_binary
lappend_if [expr $use_ram_fs || $use_usb] boot_modules vfs_import.lib.so
lappend_if [expr $use_ram_fs && !$use_overlay_from_disk] boot_modules $overlay_image
lappend_if [expr $use_cpu_load] boot_modules trace_subject_reporter
lappend_if [expr $use_cpu_load] boot_modules cpu_load_display
lappend_if [expr $use_cpu_load] boot_modules top
lappend_if [have_spec nova] boot_modules log_core
# platform-specific modules
lappend_if [expr $use_ps2] boot_modules ps2_drv
lappend_if [expr $use_usb] boot_modules usb_drv
lappend_if [expr $use_usb] boot_modules usb_report_filter
lappend_if [have_spec framebuffer] boot_modules vesa_fb_drv
lappend_if [have_spec x86] boot_modules rtc_drv
append_platform_drv_boot_modules