proc binary_name_ld_lib_so { } { return "ld-hw.lib.so" } proc binary_name_core_o { } { return "hw/core.o" } proc binary_name_timer { } { return "hw_timer_drv" } proc run_boot_string { } { return "\nkernel initialized" } proc bootstrap_link_address { } { if {[have_spec "odroid_xu"]} { return "0x80000000" } if {[have_spec "pbxa9"]} { return "0x70000000" } if {[have_spec "usb_armory"]} { return "0x72000000" } if {[have_spec "x86_64"]} { return "0x00200000" } if {[have_spec "wand_quad"]} { return "0x10001000" } if {[have_spec "imx53_qsb"]} { return "0x70010000" } if {[have_spec "arndale"]} { return "0x80000000" } if {[have_spec "panda"]} { return "0x81000000" } if {[have_spec "zynq"]} { return "0x00100000" } if {[have_spec "riscv"]} { return "0x00000200" } if {[have_spec "rpi"]} { return "0x00800000" } puts "unknown platform no linker address known" exit -1 } proc core_link_address { } { if {[have_spec "riscv"]} { return "0x1000000" } scan [bootstrap_link_address] 0x%x link_address return [format 0x%08x [expr {$link_address + 0x10000000}]] } ## # Populate boot directory with binaries on hw # proc run_boot_dir {binaries} { # generate static ACPI report for platform driver on Muen if {[have_spec "muen"]} { set fh [open "bin/acpi" "WRONLY CREAT TRUNC"] puts $fh "" close $fh } build { lib/ld/hw bootstrap } # boot module list without core set idx [lsearch $binaries "core"] set modules [lreplace $binaries $idx $idx] # strip binaries copy_and_strip_genode_binaries_to_run_dir $modules lappend modules "config" puts "core link address is [core_link_address]" set core_obj core/hw/core.o set bootstrap_obj bootstrap/hw/bootstrap.o # create core and bootstrap binary without modules for debugging build_core $core_obj {} [run_dir].core [core_link_address] build_core $bootstrap_obj {} [run_dir].bootstrap [bootstrap_link_address] # create core binary containing the boot modules build_core $core_obj $modules [run_dir]/genode/core.elf [core_link_address] exec [cross_dev_prefix]strip [run_dir]/genode/core.elf build_core $bootstrap_obj { core.elf } [run_dir]/image.elf [bootstrap_link_address] exec rm -f [run_dir]/genode/core.elf exec [cross_dev_prefix]strip [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" if {[have_spec "muen"]} { puts $fh "\ntitle Genode on base-hw/Muen SK" puts $fh " kernel /image.bin" } else { puts $fh "\ntitle Genode on base-hw" puts $fh " kernel /boot/bender" puts $fh " module /image.elf" } close $fh } run_image [run_dir]/image.elf # set symbolic link to image.elf file in TFTP directory for PXE boot if {[have_spec arm] && [have_include "load/tftp"]} { exec ln -sf [run_dir]/image.elf [load_tftp_base_dir][load_tftp_offset_dir] if {[have_include "image/uboot"]} { exec ln -sf [pwd]/[run_dir]/uImage [load_tftp_base_dir][load_tftp_offset_dir] } } if {[have_spec x86] && [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"] if {[have_spec "muen"]} { exec gzip [run_dir]/image.bin puts $fh " exec /boot/unzip" puts $fh " load /image.bin.gz" } else { puts $fh " exec /boot/bender" puts $fh " load /image.elf" } close $fh generate_tftp_config } if {[have_spec x86] && [have_include "load/ipxe"]} { # # Generate iPXE config file # set fh [open "[run_dir]/boot.cfg" "WRONLY CREAT TRUNC"] puts $fh "#!ipxe" if {[have_spec "muen"]} { puts $fh "kernel image.bin" } else { install_pxe_bootloader_to_run_dir puts $fh "kernel boot/bender" puts $fh "module image.elf" } puts $fh "boot" close $fh update_ipxe_boot_dir } }