首页 > 编程语言 >Qemu源码分析(4)—Apple的学习笔记

Qemu源码分析(4)—Apple的学习笔记

时间:2023-09-16 17:05:13浏览次数:68  
标签:opt Apple Qemu 源码 NULL qemu find opts name

一,前言

本节主要分析option的搜索API。

二,源码分析

时常看到如下的opts使用API。那么就来分析下。
qemu_opts_foreach(qemu_find_opts("device"), default_driver_check, NULL, NULL);

  1. 最开始搜索QemuOptsList比较容易理解,就是从vm_config_groups数组中找。此list是初始化的时候通过qemu_add_opts一个个加入到list中的。
QemuOptsList *qemu_find_opts(const char *group)
{
 QemuOptsList *ret;
 Error *local_err = NULL;
 
 ret = find_list(vm_config_groups, group, &local_err);
 if (local_err) {
 error_report_err(local_err);
 }
 
 return ret;
}
  1. qemu_opts_foreach主要就是对一个list中的所有Opts进行归递处理。若为空就直接退出了,否则要执行func函数。

Qemu源码分析(4)—Apple的学习笔记_qemu

  1. 我在rc=func执行的语句打断点,第一个执行的是chardev_init_func说明这类语句的含义就是通过搜索opt的存在性来执行相关option的初始化函数。

if (qemu_opts_foreach(qemu_find_opts("chardev"),
 chardev_init_func, NULL, NULL)) {
 exit(1);
}
  1. 光看到此处QemuOpt还没用上,继续看一定会用上的就在qemu_opt_get函数中
const char *qemu_opt_get(QemuOpts *opts, const char *name)
{
 QemuOpt *opt;
 
 if (opts == NULL) {
 return NULL;
 }
 
 opt = qemu_opt_find(opts, name);
 if (!opt) {
 const QemuOptDesc *desc = find_desc_by_name(opts->list->desc, name);
 if (desc && desc->def_value_str) {
 return desc->def_value_str;
 }
 }
 return opt ? opt->str : NULL;
}
  1. qemu_opt_find(opts, name)是否又看到了雷同的链表搜索手法
QemuOpt *qemu_opt_find(QemuOpts *opts, const char *name)
{
 QemuOpt *opt;
 
 QTAILQ_FOREACH_REVERSE(opt, &opts->head, QemuOptHead, next) {
 if (strcmp(opt->name, name) != 0)
 continue;
 return opt;
 }
 return NULL;
}
  1. 再关注下opts->list->desc,通过opts可以向上找list中的内容。他们算是密切联系的内容。而这些desc描述的用途,我理解可以把字符串为不同的类型,比如如下就是把on和off的描述转为boolean类型的1和0。
static void parse_option_bool(const char *name, const char *value, bool *ret,
 Error **errp)
{
 if (value != NULL) {
 if (!strcmp(value, "on")) {
 *ret = 1;
 } else if (!strcmp(value, "off")) {
 *ret = 0;
 } else {
 error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
 name, "'on' or 'off'");
 }
 } else {
 *ret = 1;
 }
}


类型定义

Qemu源码分析(4)—Apple的学习笔记_qemu_02

  1. 关于类图主要关系如下

Qemu源码分析(4)—Apple的学习笔记_qemu_03

三,小结

本节主要内容就是分析option相关的搜索API,了解结构体设计和它的搜索算法。说不定我将来也能用到这类设计手法。

标签:opt,Apple,Qemu,源码,NULL,qemu,find,opts,name
From: https://blog.51cto.com/u_16247275/7494473

相关文章

  • vb源码收集站点
    vb源码收集站点大全http://AllAPI.net  http://vbCity.com  http://www.vbgood.com  http://www.applevb.com  http://jinesc.6600.org    http://www.a1vbcode.com  http://www.codeguru.com/  http://www.codetools.com/  http://www.easthot.net  http://......
  • Qemu源码分析(3)—Apple的学习笔记
    一,前言本次主要分析object_new,也就是了解最关键的object类对象。二,源码分析看上去就是通过TypeImpl来创建Object。Object*object_new(constchar*typename){TypeImpl*ti=type_get_by_name(typename);returnobject_new_with_type(ti);}主要调用初始化object,把type中的......
  • [SpringSecurity5.6.2源码分析十]:HeaderWriterFilter
    前言• 为了安全考虑,添加启用浏览器保护的某些头是很有用的,比如X-Frame-Options,X-XSS-Protection和X-Content-Type-Options• 而HeaderWriterFilter就支持往响应头写入各种响应头1、HeadersConfigurer• HeadersConfigurer是HeaderWriterFilter对应的配置类,是在获取HttpSecur......
  • springboot vue uniapp 小说电子书阅读小程序APP源码
    开发环境及工具:大等于jdk1.8,大于mysql5.5,idea(eclipse),nodejs,vscode(webstorm),HBuilderX技术说明:springbootmybatisvueelementuiuniapp代码注释齐全,没有多余代码,适合学习(毕设),二次开发,包含论文技术相关文档。功能介绍:用户端:登录注册首页显示搜索小说,轮播图,最新发布小说(可带推荐算......
  • 【DSP视频教程】DSP视频教程第12期:TI开源分享IQmath DSP源码,适用于所有Cortex-M内核,本
     今年TI推出MSPM0系列产品配套的SDK软件包里面将此库开源了,之前的时候也移植过IQmatb,不过只有库版本,这次竟然开源了,确实是不可多得的好资源。这个是定点库,非常适合用于M0,  M0+,  M3和不带硬件FPU的M4内核上,当然,用在M4F,M7,M33等器件上也是没问题的。本次视频配套的例子将ARMDS......
  • 阅读源码主题学习(I)
    一个程序员的技术水平的高低,是看他做过多少系统,更重要是看他踩过多少坑。阅读源码有哪些坑?源码阅读最难的不是代码本身,也不是理解其设计理念,而是坚持!职场小人开始说话了:1.工作中用的技术不需要阅读源码,在开发过程中熟练运用就行;2.看源码太费时间,而且容易忘记,实际使用中遇到问......
  • 二、 Axios入门—Axios源码分析
    一、axios与Axios的关系从语法上来说:axios不是Axios的实例从功能上来说:axios是Axios的实例axios是Axios.prototype.request函数bind()返回的函数axios作为对象有Axios原型对象上的所有方法,有Axios对象上所有属性二、instance与axios的区别相同:(1)都是一......
  • 基于Javaweb的物业管理系统的设计与实现-计算机毕业设计源码+LW文档
    摘 要随着目前信息化手段的进步,使用技术手段可以有效的对小区物业进行管理。在社区,人员多,各种维修、报修信息大,如果单靠人工进行管理,很难进行有效的统计。为此提出开发物业管理系统,来管理小区的业主信息、通知公告、报修管理、房产管理等。本物业管理系统可以降低社区工作者的劳......
  • 基于Javaweb汽车销售管理系统设计与实现-计算机毕业设计源码+LW文档
    摘 要随着因特网技术的迅速发展,当前人们的生活模式发生了巨大的变化。特别是在经济发展的影响下,汽车销售逐渐进入了人们的生活,并通过汽车销售系统进行汽车管理,方便用户在线销售、交流操作。当前城市生活节奏快,工作路程远,为了减少不必要的路途时间,许多用户选择使用自驾快速到达目......
  • 《Python从入门到实战》-源码篇-pyspider
    pyspider是什么?PySpider是一个开源的网络爬虫框架,使用Python语言编写。高效、易用、可扩展等特点,可以帮助用户快速地开发出高效的网络爬虫程序。PySpider支持多线程、分布式、异步IO等技术,可以处理大规模的数据爬取任务。同时,PySpider还提供了Web界面,方便用户进行任务管理和监控......