You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.6 KiB
139 lines
3.6 KiB
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 |
|
|
|
set serial_bender_opt "" |
|
|
|
if {[have_include "image/disk"]} { |
|
exec mkdir -p [run_dir]/boot/grub |
|
exec cp [genode_dir]/tool/boot/bender [run_dir]/boot/bender |
|
} |
|
|
|
if {[have_include "image/iso"]} { |
|
install_iso_bootloader_to_run_dir |
|
} |
|
|
|
if {[have_include image/uefi]} { |
|
set grub2_path [get_grub2_dir] |
|
|
|
exec mkdir -p [run_dir]/efi/boot |
|
exec cp $grub2_path/boot/grub2/grub2_32.efi [run_dir]/efi/boot/bootia32.efi |
|
exec cp $grub2_path/boot/grub2/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 |
|
|
|
set serial_bender_opt "serial_fallback" |
|
} |
|
|
|
# |
|
# Generate GRUB2 config file |
|
# |
|
set fh [open "[run_dir]/boot/grub/grub.cfg" "WRONLY CREAT TRUNC"] |
|
puts $fh "set timeout=0" |
|
# tell grub2 to prefer 32bit framebuffer resolution |
|
puts $fh "set gfxpayload=\"0x0x32\"" |
|
puts $fh "menuentry 'Genode on NOVA' {" |
|
puts $fh " insmod multiboot2" |
|
puts $fh " insmod gzio" |
|
puts $fh " multiboot2 /boot/bender $serial_bender_opt" |
|
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 } |
|
|
|
|