mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-01 03:26:45 +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.
186 lines
4.8 KiB
Plaintext
186 lines
4.8 KiB
Plaintext
#
|
|
# Return Bender option that configures Bender's Intel HWP plugin
|
|
#
|
|
# \param --bender-intel-hwp-mode Run the Intel HWP plugin of Bender in the
|
|
# given mode. Valid argument values are
|
|
# "off",
|
|
# "performance",
|
|
# "balanced", and
|
|
# "power_saving"
|
|
# The argument value defaults to
|
|
# "performance".
|
|
#
|
|
proc bender_intel_hwp_mode_option { } {
|
|
|
|
set opt [get_cmd_arg_first --bender-intel-hwp-mode "performance"]
|
|
if {$opt == "off"} {
|
|
return "intel_hwp_off"
|
|
} elseif {$opt == "performance"} {
|
|
return "intel_hwp_performance"
|
|
} elseif {$opt == "balanced"} {
|
|
return "intel_hwp_balanced"
|
|
} elseif {$opt == "power_saving"} {
|
|
return "intel_hwp_power_saving"
|
|
} else {
|
|
return "intel_hwp_performance"
|
|
}
|
|
}
|
|
|
|
proc binary_name_ld_lib_so { } { return "ld-nova.lib.so" }
|
|
proc binary_name_core_a { } { return "core-nova.a" }
|
|
proc binary_name_timer { } { return "nova_timer_drv" }
|
|
|
|
proc kernel_files { } { return hypervisor }
|
|
proc kernel_output { } { return "novga serial" }
|
|
|
|
proc boot_output { } { return "serial" }
|
|
|
|
proc run_boot_string { } {
|
|
return "\nHypervisor NOVA "
|
|
}
|
|
|
|
proc apply_microcode { } { return false }
|
|
|
|
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.a]} { 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 != ""} { copy_file bin/hypervisor [run_dir]/genode/hypervisor }
|
|
if {$core_arg != ""} { copy_file bin/core-nova.a [run_dir]/genode/core-nova.a }
|
|
if {$ld_arg != ""} { copy_file bin/ld-nova.lib.so [run_dir]/genode/ld.lib.so }
|
|
|
|
#
|
|
# Collect contents of the boot image
|
|
#
|
|
build_core_image $binaries
|
|
|
|
exec mkdir -p [run_dir]/boot
|
|
exec [cross_dev_prefix]objcopy -O elf32-i386 [run_dir]/genode/hypervisor [run_dir]/boot/hypervisor
|
|
exec [cross_dev_prefix]strip [run_dir]/boot/hypervisor
|
|
|
|
remove_genode_dir
|
|
|
|
exec mv [run_dir]/image.elf [run_dir]/boot/image.elf
|
|
|
|
#
|
|
# Setup bender options, e.g. serial and applying Intel HWP mode
|
|
#
|
|
set options_bender "[boot_output] [bender_intel_hwp_mode_option]"
|
|
|
|
if {[apply_microcode]} {
|
|
exec cp bin/micro.code [run_dir]/boot/
|
|
append options_bender " microcode"
|
|
}
|
|
|
|
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 NOVA' {"
|
|
puts $fh " insmod multiboot2"
|
|
puts $fh " insmod gzio"
|
|
puts $fh " multiboot2 /boot/bender $options_bender"
|
|
if {[apply_microcode]} {
|
|
puts $fh " module2 /boot/micro.code micro.code"
|
|
}
|
|
puts $fh " module2 /boot/hypervisor hypervisor iommu novpid [kernel_output]"
|
|
puts $fh " module2 /boot/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 $options_bender"
|
|
if {[apply_microcode]} {
|
|
puts $fh " load /boot/micro.code micro.code"
|
|
}
|
|
puts $fh " load /boot/hypervisor iommu novpid [kernel_output]"
|
|
puts $fh " load /boot/image.elf"
|
|
close $fh
|
|
|
|
generate_tftp_config
|
|
}
|
|
|
|
if {[have_include "load/ipxe"]} {
|
|
create_ipxe_config
|
|
update_ipxe_boot_dir
|
|
create_symlink_for_iso
|
|
}
|
|
}
|
|
|
|
|
|
##
|
|
# Base source archive within depot
|
|
#
|
|
proc base_src { } {
|
|
|
|
if {[have_spec x86]} { return base-nova }
|
|
|
|
global specs
|
|
|
|
puts stderr "Test requires base-nova kernel archive, which is missing for this build configuration"
|
|
puts stderr " SPECS=\"$specs\""
|
|
exit 0
|
|
}
|