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

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

时间:2023-09-07 22:34:34浏览次数:32  
标签:Apple parent Qemu TypeImpl 源码 ti type class name

一,前言

开始qemu源码学习之路。从简书切换到此,真的是一键导入,太快了。

二,从某个点开始分析源码

Type_new函数就是把TypeInfo内容复制到TypeImpl。

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


1.总的来说type_register_internal就是创建一个TypeImpl类,然后添加到hash表中。

static TypeImpl *type_register_internal(const TypeInfo *info)
{
 TypeImpl *ti;
 ti = type_new(info);
 type_table_add(ti);
 return ti;
}

2.可以看到ti->name为key,ti为value.

static void type_table_add(TypeImpl *ti)
{
 assert(!enumerating_types);
 g_hash_table_insert(type_table_get(), (void *)ti->name, ti);
}

3.关于父类继承是通过parent_type进行的连接。type_get_by_name通过hash表的name找到TypeImpl,然后子类指向父类的TypeImpl,其实是在type_initialize函数中处理的type_get_parent。

static TypeImpl *type_get_parent(TypeImpl *type)
{
 if (!type->parent_type && type->parent) {
 type->parent_type = type_get_by_name(type->parent);
 g_assert(type->parent_type != NULL);
 }
return type->parent_type;
}

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

这样来看,在代码中,其实就是通过name进行了父类关系连接。

4.type_initialize是一个关键函数,利用了归递方式,这是类似图形HMI编程常用的方法,比如litegul和LVGL都有类似的归递代码来处理图层,从底层绘制到顶层。当前qemu中是从父类开始,先复制父类的class到子类,然后一次进行type实例中class的初始化。

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

5.type_initialize还将Objectclass和TypeImpl进行了挂钩。

ti->class->type = ti;

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

6. MachineClass *mc = MACHINE_CLASS(oc);我理解直接指向class等于直接引用。

7. stm32f4_discovery_board_class_init_callback函数的关键路径。

居然是find_default_mechine后进行foreach循环处理之前添加到hash表的TypeImpl对象,然后进行归递初始化mc。

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

8. mc这个临时变量有什么用,居然赋值了init函数名字,那么我就在这个函数内打断点。

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

看上去来源是machine_class

9. 在select_machine函数中,也就是qemu启动传入的参数里面包括board名字,然后就找到了machine_class.

MachineClass *mc = find_machine(board_name);
 if (mc == NULL) {
 cm_board_help_func("?");
 } else {
 machine_class = mc;
}

刚刚说的mc临时参数,原来是find_machine的返回值,而且还给了变量machine_class,所以找到了关系。只是里面用了g_hash_table_foreach等api,不熟悉,仅猜测功能。

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

三,小结

这次主要是了解了TypeImpl的功能及2个初始化的路径。还发现了glib库函数,虽然看名字就猜到功能,百度一下也能知道的更清晰,但是这次是学习源码,所以glib库我不能停留在看的阶段,需要动手练习下,放入下一轮吧~


标签:Apple,parent,Qemu,TypeImpl,源码,ti,type,class,name
From: https://blog.51cto.com/u_16247275/7402306

相关文章

  • 课程教学质量评价系统设计与实现-计算机毕业设计源码+LW文档
    1.选题背景、意义教学质量评价是依照教学标准和数学目标、对教师教学能力进行价值评判,是教学活动进行的重要步骤之一。教师的教学质量越高,代表其教学能力越强。因此,需要建立十分合理的评价标准来对教师教学质量进行评判。现如今国内外教育评价标准多种多样,国外学者侧重于将学生学......
  • 基于web的宿舍管理系统-计算机毕业设计源码+LW文档
    一、研究的背景意义高校作为教书育人的场所,利用信息技术改变落后的教育方式是很有必要的事情。基于web的宿舍管理系统可以解决目前高校高校宿舍管理的问题,提高教师工作效率,快速的完成高校高校宿舍管理相关事宜,及时发布宿舍信息,使得学生可以第一时间查询到自己的宿舍信息。学生宿舍......
  • [SpringSecurity5.6.2源码分析四]:WebSecurityConfiguration
    WebSecurityConfiguration的重点是通过WebSecurity创建FilterChainProxy• 先分析内部的方法1、elegatingApplicationListener• 看名字就能看出来注册了一个委托类型的监听器publicclassWebSecurityConfigurationimplementsImportAware,BeanClassLoaderAware{............
  • 韬客时代卷轴模式系统开发介绍和部分核心源码
    韬客时代是一种卷轴模式系统。什么是卷轴模式呢?新用户注册,先送你一部分积分,该积分用于兑换一个初始任务,俗称卷轴!卷轴模式的赚钱的原理是,你用积分兑换初级任务包,完成卷轴任务之后,你可以获得更多的积分,然后复投,达到一定数量后可以兑换更高级的任务包,任务包越高级每次获得的积分也就越......
  • 抖音小程序源码成品开发
      抖音上的流量现在大部分人都知道,目前用户量达到了8亿多,商家都想在抖音字节平台上开发一个小程序。拥有了这样的小程序就意味着拥有了大把的流量,抖音小程序也属于是新型的渠道,和其他的小程序一样,轻便,高效,无需下载,深受用户的高度关注。  抖音小程序源码如何是完整版的可以......
  • map、sync.map、concurrent-map适用场景与源码解析
    最近一直加班,无论工作日还是周末,虽然每天很忙但总感觉空空的,很少有时间停下来思考与总结。项目中各种甩锅,最后最苦逼的还是落到了研发的头上,文档编写、环境部署、问题排查虐得一遍又一遍。事情杂乱,研发效率超级低,不知道何是是个头呀背景在go中,map是最常用的集合之一。其底层key存......
  • 【错误记录】exe4j 打包程序无法设置 jar 包依赖的问题 ( 将源码 和 依赖库打包到同一
    文章目录一、问题描述二、解决方案一、问题描述在【错误记录】IntelliJIDEA导出可执行jar包执行报错(java.lang.ClassNotFoundException|打包时没有选择依赖库)博客中遇到java.lang.ClassNotFoundException:com.microsoft.sqlserver.jdbc.SQLServerDrivera......
  • Uchardet C++源码编译步骤 文本编码检测命令行工具 Command line
    从官网 https://www.freedesktop.org/wiki/Software/uchardet/下载源码 https://www.freedesktop.org/software/uchardet/releases/=====================================================================================下载编译工具:Cmake和mingw64https://cmake.org......
  • Spring源码分析(十)Spring中Bean的生命周期(下)
    在上篇文章中,写了bean的生命周期的简单介绍,主要介绍了整个生命周期中的初始化阶段以及基于容器启动停止时LifeCycleBean的回调机制。另外对bean的销毁过程也做了简单介绍,但是对于整个bean的生命周期,这还只是一小部分,在这篇文章中,我将继续完成剩下部分的内容,同时对之前的内容做一次......
  • 一套成熟的实验室信息管理系统源码,集前处理、检验、报告、质控、统计分析、两癌等模块
    一套成熟的实验室信息管理系统,集前处理、检验、报告、质控、统计分析、两癌等模块为一体的实验室信息管理系统。在整个检验过程中实时对检验结果监控、评估、分析、统计并对操作规程进行严格规范。它的开发和应用将加快检验科管理的统一化、网络化、标准化的进程。技术架构:ASP.NET......