QEMU源码全解析4 —— QEMU参数解析(4)

88 篇文章 19 订阅

接前一篇文章: QEMU源码全解析3 —— QEMU参数解析(3)

本文内容参考:

《趣谈 Linux 操作系统》 —— 刘超, 极客时间

QEMU /KVM》源码解析与应用 —— 李强,机械工业出版社

特此致谢!

本回讲解QemuOpt结构的具体定义以及QemuOptsList、QemuOpt、QemuOpts等结构之间的关系。

前文提到,每个QEMU子选项由一个QemuOpt结构表示。QemuOpt结构在include/qemu/option_int.h中定义,代码如下:

  1. struct QemuOpt {
  2. char *name;
  3. char *str;
  4. const QemuOptDesc *desc;
  5. union {
  6. bool boolean;
  7. uint64_t uint;
  8. } value;
  9. QemuOpts *opts;
  10. QTAILQ_ENTRY(QemuOpt) next;
  11. };

name表示子选项的字符串表示;str表示对应的值。

QEMUOptsList并不和QemuOpt直接联系,中间还有一层QemuOpts。从名字上也能看出来,QemuOpts代表的是多个QemuOpt。为什么需要QemuOpts?这是因为QEMU命令行可以指定创建两个相同的设备,此时这类设备都在QemuOptList链表上,这是两个独立的QemuOpts,每个QemuOpts有自己的QemuOpt链表。QemuOpts结构的定义也在include/qemu/option_int.h中(这个文件中就struct QemuOpt和struct QemuOpts两个定义),代码如下:

  1. struct QemuOpts {
  2. char *id;
  3. QemuOptsList *list;
  4. Location loc;
  5. QTAILQ_HEAD(, QemuOpt) head;
  6. QTAILQ_ENTRY(QemuOpts) next;
  7. };

head是QemuOpts下的QemuOpt链表头;next用来连接相同QemuOptsList下同一种QemuOpts。

QemuOptsList、QemuOpts与QemuOpt三者的关系如下图所示(注:图中最上边一行的qemu_smp_opts在新版本中已经不存在了):

在这里插入图片描述

QemuOptsList、QemuOpts、QemuOpt三者关系图

本文就介绍到这里,下一篇文章会以-device参数项为例简单分析参数的处理过程。

举报

选择你想要举报的内容(必选)
  • 内容涉黄
  • 政治相关
  • 内容抄袭
  • 涉嫌广告
  • 内容侵权
  • 侮辱谩骂
  • 样式问题
  • 其他