mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-27 09:12:32 +00:00
8e9e866161
Introduce 'framebuffer' SPEC variable to distinguish hardware framebuffer drivers furthermore from the SDL framebuffer driver used by Genode/Linux.
150 lines
3.4 KiB
Plaintext
150 lines
3.4 KiB
Plaintext
#
|
|
# \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="26M"/>
|
|
<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 fb_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-system-i386"
|
|
|
|
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"
|
|
|