mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-25 00:11:07 +00:00
9662d89cfb
This commit applies the transition from the "Input" session to the "Event" session to the event-filtering mechansim. The functionality of the input_filter is now provided by the event_filter. The event filter requests only one "Event" session as destination for the filter result, which is usually routed to the nitpicker GUI server. It provides an "Event" service to which any number of event sources can connect. The configuration of the filter chain remains almost the same. Only the declaration of the <input> nodes is no longer needed. Instead, the configuration must specify <policy> nodes, which define the mapping of "Event" clients (event sources) to the inputs used in the filter chain. The patch adjusts all uses of the nitpicker GUI server accordingly such that the event filter reports events to nitpicker's event service instead of having nitpicker request an "Input" session. This dissolves the dependency of nitpicker from input drivers. Issue #3827
176 lines
4.8 KiB
Tcl
176 lines
4.8 KiB
Tcl
#
|
|
# \brief Example for debugging a service
|
|
# \author Norman Feske
|
|
# \date 2011-09-13
|
|
#
|
|
# This example shows how GDB monitor can be used to debug a Genode service.
|
|
# GDB monitor sits in between the service and the service's parent. Any
|
|
# service announcements are transparently propagated through the GDB
|
|
# monitor to the parent. This way, the internal state of a service can
|
|
# be observed at any time via a remote GDB connection. In the example,
|
|
# the remote GDB connection is realized via an UART device. Alternatively,
|
|
# 'tcp_terminal' could be used (to attach GDB via a network connection).
|
|
#
|
|
|
|
if {![have_include "power_on/qemu"] ||
|
|
!([have_spec nova])} {
|
|
puts "Run script is only supported for NOVA in Qemu"; exit 0
|
|
}
|
|
|
|
create_boot_directory
|
|
import_from_depot [depot_user]/src/[base_src] \
|
|
[depot_user]/pkg/[drivers_interactive_pkg] \
|
|
[depot_user]/src/nitpicker \
|
|
[depot_user]/src/demo \
|
|
[depot_user]/src/init \
|
|
[depot_user]/src/vfs_pipe
|
|
|
|
set build_components {
|
|
drivers/uart
|
|
app/gdb_monitor
|
|
test/gdb_monitor
|
|
}
|
|
lappend build_components "lib/gdbserver_platform-$::env(KERNEL)"
|
|
build $build_components
|
|
|
|
install_config {
|
|
<config verbose="yes">
|
|
<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"/>
|
|
|
|
<start name="timer">
|
|
<resource name="RAM" quantum="1M"/>
|
|
<provides> <service name="Timer"/> </provides>
|
|
</start>
|
|
|
|
<start name="pc_uart_drv">
|
|
<resource name="RAM" quantum="1M"/>
|
|
<provides>
|
|
<service name="Uart"/>
|
|
<service name="Terminal"/>
|
|
</provides>
|
|
<config>
|
|
<policy label_prefix="gdb_monitor" uart="1"/>
|
|
</config>
|
|
</start>
|
|
|
|
<start name="drivers" caps="1500">
|
|
<resource name="RAM" quantum="64M" constrain_phys="yes"/>
|
|
<binary name="init"/>
|
|
<route>
|
|
<service name="ROM" label="config"> <parent label="drivers.config"/> </service>
|
|
<service name="Timer"> <child name="timer"/> </service>
|
|
<service name="Capture"> <child name="gdb_monitor"/> </service>
|
|
<service name="Event"> <child name="gdb_monitor"/> </service>
|
|
<any-service> <parent/> </any-service>
|
|
</route>
|
|
</start>
|
|
|
|
<start name="gdb_monitor" caps="200">
|
|
<resource name="RAM" quantum="10M"/>
|
|
<provides>
|
|
<service name="Gui"/> <service name="Capture"/> <service name="Event"/>
|
|
</provides>
|
|
<config>
|
|
<target name="nitpicker">
|
|
<config request_framebuffer="no" request_input="no">
|
|
<capture/> <event/>
|
|
<domain name="pointer" layer="1" xray="no" origin="pointer"
|
|
content="client" label="no"/>
|
|
<domain name="default" layer="3" content="client"
|
|
label="no" hover="always" focus="click"/>
|
|
<policy label_prefix="pointer" domain="pointer"/>
|
|
<default-policy domain="default"/>
|
|
</config>
|
|
</target>
|
|
<preserve name="RAM" quantum="2M"/>
|
|
<vfs>
|
|
<dir name="dev"> <log/> <terminal/> </dir>
|
|
<dir name="pipe"> <pipe/> </dir>
|
|
</vfs>
|
|
<libc stdout="/dev/log" stderr="/dev/log" pipe="/pipe"/>
|
|
</config>
|
|
</start>
|
|
|
|
<start name="pointer">
|
|
<resource name="RAM" quantum="1M"/>
|
|
</start>
|
|
|
|
<start name="scout">
|
|
<resource name="RAM" quantum="32M"/>
|
|
</start>
|
|
</config>
|
|
}
|
|
|
|
# evaluated by the run tool
|
|
proc binary_name_gdbserver_platform_lib_so { } {
|
|
return "gdbserver_platform-$::env(KERNEL).lib.so"
|
|
}
|
|
|
|
# generic modules
|
|
build_boot_image {
|
|
stdcxx.lib.so libc.lib.so libm.lib.so vfs.lib.so
|
|
pc_uart_drv
|
|
gdb_monitor gdbserver_platform.lib.so
|
|
}
|
|
|
|
#
|
|
# Execute test case
|
|
#
|
|
#
|
|
set local_port 5555
|
|
|
|
# qemu config
|
|
|
|
# connect comport 0 to stdio
|
|
append qemu_args " -serial stdio "
|
|
|
|
# connect comport 1 with TCP port $local_port
|
|
append qemu_args " -serial chardev:uart "
|
|
append qemu_args " -chardev socket,id=uart,port=$local_port,host=localhost,server,nowait,ipv4 "
|
|
|
|
run_genode_until {.*\[init -> gdb_monitor\].*} 30
|
|
|
|
puts "GDB monitor is up, starting GDB in a new terminal"
|
|
|
|
source ${genode_dir}/repos/ports/run/gdb_monitor.inc
|
|
|
|
# GDB loads symbols from 'debug/ld.lib.so'
|
|
if { [have_spec nova] } {
|
|
exec ln -sf ld-nova.lib.so debug/ld.lib.so
|
|
}
|
|
if { [have_spec foc] } {
|
|
exec ln -sf ld-foc.lib.so debug/ld.lib.so
|
|
}
|
|
|
|
set gdb_target_binary "nitpicker"
|
|
|
|
# sequence of GDB commands to execute at startup
|
|
set gdb_cmds ""
|
|
append gdb_cmds "-ex \"target remote localhost:$local_port\" "
|
|
|
|
append gdb_cmds [gdb_initial_breakpoint_cmds $gdb_target_binary]
|
|
|
|
# ask the user for confirmations again
|
|
append gdb_cmds {-ex "set interactive-mode auto" }
|
|
|
|
puts "command: [gdb] debug/ld.lib.so $gdb_cmds"
|
|
|
|
exec [terminal] -e "bash -lc \"[gdb] debug/ld.lib.so $gdb_cmds\"" &
|
|
|
|
interact -i [output_spawn_id]
|
|
|
|
# vi: set ft=tcl :
|