# # \brief Using Vancouver/Seoul on Genode # \author Norman Feske # \author Markus Partheymueller # \author Alexander Boettcher # \date 2011-11-21 # # Build # if {![have_spec nova]} { puts "\nSeoul is solely supported on NOVA.\n" exit 0 } set build_components { core init drivers/timer drivers/rtc drivers/pci drivers/input app/seoul } if {$use_fancy_stuff} { set use_framebuffer 1 } lappend_if [have_spec acpi] build_components drivers/acpi lappend_if [have_spec pci] build_components drivers/pci/device_pd lappend_if $use_usb build_components drivers/usb lappend_if $use_block_ide build_components drivers/atapi lappend_if $use_block_sata 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 server/nitpicker lappend_if $use_fancy_stuff build_components app/pointer lappend_if $use_fancy_stuff build_components app/status_bar lappend_if $use_fancy_stuff build_components server/liquid_framebuffer lappend_if $use_fancy_stuff build_components app/launchpad lappend_if $use_fancy_stuff build_components server/nitlog lappend_if $use_fancy_stuff build_components server/report_rom lappend_if $use_genode_iso build_components server/iso9660 lappend_if $use_genode_iso build_components server/rom_blk build $build_components # write Seoul config file set vm_cfg_fd [open "bin/vm_seoul.cfg" w] 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} { 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 create_boot_directory # # Generate Genode config # append config { } append_if [expr !$use_usb] config { } append_if $use_block_sata config { } append_if $use_block_ide config { } append_if $use_genode_iso config { } append_if [have_spec acpi] config { } append_if [expr ![have_spec acpi] && [have_spec pci]] config { } append_if $use_nic_session config { } append_if [expr $use_nic_session && $use_nic_bridge] 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_framebuffer config { } append_if $use_genode_iso config { } append config { } } append_if $use_usb 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 { core init pci_drv timer rtc_drv seoul vm_seoul.cfg } lappend_if [have_spec acpi] boot_modules acpi_drv lappend_if [have_spec nova] boot_modules pci_device_pd lappend_if [expr !$use_usb] boot_modules ps2_drv lappend_if $use_usb boot_modules usb_drv lappend_if $use_block_ide boot_modules atapi_drv lappend_if $use_block_sata boot_modules ahci lappend_if $use_nic_session boot_modules nic_drv lappend_if $use_nic_bridge boot_modules nic_bridge lappend_if $use_framebuffer boot_modules fb_drv lappend_if $use_fancy_stuff boot_modules nitpicker lappend_if $use_fancy_stuff boot_modules pointer lappend_if $use_fancy_stuff boot_modules status_bar lappend_if $use_fancy_stuff boot_modules liquid_fb lappend_if $use_fancy_stuff boot_modules launchpad lappend_if $use_fancy_stuff boot_modules nitlog 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 rom_blk lappend_if $use_genode_iso boot_modules iso9660 lappend_if $use_genode_iso boot_modules genode.iso # # 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 " } build_boot_image $boot_modules # A copy of the config is placed in the run folder. exec rm -f bin/vm_seoul.cfg