#
# \brief Using Seoul on Genode
# \author Norman Feske
# \author Markus Partheymueller
# \author Alexander Boettcher
# \date 2011-11-21
set use_fs_rump $use_block_vdi
set use_drv_ahci [expr $use_block_vdi || $use_block_sata]
set use_vfs_block [expr $use_block_ram || $use_genode_iso]
create_boot_directory
import_from_depot [depot_user]/src/[base_src] \
[depot_user]/src/init \
[depot_user]/src/nitpicker
if {$use_fs_rump} {
import_from_depot [depot_user]/src/vfs \
[depot_user]/src/rump
}
if {$use_part_block} {
import_from_depot [depot_user]/src/part_block
}
#
# Build
#
assert_spec x86
set map_small "no"
set vmm_vcpu_same_cpu "no"
if {[have_spec sel4]} {
set map_small "yes"
set vmm_vcpu_same_cpu "yes"
# seL4 has no AMD SVM support
if {[have_include "power_on/qemu"]} {
puts "\n Run script is not supported on this platform. \n";
exit 0
}
}
if {[have_spec foc]} {
# The performance is considerable bad when
# vmm and vcpu is not on same physical CPU
set vmm_vcpu_same_cpu "yes"
# Qemu SVM has no EPT support
if {[have_include "power_on/qemu"]} {
puts "\n Run script is not supported on this platform. \n";
exit 0
}
}
source ${genode_dir}/repos/base/run/platform_drv.inc
# override defaults of platform_drv.inc
proc platform_drv_priority {} { return { priority="-1"} }
set build_components {
drivers/rtc
drivers/ps2
app/seoul
}
if {$use_fancy_stuff} { set use_framebuffer 1 }
lappend_if $use_block_vdi build_components server/vdi_block
lappend_if $use_usb build_components drivers/usb
lappend_if $use_vfs_block build_components server/vfs_block
lappend_if $use_drv_ahci build_components drivers/ahci
lappend_if $use_nic_session build_components drivers/nic
lappend_if $use_nic_bridge build_components server/nic_bridge
lappend_if $use_framebuffer build_components drivers/framebuffer
lappend_if $use_fancy_stuff build_components app/status_bar
lappend_if $use_fancy_stuff build_components app/launchpad
lappend_if $use_fancy_stuff build_components server/report_rom
lappend_if $use_genode_iso build_components server/iso9660
lappend_if $use_top build_components app/top
append_platform_drv_build_components
build $build_components
# write Seoul config file
set vm_cfg_fd [open "bin/vm_seoul.cfg" w]
puts $vm_cfg_fd ""
puts $vm_cfg_fd {
}
if {!$use_multiboot} {
puts $vm_cfg_fd {
}
}
puts $vm_cfg_fd {
}
if {$use_multiboot} {
if {[info exists use_multiboot_modaddr]} {
puts $vm_cfg_fd " "
} else {
puts $vm_cfg_fd { }
}
}
puts $vm_cfg_fd {
}
for {set i 0} {$i < $vcpus_to_be_used} {incr i 1} {
puts $vm_cfg_fd {
}
}
if {!$use_multiboot} {
if {$use_model_ahci} {
puts $vm_cfg_fd {
}
}
if {$use_model_ide} {
puts $vm_cfg_fd {
}
}
}
if {$use_nic_session} {
puts $vm_cfg_fd {
}
}
puts $vm_cfg_fd {
}
if {$use_multiboot} {
puts $vm_cfg_fd $multiboot_files
}
puts $vm_cfg_fd {
}
close $vm_cfg_fd
#
# Generate Genode config
#
set config {
}
append_if $use_top config {
}
append config {
}
append_if [expr !$use_usb] config {
}
append_if $use_drv_ahci config {
}
append_if [expr $use_block_sata && !$use_part_block] config {
}
append_if [expr $use_block_vdi && !$use_part_block] config {
}
append_if [expr $use_block_vdi && $use_part_block] config {
}
append_if [expr $use_block_sata && $use_part_block] config {
}
append_if $use_drv_ahci config {
}
append_if $use_part_block config {
}
append_if $use_block_ram config {
}
append_if $use_fs_rump config {
}
append_if [expr $use_fs_rump && $use_part_block] config {
}
append_if [expr $use_fs_rump && !$use_part_block] config {
}
append_if $use_fs_rump config {
}
append_if $use_block_vdi config {
}
append_if $use_genode_iso config {
}
append_platform_drv_config
append_if $use_nic_session config {
}
append_if [expr $use_nic_session && $use_nic_bridge] config {
}
append_if $use_framebuffer config {
}
append_if [expr $use_framebuffer && [have_include "power_on/qemu"]] config {
}
append_if [expr $use_framebuffer && ![have_include "power_on/qemu"]] config {
}
append_if $use_framebuffer config {
}
if {!$use_fancy_stuff} {
append config {
}
append config "
"
append config {
}
append_if [expr $use_nic_session && $use_nic_bridge] config {
}
append_if [expr $use_nic_session && !$use_nic_bridge] config {
}
append_if $use_genode_iso config {
}
append_if $use_block_vdi config {
}
append_if [expr $use_block_sata && $use_part_block] config {
}
append config {
}
}
append_if $use_usb config {
}
append config {
}
append_if $use_top config {
}
append_if $use_fancy_stuff config {
}
append config {
}
#
# Generate Launchpad config file
#
if {$use_fancy_stuff} {
set launchpad_cfg_fd [open "bin/launchpad-config" w]
puts $launchpad_cfg_fd "
"
puts $launchpad_cfg_fd {
}
puts $launchpad_cfg_fd {}
close $launchpad_cfg_fd
}
install_config $config
#
# Boot modules
#
# generic modules
set boot_modules {
rtc_drv
seoul
vm_seoul.cfg
}
lappend_if $use_block_vdi boot_modules vdi_block
lappend_if [expr !$use_usb] boot_modules ps2_drv
lappend_if $use_usb boot_modules usb_drv
lappend_if $use_vfs_block boot_modules vfs_block
lappend_if $use_vfs_block boot_modules vfs.lib.so
lappend_if $use_drv_ahci boot_modules ahci_drv
lappend_if $use_nic_session boot_modules ipxe_nic_drv
lappend_if $use_nic_bridge boot_modules nic_bridge
lappend_if $use_framebuffer boot_modules vesa_fb_drv
lappend_if $use_fancy_stuff boot_modules status_bar
lappend_if $use_fancy_stuff boot_modules launchpad
lappend_if $use_fancy_stuff boot_modules launchpad-config
lappend_if $use_fancy_stuff boot_modules report_rom
lappend_if $use_genode_iso boot_modules iso9660
lappend_if $use_genode_iso boot_modules genode.iso
lappend_if $use_block_ram boot_modules seoul-disc.raw
lappend_if $use_top boot_modules top
#
# Add OS binaries of guest
#
if {$use_multiboot} {
set guest_os_binary_missing 0
set binary_counter 0
foreach binary $guest_os_binaries {
if {![file exists bin/$binary]} {
puts stderr "Error: guest OS binary \"bin/$binary\" does not exist"
set guest_os_binary_missing 1
}
if {[info exists sha1_os_binaries]} {
set sha1 [exec sha1sum bin/$binary]
set sha1 [regexp -inline {[0-9a-h]+} $sha1]
if {[string compare $sha1 [lindex $sha1_os_binaries $binary_counter]]} {
puts "SHA1 sum of binary does not match with expected one - abort"
puts "$binary $sha1 != [lindex $sha1_os_binaries $binary_counter]"
set guest_os_binary_missing 1
}
}
incr binary_counter 1
}
if {$guest_os_binary_missing} { exit 1 }
append boot_modules $guest_os_binaries
}
if {$use_usb} {
append qemu_args " -usb -usbdevice mouse -usbdevice keyboard "
}
append_platform_drv_boot_modules
build_boot_image $boot_modules
# A copy of the config is placed in the run folder.
exec rm -f bin/vm_seoul.cfg