# # This run script tests the VirtualBox USB device pass-through feature # by running the 'usb_hid' test in a VM. # # See 'usb_hid.run' for more information about the setup of the 'Pro Micro' USB # device for automated testing. # # Note: the USB device(s) to be passed through must be included in the whitelist. # if { [have_include "power_on/qemu"] || ![have_spec nova] || ![have_spec x86_64]} { puts "Run script is only supported on 64-bit NOVA on real hardware" exit 0 } set build_components { drivers/framebuffer drivers/input drivers/usb server/log_terminal server/fs_rom server/ram_fs server/report_rom app/usb_report_filter virtualbox5 } source ${genode_dir}/repos/base/run/platform_drv.inc # override defaults of platform_drv.inc proc platform_drv_priority {} { return { priority="-1"} } append_platform_drv_build_components build $build_components create_boot_directory import_from_depot [depot_user]/src/[base_src] \ [depot_user]/src/init \ [depot_user]/src/nitpicker set config { } append_platform_drv_config append config { } install_config $config puts "--- executing the 'usb_hid' run script to generate the 'usb_hid.iso' image ---" global specs global repositories exec -ignorestderr \ $::argv0 \ --genode-dir [genode_dir] \ --name usb_hid \ --specs "$specs" \ --repositories "$repositories" \ --cross-dev-prefix "[cross_dev_prefix]" \ --include boot_dir/nova \ --include image/iso \ --include [repository_contains /run/usb_hid.run]/run/usb_hid.run exec ln -sf ${genode_dir}/repos/ports/run/vm_genode_usb_hid.vbox bin/ exec ln -sf ../../usb_hid.iso bin/ set boot_modules { core init timer vesa_fb_drv ps2_drv log_terminal usb_drv usb_report_filter fs_rom ram_fs report_rom virtualbox5-nova usb_hid.iso vm_genode_usb_hid.vbox ld.lib.so libc.lib.so vfs.lib.so libm.lib.so libc_pipe.lib.so libiconv.lib.so stdcxx.lib.so qemu-usb.lib.so } append_platform_drv_boot_modules build_boot_image $boot_modules if { ![get_cmd_switch --autopilot] } { run_genode_until forever } # autopilot test run_genode_until {\[init -\> log_terminal\] \[init -\> test-input\] Input event #0\t} 90 # remove everything before the first interesting line regexp {(\[init -\> log_terminal\] \[init -\> test-input\] Input event #0\t.*)} $output all output run_genode_until {.*\[init -\> test-input\] Input event #11.*\n} 60 [output_spawn_id] unify_output { number [0-9]+} "" unify_output {(?n)on usb-dummy.*$} "" unify_output {(?n)using .*$} "" unify_output {(?n)^.*__wait_event.*$} "" unify_output {(?n)^.*Failed to submit URB.*$} "" unify_output {(?n)^.*dev_warn.*$} "" unify_output {(?n)^.*dangling allocation.*$} "" unify_output {(?n)^.*Warning:.*$} "" unify_output { [0-9][0-9][0-9][0-9]:[0-9][0-9][0-9][0-9] } " " filter_out_color_escape_sequences trim_lines compare_output_to { [init -> log_terminal] [init -> test-input] Input event #0 PRESS KEY_X 0 [init -> log_terminal] [init -> test-input] Input event #1 RELEASE KEY_X [init -> log_terminal] [init -> test-input] Input event #2 PRESS BTN_LEFT 0 [init -> log_terminal] [init -> test-input] Input event #3 REL_MOTION -1+0 [init -> log_terminal] [init -> test-input] Input event #4 REL_MOTION +0+1 [init -> log_terminal] [init -> test-input] Input event #5 RELEASE BTN_LEFT [init -> usb_drv] dev_info: USB disconnect, device [init -> log_terminal] [init -> usb_drv] dev_info: USB disconnect, device [init -> usb_drv] dev_info: new full-speed USB device [init -> virtualbox] Attach USB device (vendor=3eb, product=204d) [init -> log_terminal] [init -> usb_drv] dev_info: new full-speed USB device [init -> log_terminal] [init -> usb_drv] dev_info: D L [init -> log_terminal] [init -> usb_drv] dev_info: input: USB HID v1.11 Keyboard [D L] [init -> log_terminal] [init -> usb_drv] dev_info: D L [init -> log_terminal] [init -> usb_drv] dev_info: input: USB HID v1.11 Mouse [D L] [init -> log_terminal] [init -> test-input] Input event #6 PRESS KEY_X 0 [init -> log_terminal] [init -> test-input] Input event #7 RELEASE KEY_X [init -> log_terminal] [init -> test-input] Input event #8 PRESS BTN_LEFT 0 [init -> log_terminal] [init -> test-input] Input event #9 REL_MOTION -1+0 [init -> log_terminal] [init -> test-input] Input event #10 REL_MOTION +0+1 [init -> log_terminal] [init -> test-input] Input event #11 RELEASE BTN_LEFT }