mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-19 13:47:56 +00:00
84ee970e9b
When running the same kernel in a VM as on the host system and the kernel boot message from the VM appears on the log output, the run tool assumes that the host machine has rebooted unexpectedly. With this commit, an unexpected reboot is assumed only if the kernel boot message appears at the beginning of a line. On base-hw, we enforce a line feed at the beginning of the boot message as the SPIKE emulator log starts with the first message of the kernel lacking a line feed. Fixes #2041
104 lines
2.2 KiB
Plaintext
104 lines
2.2 KiB
Plaintext
##
|
|
# Read the location of the NOVA kernel directory from 'etc/nova.conf'
|
|
#
|
|
proc nova_kernel { } {
|
|
global _nova_kernel
|
|
|
|
if {![info exists _nova_kernel]} {
|
|
if {[file exists etc/nova.conf]} {
|
|
set _nova_kernel [exec sed -n "/^NOVA_KERNEL/s/^.*=\\s*//p" etc/nova.conf]
|
|
} else {
|
|
set _nova_kernel "[pwd]/kernel/hypervisor"
|
|
}
|
|
}
|
|
return $_nova_kernel
|
|
}
|
|
|
|
|
|
##
|
|
# Return whether nova is provided from the outside
|
|
#
|
|
proc nova_external { } {
|
|
if {[nova_kernel] == "[pwd]/kernel/hypervisor"} { return 0 }
|
|
return 1
|
|
}
|
|
|
|
|
|
proc run_boot_string { } {
|
|
return "\n\r\fNOVA Microhypervisor"
|
|
}
|
|
|
|
|
|
##
|
|
# Populate directory with binaries on NOVA
|
|
#
|
|
proc run_boot_dir {binaries} {
|
|
|
|
#
|
|
# Collect contents of the ISO image
|
|
#
|
|
copy_and_strip_genode_binaries_to_run_dir $binaries
|
|
|
|
if {![nova_external]} { build { kernel } }
|
|
|
|
puts "using NOVA kernel at [nova_kernel]"
|
|
exec [cross_dev_prefix]objcopy -O elf32-i386 [nova_kernel] [run_dir]/hypervisor
|
|
exec [cross_dev_prefix]strip [run_dir]/hypervisor
|
|
|
|
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"
|
|
puts $fh " module /genode/core"
|
|
puts $fh " module /genode/config"
|
|
foreach binary $binaries {
|
|
if {$binary != "core"} {
|
|
puts $fh " modulenounzip /genode/$binary" } }
|
|
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"
|
|
puts $fh " load /genode/core"
|
|
puts $fh " load /genode/config"
|
|
foreach binary $binaries {
|
|
if {$binary != "core"} {
|
|
puts $fh " load /genode/$binary" } }
|
|
close $fh
|
|
|
|
generate_tftp_config
|
|
}
|
|
|
|
if {[have_include "load/ipxe"]} {
|
|
create_ipxe_iso_config
|
|
update_ipxe_boot_dir
|
|
create_symlink_for_iso
|
|
}
|
|
}
|