# # \brief Environment for executing Genode on Linux # \author Norman Feske # \date 2010-08-16 # # For the documentation of the implemented API functions, # please refer to the comments in 'tool/run'. # proc create_boot_directory { } { exec rm -rf [run_dir] exec mkdir -p [run_dir] } proc install_config {config} { set fh [open "[run_dir]/config" "WRONLY CREAT TRUNC"] puts $fh $config close $fh check_xml_syntax [run_dir]/config } proc build_boot_image {binaries} { foreach binary $binaries { exec ln -sf ../../../bin/$binary [run_dir] } } proc run_genode_until {{wait_for_re forever} {timeout_value 0} {running_spawn_id -1}} { # # If a running_spawn_id is specified, wait for the expected output # if {$running_spawn_id != -1} { wait_for_output $wait_for_re $timeout_value $running_spawn_id return } global spawn_id set orig_pwd [pwd] cd [run_dir] spawn ./core wait_for_output $wait_for_re $timeout_value $spawn_id cd $orig_pwd } ## # Umount a directory that was bind-mounted beforehand # # This function is used by chroot-related tests, e.g., 'os/run/chroot.run', # 'os/run/chroot_loader.run'. # proc umount_and_rmdir { path } { puts "umounting $path" # # Invoke umount until it returns an error. Apparently, the unmounting # of bind-mounted mount points does not always take immediate effect # (regardless of the -l option). # while {1} { if {[catch { exec sudo umount -l $path }]} { break; } sleep 0.25 } catch { exec rmdir -p $path } }