mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-21 06:33:31 +00:00
4b46abf813
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
322 lines
9.5 KiB
Plaintext
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
|
|
}
|