mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-18 21:27:56 +00:00
Test d3m's auto-probing of the boot device
This commit is contained in:
parent
d880386091
commit
227bab4aa6
149
gems/run/d3m_boot.run
Normal file
149
gems/run/d3m_boot.run
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
#
|
||||||
|
# \brief Boot test for the demo device driver manager
|
||||||
|
# \author Norman Feske
|
||||||
|
# \date 2012-01-17
|
||||||
|
#
|
||||||
|
# This test exercises the auto-probing of the boot medium performed by d3m.
|
||||||
|
# D3m support booting from both CD-ROM and USB storage. Both options are
|
||||||
|
# tested via different qemu arguments.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Sanity checks
|
||||||
|
#
|
||||||
|
# The test does only work for platforms that use qemu to boot. Because the test
|
||||||
|
# uses x86-specific drivers, it won't execute on other architectures.
|
||||||
|
#
|
||||||
|
if {[have_spec linux]} { puts "Does not run on Linux"; exit 0 }
|
||||||
|
if {![have_spec x86_32]} { puts "Runs only on x86_32"; exit 0 }
|
||||||
|
|
||||||
|
#
|
||||||
|
# Build
|
||||||
|
#
|
||||||
|
build {
|
||||||
|
core
|
||||||
|
init
|
||||||
|
drivers/timer
|
||||||
|
drivers/pci
|
||||||
|
drivers/framebuffer/vesa
|
||||||
|
drivers/input/ps2
|
||||||
|
drivers/atapi
|
||||||
|
drivers/nic
|
||||||
|
drivers/usb
|
||||||
|
server/d3m
|
||||||
|
server/iso9660
|
||||||
|
}
|
||||||
|
|
||||||
|
create_boot_directory
|
||||||
|
|
||||||
|
#
|
||||||
|
# Config
|
||||||
|
#
|
||||||
|
set config {
|
||||||
|
<config verbose="yes">
|
||||||
|
<parent-provides>
|
||||||
|
<service name="ROM"/>
|
||||||
|
<service name="RAM"/>
|
||||||
|
<service name="IRQ"/>
|
||||||
|
<service name="IO_MEM"/>
|
||||||
|
<service name="IO_PORT"/>
|
||||||
|
<service name="CAP"/>
|
||||||
|
<service name="PD"/>
|
||||||
|
<service name="RM"/>
|
||||||
|
<service name="CPU"/>
|
||||||
|
<service name="LOG"/>
|
||||||
|
<service name="SIGNAL"/>
|
||||||
|
</parent-provides>
|
||||||
|
<default-route>
|
||||||
|
<any-service> <any-child/> <parent/> </any-service>
|
||||||
|
</default-route>
|
||||||
|
<start name="pci_drv">
|
||||||
|
<resource name="RAM" quantum="1M"/>
|
||||||
|
<provides><service name="PCI"/></provides>
|
||||||
|
</start>
|
||||||
|
<start name="timer">
|
||||||
|
<resource name="RAM" quantum="1M"/>
|
||||||
|
<provides><service name="Timer"/></provides>
|
||||||
|
</start>
|
||||||
|
<start name="d3m">
|
||||||
|
<resource name="RAM" quantum="16M"/>
|
||||||
|
<provides>
|
||||||
|
<service name="Input"/>
|
||||||
|
<service name="Nic"/>
|
||||||
|
<service name="Block"/>
|
||||||
|
</provides>
|
||||||
|
<route>
|
||||||
|
<service name="ROM"> <parent/> </service>
|
||||||
|
<any-service> <any-child/> <parent/> </any-service>
|
||||||
|
</route>
|
||||||
|
</start>
|
||||||
|
<start name="iso9660">
|
||||||
|
<resource name="RAM" quantum="8M"/>
|
||||||
|
<provides><service name="ROM"/></provides>
|
||||||
|
</start>
|
||||||
|
</config>
|
||||||
|
}
|
||||||
|
|
||||||
|
install_config $config
|
||||||
|
|
||||||
|
# create magic tag file on iso image, which marks the boot medium
|
||||||
|
exec touch [run_dir]/libc.lib.so
|
||||||
|
|
||||||
|
#
|
||||||
|
# Boot modules
|
||||||
|
#
|
||||||
|
build_boot_image {
|
||||||
|
core init
|
||||||
|
pci_drv vesa_drv ps2_drv atapi_drv timer nic_drv usb_drv
|
||||||
|
d3m iso9660 }
|
||||||
|
|
||||||
|
#
|
||||||
|
# Customized variant of spawn_qemu function, which lets us define all qemu
|
||||||
|
# arguments via the 'qemu_args' variable.
|
||||||
|
#
|
||||||
|
proc spawn_qemu { wait_for_re timeout_value } {
|
||||||
|
global output
|
||||||
|
global qemu_args
|
||||||
|
global qemu
|
||||||
|
global spawn_id
|
||||||
|
set qemu "qemu"
|
||||||
|
|
||||||
|
set timeout $timeout_value
|
||||||
|
set pid [eval "spawn $qemu $qemu_args"]
|
||||||
|
if {$wait_for_re == "forever"} { interact $pid }
|
||||||
|
expect {
|
||||||
|
-re $wait_for_re { }
|
||||||
|
timeout { puts stderr "Error: Test execution timed out"; exit -2 }
|
||||||
|
}
|
||||||
|
set output $expect_out(buffer)
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Inherit qemu arguments specified at the build configuration
|
||||||
|
#
|
||||||
|
set common_qemu_args "$qemu_args -serial mon:stdio -nographic -m 512 "
|
||||||
|
|
||||||
|
#
|
||||||
|
# First, try to use the ISO image as CD-ROM. We expect the ATAPI driver to
|
||||||
|
# detect the boot image.
|
||||||
|
#
|
||||||
|
set qemu_args "$common_qemu_args -cdrom [run_dir].iso"
|
||||||
|
run_genode_until {.*"iso9660" announces service "ROM".*\n} 30
|
||||||
|
close $spawn_id
|
||||||
|
|
||||||
|
puts "\nBooting from CD-ROM succeeded\n"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Second, try to use the ISO image as USB stick. We expect the USB driver to
|
||||||
|
# detect the boot image.
|
||||||
|
#
|
||||||
|
# The timeout is a bit larger because using isolinux takes a while.
|
||||||
|
#
|
||||||
|
set qemu_args "$common_qemu_args -usbdevice disk::[run_dir].iso"
|
||||||
|
run_genode_until {.*"iso9660" announces service "ROM".*\n} 60
|
||||||
|
close $spawn_id
|
||||||
|
|
||||||
|
puts "\nBooting from USB storage device succeeded\n"
|
||||||
|
|
||||||
|
puts "Test succeeded"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user