mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-22 06:57:51 +00:00
76828f25c5
By default, bender will not report any serial findings anymore, if not explicitly asked for with the 'serial' option. Without this option, an invalid ioport is reported, so that neither the kernel nor Genode core will make serial output.
196 lines
5.3 KiB
Plaintext
196 lines
5.3 KiB
Plaintext
proc binary_name_ld_lib_so { } { return "ld-hw.lib.so" }
|
|
proc binary_name_core_a { } { return "core-hw.a" }
|
|
proc binary_name_timer { } { return "hw_timer_drv" }
|
|
|
|
|
|
proc run_boot_string { } { return "\nkernel initialized" }
|
|
|
|
proc boot_output { } { return "serial" }
|
|
|
|
|
|
proc bootstrap_link_address { } {
|
|
|
|
set link_address_file [file join "board" [board] "image_link_address"]
|
|
|
|
set repo [repository_contains $link_address_file]
|
|
|
|
if {$repo == ""} {
|
|
puts stderr "\nError: unknown image link address\n"
|
|
puts stderr " File $link_address_file not present in any repository.\n"
|
|
exit -1
|
|
}
|
|
|
|
set fh [open [file join $repo $link_address_file] "RDONLY"]
|
|
set link_address [lindex [gets $fh] 0]
|
|
close $fh
|
|
|
|
return $link_address
|
|
}
|
|
|
|
|
|
proc core_link_address { } {
|
|
|
|
if {[have_spec "64bit"]} { return "0xffffffc000000000" }
|
|
if {[have_spec "32bit"]} { return "0x80000000" }
|
|
return 0;
|
|
}
|
|
|
|
|
|
##
|
|
# Populate boot directory with binaries on hw
|
|
#
|
|
proc run_boot_dir {binaries} {
|
|
|
|
#
|
|
# Build bootstrap, the core object, and the dynamic linker on demand
|
|
#
|
|
# If those parts were imported from the depot, the build step is skipped.
|
|
#
|
|
set bootstrap_arg ""
|
|
set core_arg ""
|
|
|
|
if {![file exists [run_dir]/genode/core-hw-[board].a]} { set core_arg core/hw }
|
|
if {![file exists [run_dir]/genode/bootstrap-hw-[board].o]} { set bootstrap_arg bootstrap/hw }
|
|
|
|
set build_args "$bootstrap_arg $core_arg"
|
|
if {[llength $build_args]} { build $build_args }
|
|
|
|
if {$core_arg != ""} { copy_file bin/core-hw-[board].a [run_dir]/genode/ }
|
|
if {$bootstrap_arg != ""} { copy_file bin/bootstrap-hw-[board].o [run_dir]/genode/ }
|
|
|
|
#
|
|
# Copy specified modules to the run directory, excluding core.
|
|
#
|
|
set idx [lsearch $binaries "core"]
|
|
set modules [lreplace $binaries $idx $idx]
|
|
copy_genode_binaries_to_run_dir $modules
|
|
|
|
puts "core link address is [core_link_address]"
|
|
|
|
set core_obj core-hw-[board].a
|
|
set bootstrap_obj bootstrap-hw-[board].o
|
|
|
|
# create core and bootstrap binary without modules for debugging
|
|
if {[file exists debug/core-hw-[board].a]} {
|
|
build_core debug/core-hw-[board].a {} [run_dir].core [core_link_address]
|
|
build_core [run_dir]/genode/$bootstrap_obj {} [run_dir].bootstrap [bootstrap_link_address]
|
|
}
|
|
|
|
# determine modules to be incorporated into the core image
|
|
set modules [glob -tails -directory [run_dir]/genode/ *]
|
|
set excluded_modules {}
|
|
lappend excluded_modules $core_obj $bootstrap_obj
|
|
foreach excluded $excluded_modules {
|
|
set modules [lsearch -inline -not -all $modules $excluded] }
|
|
|
|
# check syntax of all boot modules named *.config
|
|
foreach file [glob -nocomplain [run_dir]/genode/*.config] {
|
|
check_xml_syntax $file }
|
|
|
|
# create core binary containing the boot modules
|
|
build_core [run_dir]/genode/$core_obj $modules [run_dir]/genode/core.elf [core_link_address]
|
|
exec [cross_dev_prefix]strip [run_dir]/genode/core.elf
|
|
build_core [run_dir]/genode/$bootstrap_obj { core.elf } [run_dir]/image.elf [bootstrap_link_address]
|
|
|
|
# Save config part of the image.elf for easy inspection
|
|
exec cp -f [run_dir]/genode/config [run_dir].config
|
|
|
|
remove_genode_dir
|
|
exec [cross_dev_prefix]strip [run_dir]/image.elf
|
|
|
|
exec mkdir -p [run_dir]/boot
|
|
exec mv [run_dir]/image.elf [run_dir]/boot/image.elf
|
|
|
|
set options_bender "[boot_output] "
|
|
|
|
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]/boot/image.elf
|
|
|
|
if {[have_include "image/disk"]} {
|
|
install_disk_bootloader_to_run_dir
|
|
}
|
|
|
|
if {[have_include "image/iso"]} {
|
|
install_iso_bootloader_to_run_dir
|
|
}
|
|
|
|
if {[have_include image/uefi]} {
|
|
install_uefi_bootloader_to_run_dir
|
|
append options_bender " serial_fallback"
|
|
}
|
|
|
|
#
|
|
# Generate GRUB2 config file
|
|
#
|
|
set fh [create_header_grub2_config]
|
|
|
|
puts $fh "menuentry 'Genode on base-hw' {"
|
|
puts $fh " insmod multiboot2"
|
|
puts $fh " multiboot2 /boot/bender $options_bender"
|
|
puts $fh " module2 /boot/image.elf.gz image.elf"
|
|
puts $fh "}"
|
|
close $fh
|
|
}
|
|
|
|
run_image
|
|
|
|
# install image.elf file in TFTP directory for PXE boot
|
|
if {[expr [have_spec arm] || [have_spec arm_64]] && [have_include "load/tftp"]} {
|
|
exec {*}[load_tftp_inst_cmd] [pwd]/[run_dir]/boot/image.elf [load_tftp_base_dir][load_tftp_offset_dir]
|
|
|
|
if {[have_include "image/uboot"]} {
|
|
exec {*}[load_tftp_inst_cmd] \
|
|
[file join [pwd] [run_dir] boot uImage] \
|
|
[load_tftp_base_dir][load_tftp_offset_dir]
|
|
}
|
|
|
|
if {[have_include "image/uboot_fit"]} {
|
|
exec {*}[load_tftp_inst_cmd] \
|
|
[file join [pwd] [run_dir] boot image.itb] \
|
|
[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"]
|
|
puts $fh " exec /boot/bender $options_bender"
|
|
puts $fh " load /boot/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"
|
|
|
|
install_pxe_bootloader_to_run_dir
|
|
puts $fh "kernel boot/bender $options_bender"
|
|
puts $fh "module boot/image.elf"
|
|
puts $fh "boot"
|
|
close $fh
|
|
|
|
update_ipxe_boot_dir
|
|
}
|
|
}
|
|
|
|
|
|
##
|
|
# Base source archive within depot
|
|
#
|
|
proc base_src { } { return "base-hw-[board]" }
|