Skip to content

QEMU Windows COM port filenames not recognized i.e. \\.\COM19 or \\.\CNCA0

Host environment

  • Operating system: Windows 10
  • OS/kernel version: 22H2
  • Architecture: x64
  • QEMU flavor: qemu-system-arm
  • QEMU version: QEMU emulator version 8.1.0 (v8.1.0-12034-g129566d84e)
  • QEMU command line: qemu-system-arm.exe -machine mps2-an500 -gdb \.\CNCA8

Steps to reproduce

  1. Run qemu-system-arm with the comand line above.
  2. QEMU fails with qemu-system-arm.exe: -gdb \\.\CNCA8: '\\.\CNCA8' is not a valid char driver

qemu-system-arm.exe: -gdb \.\COM19: '\.\COM19' is not a valid char driver




## Additional information
Windows allows COM ports numbered 10 and higher to be prefixed with a `\\.\` escape as in `\\.\COM17`. Such COM port assignments are not uncommon when a plurality of USB serial adapters.
Equally problematic are virtual COM port designations such as `\\.\CNCA8` created by the Windows 10x64 driver package known as `com0com`: https://pete.akeo.ie/2011/07/com0com-signed-drivers.html

Upon checking the source pulled from the Github mirror an initial fix was to simply modify /chardev/char.c, but this appears insufficient. Sadly.

Please ask if more information is required. I am actively working on extending an existing QEMU machine emulation. A patch to fix this problem is below. Please comment if applicable.

Jerry.

diff --git a/chardev/char.c b/chardev/char.c index 3c43fb1278..7a3f342c72 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -418,6 +418,13 @@ QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename, qemu_opt_set(opts, "path", filename, &error_abort); return opts; }

  •   // JME
  • if (strstart(filename, "\\.\", NULL)) {
  •    qemu_opt_set(opts, "backend", "serial", &error_abort);
  •    qemu_opt_set(opts, "path", filename, &error_abort);
  •    return opts;
  • }
  • if (strstart(filename, "file:", &p)) { qemu_opt_set(opts, "backend", "file", &error_abort); qemu_opt_set(opts, "path", p, &error_abort);
/label ~"kind::Bug"
Edited by G40
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information