set use_qemu [have_include "power_on/qemu"] # # Build # set build_components { core init drivers/timer drivers/usb_host drivers/usb_block server/report_rom test/blk/cli test/blk/bench } proc gpio_drv { } { if {[have_spec rpi] && [have_spec hw]} { return hw_gpio_drv } if {[have_spec rpi] && [have_spec foc]} { return foc_gpio_drv } return gpio_drv } lappend_if [have_spec gpio] build_components drivers/gpio source ${genode_dir}/repos/base/run/platform_drv.inc append_platform_drv_build_components build $build_components create_boot_directory # # Generate config # set 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"/>} append_platform_drv_config append_if [have_spec gpio] config " <start name=\"[gpio_drv]\"> <resource name=\"RAM\" quantum=\"4M\"/> <provides><service name=\"Gpio\"/></provides> <config/> </start>" append config { <start name="timer"> <resource name="RAM" quantum="1M"/> <provides> <service name="Timer"/> </provides> </start> <start name="report_rom"> <resource name="RAM" quantum="1M"/> <provides> <service name="Report"/> <service name="ROM"/> </provides> <config verbose="yes"> <default-policy report="usb_drv -> devices"/> </config> </start> <start name="usb_drv" caps="120"> } append config "<binary name=\"[usb_host_drv_binary]\"/>" append config { <resource name="RAM" quantum="10M"/> <provides> <service name="Usb"/> </provides> <config> <report devices="no"/>} append_if [expr !$use_qemu] config { <!-- The order is important because only the first policy is picked up - an entry may be moved to the front to test the corresponding device. --> <!-- zte open c needs interface="3" --> <default-policy vendor_id="0x19d2" product_id="0x1350"/> <!-- kingston --> <default-policy vendor_id="0x0951" product_id="0x1666"/> <!-- voyager gt stick --> <default-policy vendor_id="0x1b1c" product_id="0x1a09"/> <!-- usb3 hdd adapter --> <default-policy vendor_id="0x174c" product_id="0x5106"/> <!-- lenovo disc --> <default-policy vendor_id="0x0984" product_id="0x0066"/> } append_if $use_qemu config { <default-policy bus="0x001" dev="0x002"/> } append config { </config> <route> <service name="Report"> <child name="report_rom"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start> <start name="usb_block_drv"> <resource name="RAM" quantum="4M"/> <provides> <service name="Block"/> </provides> <config report="yes"/> <route> <service name="Usb"> <child name="usb_drv"/> </service> <service name="Report"> <child name="report_rom"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start> <start name="test-usb"> <resource name="RAM" quantum="128M"/> <binary name="test-blk-bench"/> <!--binary name="test-blk-cli"/--> <config> <libc stdout="/dev/log"> <vfs> <dir name="dev"> <log/> </dir> </vfs> </libc> </config> <route> <service name="Block"> <child name="usb_block_drv"/> </service> <any-service> <parent/> <any-child/> </any-service> </route> </start> </config>} install_config $config # # Boot modules # # generic modules set boot_modules { core init timer report_rom usb_block_drv test-blk-cli test-blk-bench ld.lib.so } append boot_modules [usb_host_drv_binary] lappend_if [have_spec gpio] boot_modules [gpio_drv] append_platform_drv_boot_modules build_boot_image $boot_modules # # Execute test case # set disk_image "bin/test.img" set cmd "dd if=/dev/zero of=$disk_image bs=1M count=16" if {$use_qemu} { puts "creating disk image:\n$cmd" catch { exec sh -c $cmd } } # # Qemu opts for EHCI # append qemu_args " -nographic -M pc -boot order=d " append qemu_args " -drive if=none,id=disk,file=$disk_image,format=raw " append qemu_args " -device usb-ehci,id=ehci -device usb-storage,bus=ehci.0,drive=disk " run_genode_until {.*child "test-usb" exited with exit value 0.*} 100