## # Read the location of the NOVA kernel directory from 'etc/nova.conf' # proc nova_kernel { } { global _nova_kernel if {![info exists _nova_kernel]} { if {[file exists etc/nova.conf]} { set _nova_kernel [exec sed -n "/^NOVA_KERNEL/s/^.*=\\s*//p" etc/nova.conf] } else { set _nova_kernel "[pwd]/kernel/hypervisor" } } return $_nova_kernel } ## # Return whether nova is provided from the outside # proc nova_external { } { if {[nova_kernel] == "[pwd]/kernel/hypervisor"} { return 0 } return 1 } proc run_boot_string { } { return "NOVA Microhypervisor" } ## # Populate directory with binaries on NOVA # proc run_boot_dir {binaries} { # # Collect contents of the ISO image # copy_and_strip_genode_binaries_to_run_dir $binaries if {![nova_external]} { build { kernel } } puts "using NOVA kernel at [nova_kernel]" exec [cross_dev_prefix]objcopy -O elf32-i386 [nova_kernel] [run_dir]/hypervisor if {[have_include "image/iso"] || [have_include "image/disk"]} { # # Install isolinux/GRUB files and bender # install_iso_bootloader_to_run_dir # # Generate GRUB config file # set fh [open "[run_dir]/boot/grub/menu.lst" "WRONLY CREAT TRUNC"] puts $fh "timeout 0" puts $fh "default 0" puts $fh "\ntitle Genode on NOVA" puts $fh " kernel /boot/bender" puts $fh " module /hypervisor iommu serial novpid" puts $fh " module /genode/core" puts $fh " module /genode/config" foreach binary $binaries { if {$binary != "core"} { puts $fh " module /genode/$binary" } } close $fh } # # Build image # run_image if {[have_include "load/tftp"]} { # # Install PXE bootloader pulsar # install_pxe_bootloader_to_run_dir # # Generate pulsar config file # set fh [open "[run_dir]/config-52-54-00-12-34-56" "WRONLY CREAT TRUNC"] puts $fh " exec /boot/bender" puts $fh " load /hypervisor iommu serial novpid" puts $fh " load /genode/core" puts $fh " load /genode/config" foreach binary $binaries { if {$binary != "core"} { puts $fh " load /genode/$binary" } } close $fh generate_tftp_config } }