proc binary_name_ld_lib_so { } { return "ld-nova.lib.so" } proc binary_name_core_o { } { return "core-nova.o" } proc binary_name_timer { } { return "nova_timer_drv" } ## # 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/nova/hypervisor" } } return $_nova_kernel } ## # Return whether nova is provided from the outside # proc nova_external { } { if {[nova_kernel] == "[pwd]/kernel/nova/hypervisor"} { return 0 } return 1 } proc run_boot_string { } { return "\n\r\fNOVA Microhypervisor" } proc core_link_address { } { return "0x100000" } proc core_ld_opts { } { set ret { -Wl,-T } lappend ret "-Wl,[genode_dir]/repos/base/src/ld/genode.ld" lappend ret "-Wl,[genode_dir]/repos/base-nova/src/core/core-bss.ld" return $ret } ## # Populate directory with binaries on NOVA # proc run_boot_dir {binaries} { if {![nova_external]} { build { lib/ld/nova kernel } } else { build { lib/ld/nova } } # # Collect contents of the ISO image # build_core_image $binaries puts "using NOVA kernel at [nova_kernel]" exec [cross_dev_prefix]objcopy -O elf32-i386 [nova_kernel] [run_dir]/hypervisor exec [cross_dev_prefix]strip [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 novga" puts $fh " module /image.elf" 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 novga" puts $fh " load /image.elf" close $fh generate_tftp_config } if {[have_include "load/ipxe"]} { create_ipxe_iso_config update_ipxe_boot_dir create_symlink_for_iso } }