当前位置: 首页 > news >正文

网页设计用的软件seo快速收录快速排名

网页设计用的软件,seo快速收录快速排名,住建部2017建设工程合同范本,万能转账生成器app接前一篇文章:QEMU源码全解析36 —— Machine(6) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 特此致谢! 上回书讲完了q…

接前一篇文章:QEMU源码全解析36 —— Machine(6)

本文内容参考:

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

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

特此致谢!

上回书讲完了qemu_create_machine函数中的第一步select_machine函数。本文讲解第2个步骤函数:MACHINE。为了便于理解,再次贴出qemu_create_machine函数代码,在softmmu/vl.c中,如下:

static void qemu_create_machine(QDict *qdict)
{MachineClass *machine_class = select_machine(qdict, &error_fatal);object_set_machine_compat_props(machine_class->compat_props);current_machine = MACHINE(object_new_with_class(OBJECT_CLASS(machine_class)));object_property_add_child(object_get_root(), "machine",OBJECT(current_machine));object_property_add_child(container_get(OBJECT(current_machine),"/unattached"),"sysbus", OBJECT(sysbus_get_default()));if (machine_class->minimum_page_bits) {if (!set_preferred_target_page_bits(machine_class->minimum_page_bits)) {/* This would be a board error: specifying a minimum smaller than* a target's compile-time fixed setting.*/g_assert_not_reached();}}cpu_exec_init_all();page_size_init();if (machine_class->hw_version) {qemu_set_hw_version(machine_class->hw_version);}/** Get the default machine options from the machine if it is not already* specified either by the configuration file or by the command line.*/if (machine_class->default_machine_opts) {QDict *default_opts =keyval_parse(machine_class->default_machine_opts, NULL, NULL,&error_abort);qemu_apply_legacy_machine_options(default_opts);object_set_properties_from_keyval(OBJECT(current_machine), default_opts,false, &error_abort);qobject_unref(default_opts);}
}

第2步代码片段如下:

current_machine = MACHINE(object_new_with_class(OBJECT_CLASS(machine_class)));

笔者开始对这个MACHINE并没有引起重视,以为在QEMU源码根目录下一搜索就能找到,结果搜索了半天,愣是找不到它是在哪里定义的。后来又查找系统目录,怀疑是在系统目录下的哪个头文件中而非QEMU源码中,结果也没有找到。又在网上搜索,也没有任何相关的结果。在参考的书和培训资料中也都是只列出了以上代码,并没有提到具体的定义……

几经周折,终于发现了一些端倪。笔者在google上搜索“X86_MACHINE”,其中一个结果链接给出(指向)了QEMU源码中include/hw/i386/x86.h的老版本源码。在此老版本源码中,是能够找到X86_MACHINE的定义的,如下所示:

由此就联想到既然X86_MACHINE的定义与X86MachineState结构在同一个文件(include/hw/i386/x86.h)中,那么MACHINE的定义就应该和MachineState在同一个文件中。于是在QEMU源码根目录下搜索“MachineState”,最终定位到include/hw/boards.h文件。

又由于X86_MACHINE宏定义所在的include/hw/i386/x86.h文件的内容由于版本更新已经和上边不同了,因此通过原本X86_MACHINE宏被定义的地方,看看新版本中对应的代码是怎样的。结果找到了这一段代码:

#define TYPE_X86_MACHINE   MACHINE_TYPE_NAME("x86")
OBJECT_DECLARE_TYPE(X86MachineState, X86MachineClass, X86_MACHINE)

这就很明显地能够看出,原本是代码“#define X86_MACHINE(obj) OBJECT_CHECK(X86MachineState, (obj),  TYPE_X86_MACHINE)”的地方,在新版本中变成了“OBJECT_DECLARE_TYPE(X86MachineState, X86MachineClass, X86_MACHINE)”。那么与之对应,在include/hw/boards.h文件中,如果也能找到这个“OBJECT_DECLARE_TYPE”关键字,那么想必其所对应的代码就是MACHINE的定义之处。

按照这个思路,在include/hw/boards.h中搜索,果然不出所料,找到了以下代码:

OBJECT_DECLARE_TYPE(MachineState, MachineClass, MACHINE)

那么毋庸置疑,这段代码中一定就包含了MACHINE的定义(尤其都已经看到MACHINE关键字了)。历尽周折,使用推理的方法终于找到了被新版本代码隐藏得很深的MACHINE宏!

关于MACHINE所“藏匿”的这个OBJECT_DECLARE_TYPE宏,在下回中做详细解析。

http://www.tj-hxxt.cn/news/41065.html

相关文章:

  • 开发手机网站步骤北京优化seo排名
  • 河北网诚网站建设网页制作在线生成
  • 南昌定制网站开发公司网络营销推广外包平台
  • 锡盟建设工程造价管理站网站360指数在线查询
  • 平台网站可以做第三方检测报告有名的seo外包公司
  • 做企业官网费用排名优化公司电话
  • 集团网站建设工作方案学电商出来一般干什么工作
  • 大良企业网站建设长沙本地推广
  • 建百度网站seo网络推广排名
  • 黄石网站制作公司百度竞价排名价格查询
  • 中国城乡建设投融资工作委员会网站在线seo
  • 专业足球网站建设企业网站seo服务
  • 怎样不让网站被收录网站优化包括哪些内容
  • 张家港早晨网站建设企业做推广有用吗
  • 天津做网站的公司有哪家沪指重上3000点
  • 阳江做网站营销策略从哪几个方面分析
  • 大连模板网站制作公司贵州二级站seo整站优化排名
  • 宁波网站建设哪里好百度竞价推广技巧
  • 南昌网站建设公司无线网络优化工程师
  • 怎样设计一个网站百度seo网站在线诊断
  • php做网站开发有什么框架googleplay安卓版下载
  • 请问聊城做网站线上营销培训
  • 百度收录是什么意思北京seo公司华网白帽
  • win7系统做网站服务器青岛seo网站推广
  • 建设银行网站怎么取消短信服务深圳sem竞价托管
  • 企业如何做好网站运营管理娱乐热搜榜今日排名
  • wordpress订阅地址windows优化软件排行
  • 020网站开发百度百科优化排名
  • 简历上作品展示网站链接怎么做亚马逊查关键词搜索量的工具
  • 做网站的宣传单素材google网站搜索