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

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

时间:2023-09-27 22:35:33浏览次数:44  
标签:set Apple cm object callback 源码 gpio property Qemu

一,前言

本节主要看stm32f4_discovery_board_init_callback函数,里面大概看明白了,主要是2个部分,一个是SDL的初始化,另外一个是mcu中各个模块中寄存器对象的属性添加及设置属性值。

二,分析

  1. Object *object_new(const char *typename)才会调用class_init和ti->instance_init
  2. 看到了set "hse-freq-hz"属性值,搜索"hse-freq-hz",看看是哪里进行属性add的? 答:关于MCU的实现是调用了Object *mcu = cm_object_new_mcu(machine, TYPE_STM32F407VG); 此函数里面会调用object_new. 所以就要搜索.name = TYPE_STM32F407VG,在mcus.c中拉到底就可以看到他的parent了。然后这个parent和他的父类注册的函数都要被调用。所以stm32_mcu_instance_init_callback中就有add "hse-freq-hz"属性。
  3. 关于memeory在哪里构造的对象? 答:cortexm_mcu_memory_regions_create_callback中看到关键字Flash,sram及他们的其实地址和size在object_initialize(mr, sizeof(*mr), TYPE_MEMORY_REGION);中调用了。 .name = TYPE_MEMORY_REGION,就会调用typeImp的memory_region_initfn函数去实现。里面的属性主要有3种,地址/优先级/大小。
  4. 但是addr这样的属性在哪里add的呢? 答:搜索"addr"居然有json文件出现。.svd_file_name = "STM32F40x-qemu.json",确实之前注册过qmp_schema_json是json解析规则表,qjson.c就是用这个解析规则表格式来进行了json数据解析。
  5. 通过搜索svd_get_peripheral_by_name,随意找到一个adc1.c。但是看起来TYPE_STM32_ADC没有人去初始化。但是我知道gpio应该被调用过的,所以搜索TYPE_STM32_GPIO,可以发现初始化过这个object。 Object *gpio = cm_object_new(parent, child_name, TYPE_STM32_GPIO); 主要是在stm32_mcu_realize_callback函数中调用的,这里面还创建了uart。通过此函数的最后的注释也看到可以再继续添加更多。
  6. GPIO在哪里添加的属性对象的? 答:stm32_gpio_create中把gpio的属性创建完成了。主要是cm_object_realize(gpio); 比如对象信息都从json文件获取
1. "name": "GPIOA",
"description": "General-purpose I/Os",
"groupName": "GPIO",
"baseAddress": "0x40020000",
"addressBlocks": [
{
"offset": "0x0",
"size": "0x400",
"usage": "registers"
}
  1. 在加属性的时候就会添加各种属性的callback函数,如下cm_property_get_uint64_ptr_callback和cm_property_set_uint64_ptr_callback就是不同类型的特别的回调函数。
1. void cm_object_property_add_uint64_callback(Object *obj, const char *name,
const uint64_t *v)
{
Error *local_err = NULL;
object_property_add(obj, name, "uint64",
cm_property_get_uint64_ptr_callback,
cm_property_set_uint64_ptr_callback, NULL, (void *) v, &local_err);
if (local_err) {
error_report("Adding property %s for %s failed: %s.", name,
object_get_typename(obj), error_get_pretty(local_err));
exit(1);
}
}
  1. GPIO是在哪里实现为属性设置值的? 答:gpio的reg的寄存器都当做一个object,实现就在stm32f40x_gpio_create_objects函数。主要调用关系如下
stm32f40x_gpio_create_objects
stm32_gpio_realize_callback
device_set_realized
property_set_bool
object_property_set
object_property_set_qobject
object_property_set_bool
cm_object_realize
stm32_gpio_create
create_gpio
stm32_mcu_realize_callback
cm_device_by_name_realize
stm32_mcus_realize_callback
device_set_realized
property_set_bool
object_property_set
object_property_set_qobject
object_property_set_bool
cm_object_realize
stm32f4_discovery_board_init_callback

三,小结

属性添加和设置的主要api在上一节已经详细分析过了,本节主要看了个大概的实现思路,仿真的STM32的MCU属性从json文件来,然后就是创建,而且创建的过程都是要找父类的object,确保全部创建完成再创建子类object。创建所表达的意思就是添加属性及设置属性值。之后模拟运行就是靠这些属性值来进行逻辑判断了。

标签:set,Apple,cm,object,callback,源码,gpio,property,Qemu
From: https://blog.51cto.com/u_16247275/7629931

相关文章

  • KBEngine服务端源码-分析
    目录后续会做更详细的更新classTask子类图示classTimerHandler子类图示Entity实体类--继承自(publicscript::ScriptObject)声明部分宏BASE_SCRIPT_HREADER宏SCRIPT_HREADER_BASE宏 ENTITY_HEADER实现部分宏ENTITY_METHOD_DECLARE_BEGIN宏ENTITY_CPP_IMPL宏SCRIPT_METHOD_DE......
  • Python桌面可视化+自动登录学校教务系统(含源码!!!)
    前言:通过Python爬虫与tkinter模块实现桌面快捷自动化登录教务系统效果展示:整体思路:创建主界面,在界面中手动输入用户名和密码,点击登录后自动打开浏览器,截取整个页面,裁剪出登录页面中的图片验证码并保存到本地,对验证码图片进行处理,识别出验证码。将用户名,密码,验证码一同自动输入到对......
  • YOLOV5源码解读-general.py、detect.py
    YOLOV5.4,可能与之前版本不一样,但大同小异general.py1#YOLOv5generalutils23importglob4importlogging5importmath6importos7importplatform8importrandom9importre10importsubprocess11importtime12frompathlibimpo......
  • WEBRTC回声消除-AECM算法源码解析之参数解析
    一概述 webrtc针对回声问题一共开源了3种回声消除算法,分别为aec,aecm,以及aec3,其中aec是最早期的版本,在后续的更新中aec3的出现代替了aec在webrtc中的地位,而aecm主要是针对计算能力较弱的移动端或是嵌入式设备而开发的,但同时也带来了它自己的劣势;本文主要介绍AECM算法的计......
  • DeepLabV3+网络模型与源码解读
    源码链接:链接:https://pan.baidu.com/s/1GkUM9WiGpzUHuFgBe1t2rA提取码:57zrorhttps://github.com/VainF/DeepLabV3Plus-Pytorch以上两个连接是一样的,只不过百度盘中的包含voc数据。 环境安装:先装pytorch&torchvision,再安装requirments.txt其他依赖 报错处理:#error:ra......
  • 手机直播源码,Android 简单的弹框
    手机直播源码,Android简单的弹框   privatestaticString[]items=newString[]{      "拍照",      "从相册中选择",  }; AlertDialog.Builderbuilder=newAlertDialog.Builder(MainActivity.this)        .setTitle(......
  • 基于web房屋租售管理系统-计算机毕业设计源码+LW文档
    摘 要当今,在这个信息化的时代,人们的生活越来越便利。因此如果运用java技术建设房屋租售管理系统系统使其与互联网有效的结合起来,实现房屋租售管理系统系统的网络化,为学校师生乃至社会提供更为全面、便捷的服务。根据本系统的研究现状和发展方向,首先系统从需求分析、结构设计、数......
  • UE4 源码剖析
    第一章对象系统1.1对象系统-类型系统构建(UClass,UFunction,UEnum,UStruct,FProperty)1.2对象系统-RPC函数1.3对象系统-Replicates属性1.4对象系统-Blueprint1.5对象系统-GC第2章网络模块2.1网络模块-跨平台的Socket2.x网络模块-CharacterMove......
  • MMU复习--Apple的学习笔记
    一,前言以前看过MMU,因为这是单片机OS中没有的,当时我记得理解的不是很清晰,包括MMU中哪部分是硬件的,哪部分是软件的都没有太搞清楚。由于看了一个自己写linux操作系统的视频,里面有介绍MMU,且演示了虚拟地址和物理地址的转换,此时我才深刻的理解了,所以在看qemu源码的内存管理前,我先复习......
  • MMU复习--Apple的学习笔记
    一,前言以前看过MMU,因为这是单片机OS中没有的,当时我记得理解的不是很清晰,包括MMU中哪部分是硬件的,哪部分是软件的都没有太搞清楚。由于看了一个自己写linux操作系统的视频,里面有介绍MMU,且演示了虚拟地址和物理地址的转换,此时我才深刻的理解了,所以在看qemu源码的内存管理前,我先复习下......