mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-23 15:32:25 +00:00
bf62d6b896
Since the timer and timeout handling is part of the base library (the dynamic linker), it belongs to the base repository. Besides moving the timer and its related infrastructure (alarm, timeout libs, tests) to the base repository, this patch also moves the timer from the 'drivers' subdirectory directly to 'src' and disamibuates the timer's build locations for the various kernels. Otherwise the different timer implementations could interfere with each other when using one build directory with multiple kernels. Note that this patch changes the include paths for the former os/timer, os/alarm.h, os/duration.h, and os/timed_semaphore.h to base/. Issue #3101
71 lines
1.9 KiB
Plaintext
71 lines
1.9 KiB
Plaintext
# build program images
|
|
build { core init timer test/timer_accuracy }
|
|
|
|
# create directory where boot files are written to
|
|
create_boot_directory
|
|
|
|
# define XML configuration for init
|
|
install_config {
|
|
<config prio_levels="2">
|
|
<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" priority="0">
|
|
<resource name="RAM" quantum="1M"/>
|
|
<resource name="CPU" quantum="5"/>
|
|
<provides><service name="Timer"/></provides>
|
|
</start>
|
|
<start name="test-timer_accuracy" priority="-1">
|
|
<resource name="RAM" quantum="10M"/>
|
|
</start>
|
|
</config>
|
|
}
|
|
# build boot files from source binaries
|
|
build_boot_image { core ld.lib.so init timer test-timer_accuracy }
|
|
|
|
# configure Qemu
|
|
append qemu_args " -nographic"
|
|
|
|
set err_cnt 0
|
|
set test_timeout 20
|
|
set rounds 9
|
|
|
|
# wait for initial tic
|
|
run_genode_until {\[init -> test-timer_accuracy\].*\n} $test_timeout
|
|
set serial_id [output_spawn_id]
|
|
|
|
# measure the delays between the following tics
|
|
for {set i 1} {$i <= $rounds} {incr i} {
|
|
set start_time($i) [clock milliseconds]
|
|
run_genode_until {\[init -> test-timer_accuracy\].*\n} $test_timeout $serial_id
|
|
set end_time($i) [clock milliseconds]
|
|
}
|
|
# print results and count errors
|
|
foreach i [lsort [array names start_time]] {
|
|
set class "Good:"
|
|
set test_result [expr $end_time($i) - $start_time($i)]
|
|
set host_result [expr $i * 1000]
|
|
set result_diff [expr abs($test_result - $host_result)]
|
|
if {[expr $result_diff > 500]} {
|
|
set class "Bad: "
|
|
set err_cnt [expr $err_cnt + 1]
|
|
}
|
|
puts "$class round $i, host measured $host_result ms, test measured $test_result ms"
|
|
}
|
|
# check the error count
|
|
if {[expr $err_cnt > 0]} {
|
|
puts "Test failed because of $err_cnt errors"
|
|
exit -1
|
|
}
|