如何使用 QEMU 中的虚拟串口[转]_yanglin_新浪博客如何使用 QEMU 中的虚拟串口[转]_yanglin_新浪博客,yanglin,http://blog.sina.com.cn/s/blog_a1e6528101019xmm.html

QEMU 具有模拟 串口 和 并口 的能力, 在 QEMU 的命令行接口, 提供了 -serial 参数供用户设置把虚拟的串口重定向到哪里.

本文档主要介绍如何使用这个虚拟串口, 接下来会从代码方面描述 QEMU 如何模拟 一个串口.

不使用串口

$ qemu-kvm ArchLinux.img -serial none

不管是 Linxu 还是 Window, 在 QEMU 里面禁用了串口, 但是用一些硬件检测 工具还是能检测到串口的存在. 用一段简单的代码来检测是否串口可以使用

#!/usr/bin/python import serial try: s = serial.Serial('/dev/ttyS0') print "Find serial port on /dev/ttyS0" except: print "Cant found serial port on /dev/ttyS0"

重定向到虚拟控制台

$ qemu-kvm ArchLinux.img -serial vc:800x600 # 或者 vc:80Cx24C

实际上, 默认 启动 QEMU 的时候如果不加参数的话, 会自动创建四个控制台, 分别用 Ctrl + Alt + number 来切换, number 为 1, 2 或 3, 4 其中 1 是 QEMU 的图形终端, 2 是 QEMU 的 Monitor 终端(QEMU 的 Monitor 稍候会介绍), 3 是 Serial 终端, 4 是并口终端.

重定向到一个伪终端

$ qemu-kvm ArchLinux.img -serial pty

然后会发生什么呢? QEMU 会自动创建一个伪终端设备(/dev/pts/3) 之类的, 然后 用 screen 之类的工具就可以操纵这个终端了.

PS. 这东西 Linux only 哟

重定向到 null

$ qemu-kvm ArchLinux.img -serial null

这和重定向到 none 有什么区别呢? 区别就是 -> none QEMU 不会虚拟串口设备, 但是 -> null 会虚拟一个串口设备, 丢弃所有的输出: 如以下的代码. 至于输入? 需要输入吗?

static int null_chr_write(CharDriverState *chr, const uint8_t *buf, int len) { return len; }

重定向要真实串口设备

$ qemu-kvm ArchLinux.img -serial /dev/ttyS0

但是虚拟串口的硬件参数需要和真实串口符合

PS. Linux only 哟

重定向到并口

$ qemu-kvm ArchLinux.img -serial /dev/parportN

重定向到第 N 个并口

PS. Linux only 哟

重定向到一个文件

$ qemu-kvm ArchLinux.img -serial file:/tmp/serial.out

不过从打开文件的方式看来, QEMU 只是把串口的输出写入文件, 而并不支持串口的 输入.

TFR(fd_out = qemu_open(qemu_opt_get(opts, "path"), O_WRONLY | O_TRUNC | O_CREAT | O_BINARY, 0666));

重定向到 stdio

$ qemu-kvm ArchLinux.img -serial stdio

把串口重定向到标准输入输出, 这给调试 Guest OS(其实我说的是 Linux OS, 你要调试 Window OS? 你吃饱了撑的?)提供了方便.

重定向到管道

$ qemu-kvm ArchLinux.img -serial pipe:/tmp/serial:

不过这玩意还比上面的复杂, 根据 QEMU 打开这类设备的代码, 需要手动创建 /tmp/serial.in 和 /tmp/serial.out 两个管道文件

snprintf(filename_in, 256, "%s.in", filename); snprintf(filename_out, 256, "%s.out", filename); TFR(fd_in = qemu_open(filename_in, O_RDWR | O_BINARY)); TFR(fd_out = qemu_open(filename_out, O_RDWR | O_BINARY));
$ mkdir fifo /tmp/serial.in $ mkdir fifo /tmp/serial.out

怎么使用呢? cat /tmp/serial.out 会看到 Linux 登录的一堆信息, 最后停在 virt-debian login: 这里等待输入, 用

$ echo your_username >> /tmp/serial.in $ echo your_password >> /tmp/serial.in

再打开 cat /tmp/serial.p.out 就可以看到内容已经变成 root@virt-debian:~# 这样的东西了.

所以这玩意对我用处不大

重定向到 udp 端口

$ qemu-kvm ArchLinux.img -serial udp::3333

将 QEMU 的串口重定向到 3333 端口, 使用 nc 访问这个端口 (当然可以自己编写 socket 访问). 这对远程管理很有帮助

$ nc -u -l -p 3333

重定向到 tcp 端口

$ qemu-kvm ArchLinux.img -serial tcp::3333,server,nowait

可以使用 telnet 来访问该端口

$ telnet localhost 3333

重定向到 telnet

几乎 TCP 是一样的

$ qemu-kvm ArchLinux.img -serial telnet::3333,server,nowait

重定向到 Unix socket

$ qemu-kvm ArchLinux.img -serial unix:/tmp/serial.sock,server,nowait

用 socat 连接

$ socat /tmp/serial.sock STDIO

同时定向到串口和 mon 控制台

$ qemu-kvm ArchLinux.img -serial mon:telnet::3333,server,nowait

这将同时定向串口到 TCP 3333 端口的同时, 可以使用 Ctrl + a 然后按 c 访问 Monitor 终端

定向到 braille

这个太强大了, 相关 google braille

msmouse

重来没有使用过

如何使用 QEMU 中的虚拟串口相关推荐

  1. keil C51 中使用虚拟串口调试串口

    功能介绍: 在不使用51开发板下,使用keil C51中的软件仿真 和虚拟串口软件VSPD完成串口通信的过程. 类似的还有一篇关于STM32调试串口的 keil MDK 中使用虚拟串口调试串口 操作步 ...

  2. proteus中使用虚拟串口实现单片机和上位机通讯

    祝大家身体健康哈,肺炎愈来愈多,希望看到这篇文章的旁友都能健健康康! 今天写一下proteus里如何使用虚拟串口仿真单片机和上位机通讯,所需要的软件有:(1)Virtual Serial Port D ...

  3. 几款优秀的 Windows 虚拟串口模拟器

    关注.星标公众号,不错过精彩内容 来源:网络 编辑整理:strongerHuang 大家用的较多的可能是USB虚拟串口,相比串口传输速度更快.而本文分享的是基于Windows的虚拟串口. 虚拟串口(虚 ...

  4. 计算机软件可以用虚拟串口吗,虚拟串口以及在Proteus中的使用

    一.虚拟串口 虚拟串口是计算机通过软件模拟的串口,当其它设计软件使用到串口的时候,可以通过调用虚拟串口仿真模拟,以查看所设计的正确性.首先要安装虚拟串口设置的软件,网上有很多设置虚拟串口的软件,我用的 ...

  5. socat 虚拟串口在 linux OS中如何实现?

    socat虚拟串口工具 用途:linux socat 将2个串口通过虚拟的方式连接起来,这样就可以:直接对串口程序进行调试了. 对串口程序进行调试,不再需要外部串口. Win OS Win com0c ...

  6. 虚拟串口及其在串口转以太网中的应用

    本文介绍虚拟串口的概念,以及如何在串口转以太网中利用该技术. 1.虚拟串口的概念 虚拟串口是用操作系统的虚拟驱动技术产生的串口(COM口),相对于计算机本身的硬件串口(COM1等)来说虚拟串口并不对应 ...

  7. stm32中cubmx+keil+proteus+虚拟串口+串口助手的使用

    stm32中cubmx+keil+proteus+虚拟串口+串口助手的使用 stm32cubmx keil proteus 一个简单的实例 虚拟串口+串口调试 项目设计需要,以下为微控制器模块要用到的 ...

  8. Android模拟器虚拟串口实现串口通信

    第一步: 根据博文<Android SDK安装及配置模拟器>安装JDK,Android SDK,设置环境变量. 第二步: 运行android-sdk下的SDK Manager.exe 安装 ...

  9. qemu中的新版vga仿真

    让我们先来了解一下历史: VGA起源: VGA 由IBM在1987年提出. 它有一些列的新功能,同时也兼容它的那些前辈如CGA跟EGA的所有功能: 1. 文本模式(80x25,字体小一下的话也可以支持 ...

  10. 建立UDP到虚拟串口的映射软件 : USR-VCOM,并应用到WiFi调试ESP32

    简 介: 为了能够通过WiFi对于ESP32中的MicroPython程序进行开发,本文测试了使用有人无线模块USR-WiFi形成虚拟串口的方式对于ESP32进行软件开发. 关键词: ESP32,US ...

最新文章

  1. ASP.NET--Menu控件
  2. eclipse断点调试 出现Source not found
  3. out类型参数的讲解
  4. java重写6,java重写equals()方法和hashCode()方法
  5. 目前市场上的电脑一体机从计算机种类,电脑一体机发展方向是什么?
  6. radius mysql md5_请教两个问题:关于无线局域网和Radius+MD5认证
  7. EMC 电磁兼容测试项目
  8. OpenShift 4 Tekton (2) - OpenShift Pipeline入门-用Pipeline部署应用
  9. Flink Batch SQL 1.10 实践
  10. (一)网络编程基础之套接字入门
  11. 酷q服务器未响应,酷Q [CQHTTP Python Async SDK] 入坑指南【已失效】
  12. GUI 图形用户界面编程(一)
  13. 如何利用python画三棱锥_玩转CSS 3D -正四面体与正六面体
  14. PDF文件被加密问题
  15. 视频号是微信生态的中场核心?
  16. 全球与中国便携式USB摄像机市场现状及未来发展趋势(2022)
  17. F28335 ePWM模块简介——TMS320F28335学习笔记(四)
  18. for while循环、if判断
  19. STM32移植RT-Thread3.1.5 NANO
  20. html5网页中加入播放器,向网页中添加 HTML5 视频控件

热门文章

  1. vue报错elementUI使用datepicker报错Avoid mutating a prop directly since the value will be overwritten whene
  2. 栈溢出学习(四)之Hijack GOT
  3. 北京小米Java有笔试吗_小米校招笔试题(java)
  4. uni-app海报(合成图片)demo
  5. Windows 2003安装和配置活动目录服务 zz
  6. 解决phpstudy的Apache启动失败
  7. 【正点原子FPGA连载】 第二十三章 EEPROM读写测试实验-摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
  8. Chromium 手势插件
  9. VisionTransformer(一)—— Embedding Patched与Word embedding及其实现
  10. python聚类系数_NetworkX 计算聚类系数的Python实现