genode/repos/os/run/demo.run
Norman Feske 4b46abf813 base: rm first-class support for static binaries
This patch removes the detection of statically linked executables from
the base framework. It thereby fixes the corner cases encountered with
Sculpt when obtaining the binaries of the runtime from the depot_rom
service that is hosted within the runtime.

Statically linked binaries and hybrid Linux/Genode (lx_hybrid) binaries
can still be started by relabeling the ROM-session route of "ld.lib.so"
to the binary name, pretending that the binary is the dynamic linker.
This can be achieved via init's label rewriting mechanism:

  <route>
    <service name="ROM" unscoped_label="ld.lib.so">
      <parent label="test-platform"/> </service>
  </route>

However, as this is quite cryptic and would need to be applied for all
lx_hybrid components, the patch adds a shortcut to init's configuration.
One can simply add the 'ld="no"' attribute to the <start> node of the
corresponding component:

  <start name="test-platform" ld="no"/>

Fixes #2866
2018-08-02 14:36:38 +02:00

322 lines
9.5 KiB
Plaintext

#
# Build
#
if {[have_spec odroid_xu] ||
[have_spec wand_quad] ||
([get_cmd_switch --autopilot] && [have_spec linux]) ||
([get_cmd_switch --autopilot] && [have_include "power_on/qemu"])} {
puts "Run script does not support this platform."
exit 0
}
set build_components {
core init
drivers/timer
server/nitpicker app/pointer app/status_bar app/global_keys_handler
app/nit_focus
server/liquid_framebuffer app/launchpad app/scout
test/nitpicker server/nitlog
drivers/framebuffer drivers/input
server/report_rom server/rom_filter
}
proc gpio_drv { } { if {[have_spec rpi] && [have_spec hw]} { return hw_gpio_drv }
if {[have_spec rpi] && [have_spec foc]} { return foc_gpio_drv }
return gpio_drv }
source ${genode_dir}/repos/base/run/platform_drv.inc
lappend_if [need_usb_hid] build_components drivers/usb
lappend_if [have_spec gpio] build_components drivers/gpio
append_platform_drv_build_components
build $build_components
create_boot_directory
#
# Generate config
#
append config {
<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"/>
</parent-provides>
<default-route>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
<default caps="100"/>}
append_if [have_spec sdl] config {
<start name="fb_sdl" ld="no">
<resource name="RAM" quantum="4M"/>
<provides>
<service name="Input"/>
<service name="Framebuffer"/>
</provides>
</start>}
append_platform_drv_config
append_if [have_spec framebuffer] config {
<start name="fb_drv" caps="130">
<provides><service name="Framebuffer"/></provides>}
append_if [expr [have_spec framebuffer] && [have_spec x86]] config {
<resource name="RAM" quantum="4M"/>
<config width="1024" height="768"/>
</start>}
append_if [expr [have_spec framebuffer] && ![have_spec x86]] config {
<resource name="RAM" quantum="5M"/>
<config/>
</start>}
append_if [have_spec gpio] config "
<start name=\"[gpio_drv]\" caps=\"140\">
<resource name=\"RAM\" quantum=\"4M\"/>
<provides><service name=\"Gpio\"/></provides>
<config/>
</start>"
append_if [have_spec imx53] config {
<start name="input_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Input"/></provides>
<config/>
</start> }
append_if [have_spec ps2] config {
<start name="ps2_drv">
<resource name="RAM" quantum="1096K"/>
<provides><service name="Input"/></provides>
</start>}
append_if [need_usb_hid] config {
<start name="usb_drv" caps="120">
<resource name="RAM" quantum="12M"/>
<provides><service name="Input"/></provides>
<config ehci="yes" uhci="yes" xhci="no"> <hid/> </config>
</start> }
append config {
<start name="timer">
<resource name="RAM" quantum="1M"/>
<provides><service name="Timer"/></provides>
</start>
<start name="report_rom">
<resource name="RAM" quantum="1M"/>
<provides> <service name="Report"/> <service name="ROM"/> </provides>
<config verbose="no">
<policy label="status_bar -> focus" report="nitpicker -> focus"/>
<policy label="nitpicker_config -> xray" report="global_keys_handler -> xray"/>
<policy label="global_keys_handler -> hover" report="nitpicker -> hover"/>
<policy label="nit_focus -> clicked" report="nitpicker -> clicked"/>
<policy label="nitpicker -> focus" report="nit_focus -> focus"/>
</config>
</start>
<start name="nitpicker_config">
<binary name="rom_filter"/>
<resource name="RAM" quantum="1096K"/>
<provides><service name="ROM"/></provides>
<config>
<input name="xray_enabled" rom="xray" node="xray">
<attribute name="enabled" /> </input>
<output node="config">
<attribute name="focus" value="rom"/>
<inline>
<report focus="yes" xray="yes" hover="yes" keystate="yes"
clicked="yes"/>
<domain name="pointer" layer="1" origin="pointer"
content="client" label="no"/>
<domain name="panel" layer="2"
content="client" label="no" hover="always"/>
</inline>
<if>
<has_value input="xray_enabled" value="no" />
<then>
<inline>
<domain name="launchpad" layer="3"
content="client" label="no" hover="always" focus="click"
ypos="18" height="-18" />
<domain name="" layer="3"
content="client" label="no" hover="always" focus="click"
ypos="18" height="-18" />
</inline>
</then>
<else>
<inline>
<domain name="launchpad" layer="3" color="#dd0000"
content="tinted" label="yes" hover="focused" focus="click"
ypos="18" height="-18" />
<domain name="" layer="3" color="#55dd34"
content="tinted" label="yes" hover="focused" focus="click"
ypos="18" height="-18" />
</inline>
</else>
</if>
<inline>
<policy label_prefix="pointer" domain="pointer"/>
<policy label_prefix="status_bar" domain="panel"/>
<policy label_prefix="scout -> launchpad" domain="launchpad"/>
<default-policy domain=""/>
<global-key name="KEY_SCROLLLOCK" label="global_keys_handler -> input" />
<global-key name="KEY_F1" label="global_keys_handler -> input" />
<global-key name="KEY_F2" label="global_keys_handler -> input" />
</inline>
</output>
</config>
<route>
<service name="ROM" label="xray"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="global_keys_handler">
<resource name="RAM" quantum="1096K"/>
<config>
<bool name="xray" initial="no"/>
<press name="KEY_SCROLLLOCK" bool="xray" change="toggle"/>
<press name="KEY_F1" bool="xray" change="on"/>
<release name="KEY_F1" bool="xray" change="off"/>
<press name="KEY_F2" bool="xray" change="toggle"/>
<report name="xray" delay_ms="125">
<hovered domain="panel"/>
<bool name="xray"/>
</report>
</config>
<route>
<service name="Report"> <child name="report_rom"/> </service>
<service name="ROM" label="hover"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="nitpicker" caps="110">
<resource name="RAM" quantum="1216K"/>
<provides><service name="Nitpicker"/></provides>
<configfile name="nitpicker.config"/>
<route>
<service name="ROM" label="nitpicker.config">
<child name="nitpicker_config"/> </service>
<service name="ROM" label="focus">
<child name="report_rom"/> </service>
<service name="Report">
<child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="pointer">
<resource name="RAM" quantum="1096K"/>
<config/>
</start>
<start name="nit_focus">
<resource name="RAM" quantum="1M"/>
<config> <default-policy focus="yes"/> </config>
<route>
<service name="ROM" label="clicked"> <child name="report_rom"/> </service>
<service name="Report"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="status_bar">
<resource name="RAM" quantum="1096K"/>
<route>
<service name="ROM" label="focus"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="scout" caps="10000">
<resource name="RAM" quantum="64M" />
</start>
</config>}
install_config $config
#
# Create launchpad configuration
#
set launchpad_config_fd [open "bin/launchpad.config" w]
puts $launchpad_config_fd {<config>
<launcher name="testnit" ram_quota="768K" caps="50"/>
<launcher name="scout" ram_quota="41M" caps="200"/>
<launcher name="launchpad" ram_quota="6M" caps="1000">
<configfile name="launchpad.config" />
</launcher>
<launcher name="nitlog" ram_quota="1M" caps="70"/>
<launcher name="liquid_fb" ram_quota="7M" caps="70">
<config resize_handle="on" />
</launcher>
<launcher name="nitpicker" ram_quota="1M" caps="70">
<config>
<domain name="" layer="3" conten="client" label="no" focus="click"/>
<default-policy domain="" />
</config>
</launcher>
</config>}
close $launchpad_config_fd
#
# Boot modules
#
# generic modules
set boot_modules {
core ld.lib.so init
timer
nitpicker pointer status_bar report_rom rom_filter global_keys_handler
nit_focus
liquid_fb launchpad scout testnit nitlog
launchpad.config
}
# platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [need_usb_hid] boot_modules usb_drv
lappend_if [have_spec gpio] boot_modules [gpio_drv]
lappend_if [have_spec imx53] boot_modules input_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules
if {[get_cmd_switch --autopilot]} {
run_genode_until {\[init -> scout\] png is.*\n} 40
grep_output {(requests resources: ram_quota)|(Error)}
# remove Error messages which are not fatal, mostly
unify_output {(?n)^.*platform_drv] Error:.*ACPI table information is wrong.*$} ""
unify_output {(?n)^.*platform_drv] Error: adjust size from.*$} ""
unify_output {(?n)^.*acpi_drv] Error:.*platform_info.*$} ""
unify_output {(?n)^.*ps2_drv] Error: no data available.*$} ""
unify_output {(?n)^.*ps2_drv] Error: failed to read from port.*$} ""
compare_output_to {}
} else {
run_genode_until forever
}