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" } proc kernel_files { } { return hypervisor } 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} { # # Build kernel-specific targets if needed # # If the run scripts imports the base-nova binary archive, [run_dir] is # already populated, so we can skip the build. # set kernel_arg "" set core_arg "" set ld_arg "" if {![file exists [run_dir]/genode/hypervisor]} { set kernel_arg kernel } if {![file exists [run_dir]/genode/core-nova.o]} { set core_arg core/nova } if {![file exists [run_dir]/genode/ld.lib.so]} { set ld_arg lib/ld/nova } set targets "$kernel_arg $core_arg $ld_arg" if {[llength $targets]} { build $targets } if {$kernel_arg != ""} { file copy -force bin/hypervisor [run_dir]/genode/hypervisor } if {$core_arg != ""} { file copy -force bin/core-nova.o [run_dir]/genode/core-nova.o } if {$ld_arg != ""} { file copy -force bin/ld-nova.lib.so [run_dir]/genode/ld.lib.so } # # Collect contents of the ISO image # build_core_image $binaries exec [cross_dev_prefix]objcopy -O elf32-i386 [run_dir]/genode/hypervisor [run_dir]/hypervisor exec [cross_dev_prefix]strip [run_dir]/hypervisor exec rm -rf [run_dir]/genode if {[have_include "image/iso"] || [have_include "image/disk"] || [have_include image/uefi]} { # # Compress Genode image, to be uncompressed by GRUB # exec gzip [run_dir]/image.elf 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.gz" close $fh } if {[have_include image/uefi]} { exec mkdir -p [run_dir]/efi/boot exec cp [genode_dir]/tool/boot/grub2_32.efi [run_dir]/efi/boot/bootia32.efi exec cp [genode_dir]/tool/boot/grub2_64.efi [run_dir]/efi/boot/bootx64.efi exec mkdir -p [run_dir]/boot/grub exec cp [genode_dir]/tool/boot/bender [run_dir]/boot/bender } # # Generate GRUB2 config file # set fh [open "[run_dir]/boot/grub/grub.cfg" "WRONLY CREAT TRUNC"] puts $fh "set timeout=0" puts $fh "menuentry 'Genode on NOVA' {" puts $fh " multiboot2 /boot/bender serial_fallback" puts $fh " module2 /hypervisor hypervisor iommu serial novpid novga" puts $fh " module2 /image.elf.gz image.elf" puts $fh "}" 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 } } ## # Base source archive within depot # proc base_src { } { return base-nova }