semantic: 0.254 other: 0.248 device: 0.087 network: 0.072 graphic: 0.055 performance: 0.046 debug: 0.037 vnc: 0.037 files: 0.036 permissions: 0.036 socket: 0.035 PID: 0.028 boot: 0.018 KVM: 0.010 debug: 0.222 files: 0.157 device: 0.114 PID: 0.091 other: 0.090 network: 0.075 socket: 0.056 semantic: 0.044 performance: 0.033 boot: 0.028 graphic: 0.026 permissions: 0.021 KVM: 0.021 vnc: 0.021 qemu: invalid serial port configuration The tty_serial_init() function sets the port c_oflags as follows: tty.c_oflag |= OPOST not clearing ONLCR, ONLRET and others. The result is that the postprocess output is enabled and host translates 0xa (LF) to 0xd 0xa (CR LF) which breaks the binary transmissions on serial port even if you set the port to raw mode (no matters if on host and/or guest). The issue has been reported 11 years ago on qemu-devel mailing list: https://lists.nongnu.org/archive/html/qemu-devel/2006-06/msg00196.html There was also a FreeBSD patch including the fix: https://lists.freebsd.org/pipermail/freebsd-ports/2006-October/036390.html I think the correct port configuration is: tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON|IMAXBEL); tty.c_oflag &= ~OPOST; In such case the host will perform no output processing and will pass the data as is. And the guest will be able to configure input/output processing exactly as it wants. I believe the following bug is related: https://bugs.launchpad.net/qemu/+bug/1407813 Patch has now been committed here: https://git.qemu.org/?p=qemu.git;a=commitdiff;h=12fb0ac0575df83cec72ec