# # 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/ps2 drivers/usb server/log_terminal server/fs_rom server/vfs lib/vfs/import 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 \ [depot_user]/src/vfs_pipe 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" \ --board "$board_var" \ --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 vfs vfs.lib.so vfs_import.lib.so report_rom virtualbox5-nova usb_hid.iso vm_genode_usb_hid.vbox ld.lib.so libc.lib.so libm.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 -\> event_dump\] Input event #0\t} 90 # remove everything before the first interesting line regexp {(\[init -\> log_terminal\] \[init -\> event_dump\] Input event #0\t.*)} $output all output run_genode_until {.*\[init -\> event_dump\] 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 -> event_dump] Input event #0 PRESS KEY_X 65534 key count: 1 [init -> log_terminal] [init -> event_dump] Input event #1 RELEASE KEY_X key count: 0 [init -> log_terminal] [init -> event_dump] Input event #2 PRESS BTN_LEFT 65534 key count: 1 [init -> log_terminal] [init -> event_dump] Input event #3 REL_MOTION -1+0 key count: 1 [init -> log_terminal] [init -> event_dump] Input event #4 REL_MOTION +0+1 key count: 1 [init -> log_terminal] [init -> event_dump] Input event #5 RELEASE BTN_LEFT key count: 0 [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 -> event_dump] Input event #6 PRESS KEY_X 65534 key count: 1 [init -> log_terminal] [init -> event_dump] Input event #7 RELEASE KEY_X key count: 0 [init -> log_terminal] [init -> event_dump] Input event #8 PRESS BTN_LEFT 65534 key count: 1 [init -> log_terminal] [init -> event_dump] Input event #9 REL_MOTION -1+0 key count: 1 [init -> log_terminal] [init -> event_dump] Input event #10 REL_MOTION +0+1 key count: 1 [init -> log_terminal] [init -> event_dump] Input event #11 RELEASE BTN_LEFT key count: 0 }