From c236c9f7b9c82d3590acfdb2eb3668a9ba5775ea Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Thu, 4 Jul 2024 17:16:35 +0200 Subject: [PATCH] Use qemu's virtconsole for the serial console edk2 now has a virtio serial driver so let's switch to virtconsole for the serial console as it's significantly faster compared to the old ISA serial console. --- mkosi/__init__.py | 8 ++------ mkosi/config.py | 20 ++++---------------- mkosi/qemu.py | 3 ++- mkosi/resources/mkosi.md | 2 +- tests/__init__.py | 3 +-- 5 files changed, 10 insertions(+), 26 deletions(-) diff --git a/mkosi/__init__.py b/mkosi/__init__.py index b6fcc62fd..474542c08 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -323,14 +323,10 @@ def configure_autologin(context: Context) -> None: "--noclear --keep-baud console 115200,38400,9600") configure_autologin_service(context, "getty@tty1.service", "--noclear -") - configure_autologin_service(context, "serial-getty@ttyS0.service", + configure_autologin_service(context, + "serial-getty@hvc0.service", "--keep-baud 115200,57600,38400,9600 -") - if context.config.architecture.default_serial_tty() != "ttyS0": - configure_autologin_service(context, - f"serial-getty@{context.config.architecture.default_serial_tty()}.service", - "--keep-baud 115200,57600,38400,9600 -") - @contextlib.contextmanager def mount_cache_overlay(context: Context, cached: bool) -> Iterator[None]: diff --git a/mkosi/config.py b/mkosi/config.py index 4b25961cc..8395116b3 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -420,17 +420,6 @@ def to_oci(self) -> str: return a - def default_serial_tty(self) -> str: - return { - Architecture.arm : "ttyAMA0", - Architecture.arm64 : "ttyAMA0", - Architecture.s390 : "ttysclp0", - Architecture.s390x : "ttysclp0", - Architecture.ppc : "hvc0", - Architecture.ppc64 : "hvc0", - Architecture.ppc64_le : "hvc0", - }.get(self, "ttyS0") - def supports_smbios(self, firmware: QemuFirmware) -> bool: if self.is_x86_variant(): return True @@ -3749,7 +3738,6 @@ def finalize_term() -> str: def load_kernel_command_line_extra(args: argparse.Namespace) -> list[str]: - tty = args.architecture.default_serial_tty() columns, lines = shutil.get_terminal_size() term = finalize_term() @@ -3759,9 +3747,9 @@ def load_kernel_command_line_extra(args: argparse.Namespace) -> list[str]: "systemd.wants=network.target", # Make sure we don't load vmw_vmci which messes with virtio vsock. "module_blacklist=vmw_vmci", - f"systemd.tty.term.{tty}={term}", - f"systemd.tty.columns.{tty}={columns}", - f"systemd.tty.rows.{tty}={lines}", + f"systemd.tty.term.hvc0={term}", + f"systemd.tty.columns.hvc0={columns}", + f"systemd.tty.rows.hvc0={lines}", ] if not any(s.startswith("ip=") for s in args.kernel_command_line_extra): @@ -3785,7 +3773,7 @@ def load_kernel_command_line_extra(args: argparse.Namespace) -> list[str]: f"systemd.tty.term.console={term}", f"systemd.tty.columns.console={columns}", f"systemd.tty.rows.console={lines}", - f"console={tty}", + "console=hvc0", f"TERM={term}", ] diff --git a/mkosi/qemu.py b/mkosi/qemu.py index 9d4241cec..393c80a5f 100644 --- a/mkosi/qemu.py +++ b/mkosi/qemu.py @@ -937,7 +937,8 @@ def run_qemu(args: Args, config: Config) -> None: "-nographic", "-nodefaults", "-chardev", "stdio,mux=on,id=console,signal=off", - "-serial", "chardev:console", + "-device", "virtio-serial-pci,id=mkosi-virtio-serial-pci", + "-device", "virtconsole,chardev=console", "-mon", "console", ] diff --git a/mkosi/resources/mkosi.md b/mkosi/resources/mkosi.md index c12229006..aa206bd3b 100644 --- a/mkosi/resources/mkosi.md +++ b/mkosi/resources/mkosi.md @@ -1119,7 +1119,7 @@ boolean argument: either `1`, `yes`, or `true` to enable, or `0`, `no`, `Autologin=`, `--autologin` : Enable autologin for the `root` user on `/dev/pts/0` (nspawn), - `/dev/tty1` and `/dev/ttyS0`. + `/dev/tty1` and `/dev/hvc0`. `MakeInitrd=`, `--make-initrd` : Add `/etc/initrd-release` and `/init` to the image so that it can be diff --git a/tests/__init__.py b/tests/__init__.py index aae36fa00..8b897c0fa 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -13,7 +13,7 @@ import pytest -from mkosi.config import Architecture, finalize_term +from mkosi.config import finalize_term from mkosi.distributions import Distribution from mkosi.run import run from mkosi.types import _FILE, CompletedProcess, PathString @@ -58,7 +58,6 @@ def mkosi( check: bool = True, ) -> CompletedProcess: kcl = [ - f"console={Architecture.native().default_serial_tty()}", f"TERM={finalize_term()}", "loglevel=6", "systemd.crash_shell",