From 76828f25c5e7a14f4be7be6c62abe72bffd6ca3d Mon Sep 17 00:00:00 2001 From: Alexander Boettcher <alexander.boettcher@genode-labs.com> Date: Tue, 7 Feb 2023 21:36:56 +0100 Subject: [PATCH] tool: bender with optional 'serial' UART discovery 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. --- tool/boot/README | 4 ++-- tool/boot/bender | Bin 29272 -> 29016 bytes tool/run/boot_dir/fiasco | 6 ++++-- tool/run/boot_dir/foc | 6 ++++-- tool/run/boot_dir/hw | 14 ++++++++------ tool/run/boot_dir/nova | 11 ++++------- tool/run/boot_dir/okl4 | 5 +++-- tool/run/boot_dir/pistachio | 5 +++-- tool/run/boot_dir/sel4 | 10 ++++++---- 9 files changed, 34 insertions(+), 27 deletions(-) diff --git a/tool/boot/README b/tool/boot/README index 1a5e037e28..ee231ad752 100644 --- a/tool/boot/README +++ b/tool/boot/README @@ -18,10 +18,10 @@ code respectively the download source of binaries are described below. configured via commandline. The changes are available from - https://github.com/m-stein/morbo.git. + https://github.com/alex-ab/morbo.git. git branch genode_bender - git commit 3645d67dc0643b8aab008eb76a8e056636e5edee + git commit 77a69185981de373905ae7e9c4ae24cd5cb1ac99 :'pulsar': diff --git a/tool/boot/bender b/tool/boot/bender index d365444b249e9d9a142f59a34551c474822713fc..16ad549402dced83733fbdf23e805ee51756248d 100755 GIT binary patch delta 14066 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⩔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 ZR&m@1>d?xO*7^+`N4Mv@A2ddP{ufA{qsssQ delta 14307 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 G;Qs)DeIsH3 diff --git a/tool/run/boot_dir/fiasco b/tool/run/boot_dir/fiasco index fd3bfa02f9..21a8ebfa5c 100644 --- a/tool/run/boot_dir/fiasco +++ b/tool/run/boot_dir/fiasco @@ -8,6 +8,8 @@ proc fiasco_serial_esc_arg { } { return "-serial_esc " } proc run_boot_string { } { return "\nL4 Bootstrapper" } proc core_link_address { } { return "0x01000000" } +proc boot_output { } { return "serial" } + ## # Populate boot directory with binaries on fiasco @@ -66,7 +68,7 @@ proc run_boot_dir {binaries} { # puts $fh "menuentry 'Genode on L4/Fiasco' {" puts $fh " insmod multiboot" - puts $fh " multiboot /boot/bender" + puts $fh " multiboot /boot/bender [boot_output]" puts $fh " module /boot/bootstrap -serial" puts $fh " module /boot/kernel -serial -jdb_cmd=JH [fiasco_serial_esc_arg]" puts $fh " module /boot/sigma0" @@ -87,7 +89,7 @@ proc run_boot_dir {binaries} { # 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 " exec /boot/bender [boot_output]" puts $fh " load /boot/bootstrap -serial" puts $fh " load /boot/kernel -serial -serial_esc -jdb_cmd=JH" puts $fh " load /boot/sigma0" diff --git a/tool/run/boot_dir/foc b/tool/run/boot_dir/foc index 9c8726e34e..fd5db6c8d8 100644 --- a/tool/run/boot_dir/foc +++ b/tool/run/boot_dir/foc @@ -24,6 +24,8 @@ proc core_link_address { } { proc fiasco_serial_esc_arg { } { return "-serial_esc " } +proc boot_output { } { return "serial" } + ## # Reset the target system via the Fiasco.OC kernel debugger @@ -110,7 +112,7 @@ proc run_boot_dir_x86 {binaries} { # puts $fh "menuentry 'Genode on Fiasco.OC' {" puts $fh " insmod multiboot" - puts $fh " multiboot /boot/bender" + puts $fh " multiboot /boot/bender [boot_output]" puts $fh " module /boot/bootstrap" puts $fh " module /boot/kernel fiasco [fiasco_serial_esc_arg]" puts $fh " module /boot/sigma0" @@ -134,7 +136,7 @@ proc run_boot_dir_x86 {binaries} { # 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 " exec /boot/bender [boot_output]" puts $fh " load /boot/bootstrap" puts $fh " load /boot/kernel -serial_esc" puts $fh " load /boot/sigma0" diff --git a/tool/run/boot_dir/hw b/tool/run/boot_dir/hw index c65beb5fab..40ca97d302 100644 --- a/tool/run/boot_dir/hw +++ b/tool/run/boot_dir/hw @@ -5,6 +5,8 @@ proc binary_name_timer { } { return "hw_timer_drv" } proc run_boot_string { } { return "\nkernel initialized" } +proc boot_output { } { return "serial" } + proc bootstrap_link_address { } { @@ -99,14 +101,14 @@ proc run_boot_dir {binaries} { 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 - set serial_bender_opt "" - if {[have_include "image/disk"]} { install_disk_bootloader_to_run_dir } @@ -117,7 +119,7 @@ proc run_boot_dir {binaries} { if {[have_include image/uefi]} { install_uefi_bootloader_to_run_dir - set serial_bender_opt "serial_fallback" + append options_bender " serial_fallback" } # @@ -127,7 +129,7 @@ proc run_boot_dir {binaries} { puts $fh "menuentry 'Genode on base-hw' {" puts $fh " insmod multiboot2" - puts $fh " multiboot2 /boot/bender $serial_bender_opt" + puts $fh " multiboot2 /boot/bender $options_bender" puts $fh " module2 /boot/image.elf.gz image.elf" puts $fh "}" close $fh @@ -162,7 +164,7 @@ proc run_boot_dir {binaries} { # 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 " exec /boot/bender $options_bender" puts $fh " load /boot/image.elf" close $fh @@ -177,7 +179,7 @@ proc run_boot_dir {binaries} { puts $fh "#!ipxe" install_pxe_bootloader_to_run_dir - puts $fh "kernel boot/bender" + puts $fh "kernel boot/bender $options_bender" puts $fh "module boot/image.elf" puts $fh "boot" close $fh diff --git a/tool/run/boot_dir/nova b/tool/run/boot_dir/nova index 95b7b81f2b..d41f6bbbf7 100644 --- a/tool/run/boot_dir/nova +++ b/tool/run/boot_dir/nova @@ -33,6 +33,8 @@ 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 " } @@ -88,14 +90,9 @@ proc run_boot_dir {binaries} { exec mv [run_dir]/image.elf [run_dir]/boot/image.elf # - # Setup bender and plugins + # Setup bender options, e.g. serial and applying Intel HWP mode # - set options_bender "" - - # - # Apply Intel HWP mode - # - append options_bender " [bender_intel_hwp_mode_option]" + set options_bender "[boot_output] [bender_intel_hwp_mode_option]" if {[apply_microcode]} { exec cp bin/micro.code [run_dir]/boot/ diff --git a/tool/run/boot_dir/okl4 b/tool/run/boot_dir/okl4 index bdaa926a59..62afff09f7 100644 --- a/tool/run/boot_dir/okl4 +++ b/tool/run/boot_dir/okl4 @@ -4,6 +4,7 @@ proc binary_name_timer { } { return "pit_timer_drv" } proc kernel_files { } { return okl4 } +proc boot_output { } { return "serial" } ## # Get the base-okl4 repository @@ -178,7 +179,7 @@ proc run_boot_dir {binaries} { # puts $fh "menuentry 'Genode on OKL4' {" puts $fh " insmod multiboot" - puts $fh " multiboot /boot/bender" + puts $fh " multiboot /boot/bender [boot_output]" puts $fh " module /boot/image.elf" puts $fh "}" close $fh @@ -201,7 +202,7 @@ proc run_boot_dir {binaries} { set fh [open "[run_dir]/config-52-54-00-12-34-56" "WRONLY CREAT TRUNC"] # load okl4 at 256M to avoid overwritting binary, adjust by need puts $fh " addr 0x10000000" - puts $fh " exec /boot/bender" + puts $fh " exec /boot/bender [boot_output]" puts $fh " load /boot/image.elf" close $fh diff --git a/tool/run/boot_dir/pistachio b/tool/run/boot_dir/pistachio index 5507841eec..48a2810889 100644 --- a/tool/run/boot_dir/pistachio +++ b/tool/run/boot_dir/pistachio @@ -7,6 +7,7 @@ proc kernel_files { } { return { pistachio sigma0-pistachio kickstart-pistachio proc run_boot_string { } { return "\n\r\033\\\[1m\033\\\[33mL4Ka::Pistachio -" } proc core_link_address { } { return "0x02000000" } +proc boot_output { } { return "serial" } ## # Populdate boot directory with binaries on pistachio @@ -65,7 +66,7 @@ proc run_boot_dir {binaries} { # puts $fh "menuentry 'Genode on L4ka::Pistachio' {" puts $fh " insmod multiboot" - puts $fh " multiboot /boot/bender" + puts $fh " multiboot /boot/bender [boot_output]" puts $fh " module /boot/kickstart" puts $fh " module /boot/kernel" puts $fh " module /boot/sigma0" @@ -89,7 +90,7 @@ proc run_boot_dir {binaries} { # 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 " exec /boot/bender [boot_output]" puts $fh " load /boot/kickstart" puts $fh " load /boot/kernel" puts $fh " load /boot/sigma0" diff --git a/tool/run/boot_dir/sel4 b/tool/run/boot_dir/sel4 index 4b945250e8..59fb26738a 100644 --- a/tool/run/boot_dir/sel4 +++ b/tool/run/boot_dir/sel4 @@ -10,6 +10,7 @@ proc binary_name_timer { } { proc kernel_files { } { return sel4 } +proc boot_output { } { return "serial" } proc run_boot_string { } { return "\n\rBooting all finished, dropped to user space" } proc core_link_address { } { return "0x02000000" } @@ -54,8 +55,9 @@ proc run_boot_dir {binaries} { exec mv [run_dir]/image.elf [run_dir]/boot/image.elf + set options_bender "[boot_output] phys_max=256M" + if {[have_include "image/iso"] || [have_include "image/disk"] || [have_include image/uefi]} { - set serial_bender_opt "" if {[have_include "image/disk"]} { install_disk_bootloader_to_run_dir @@ -67,7 +69,7 @@ proc run_boot_dir {binaries} { if {[have_include image/uefi]} { install_uefi_bootloader_to_run_dir - set serial_bender_opt "serial_fallback" + set options_bender " serial_fallback" } # @@ -77,7 +79,7 @@ proc run_boot_dir {binaries} { puts $fh "menuentry 'Genode on seL4' {" puts $fh " insmod multiboot2" - puts $fh " multiboot2 /boot/bender phys_max=256M $serial_bender_opt" + puts $fh " multiboot2 /boot/bender $options_bender" puts $fh " module2 /boot/sel4 sel4 disable_iommu" puts $fh " module2 /boot/image.elf image.elf" puts $fh "}" @@ -130,7 +132,7 @@ proc run_boot_dir {binaries} { # Generate pulsar config file # set fh [open "[run_dir]/config-52-54-00-12-34-56" "WRONLY CREAT TRUNC"] - puts $fh " exec /boot/bender phys_max=256M" + puts $fh " exec /boot/bender $options_bender" puts $fh " load /boot/sel4 disable_iommu" puts $fh " load /boot/image.elf" close $fh