首页 > 编程语言 >qemu源码分析(9)--Apple的学习笔记

qemu源码分析(9)--Apple的学习笔记

时间:2023-09-30 18:32:38浏览次数:43  
标签:Apple -- peripheral object name 源码 gpio reg 属性

一, 前言

本章节主要是再把GPIO创建的内容进行细化,搞明白gpio是否一个object,还和其它什么内容有关。

二,分析

  GPIOA,GPIOB等包括他们的寄存器都是object。

qemu源码分析(9)--Apple的学习笔记_gpio

  1. 每个对象都会再object_new的时候分配空间,比如GPIOA和GPIOB都有自己的空间。创建GPIOA,主要包括创建goio-peripheral类型及在container中追加gpioA的属性。创建GPIOB,主要包括创建goio-peripheral类型及在container中追加gpioB的属性。 type的name名字叫TYPE_STM32_GPIO,也就是stm32:gpio-peripheral,会通过Object_new进行创建,其实就是从gpio.c中的TypeImpl中copy数据且执行钩子函数。

qemu源码分析(9)--Apple的学习笔记_qemu_02

Parent是container的object也就是root object。

qemu源码分析(9)--Apple的学习笔记_gpio_03

cm_object_property_add_child之前分析过,就是在属性成员中保存子类object。 这里就是把GPIOA作为container object的属性。

2.prop属性有自己的name,也有type。这里GPIOA就是属性的name。type是字符串,其实保留的就是一个object,因为object都是从typeImpl的数据中copy来的。

qemu源码分析(9)--Apple的学习笔记_qemu_04

Object的class下第一个就是Type,也就是TypeImpl类型,它的第一个就是name。 struct ObjectClass { /< private >/ Type type; GSList *interfaces; … } 所以这里属性保存的就是这个type name。将来用来根据name来查找typeImpl对应的object中的内容用的。

  1. svd_add_peripheral_properties_and_children函数中还会创建Object,这是寄存器接口的type,reg名字是从json文件中获取的。 Object *reg = cm_object_new(obj, regi_name, TYPE_PERIPHERAL_REGISTER); svd_add_peripheral_register_properties_and_children(reg, regi); 看这2个关键语句是否和创建GPIO一样呢!只不过reg的属性是挂在peripheral-register对象下的,不是container对象下。

qemu源码分析(9)--Apple的学习笔记_qemu_05

qemu源码分析(9)--Apple的学习笔记_qemu_06

  1. 另外一个关键的就是realize都是将属性进行实现,也是比较关键的回调函数。
  2. 接着大概了解下这些GPIO设置的属性值如何用。
gpio_led_irq_handler
qemu_set_irq
cm_irq_set
stm32_gpio_set_odr_irqs
stm32_gpio_update_odr_and_idr
stm32f4_gpio_bsrr_post_write_callback
peripheral_register_write_callback
peripheral_write_callback
memory_region_write_accessor
access_with_adjusted_size
memory_region_dispatch_write
io_writex
io_writew
helper_le_stw_mmu
code_gen_buffer
cpu_tb_exec
cpu_loop_exec_tb
cpu_exec
tcg_cpu_exec
qemu_tcg_cpu_thread_fn
libpthread.so.0!start_thread
libc.so.6!clone

从这个虚拟cpu的线程调用函数来看,基本就是cpu线程执行,然后检查到有操作io口就调用io_writew,接着就是地址转换找到映射的reg,然后就是实现reg操作,接着的函数名字为什么是有个irq暂时不清楚,但是我理解这应该不是中断,这些irq调用后就是为led的SDL2设置一个event,然后LED就可以变绿色了。 关于这块的具体内容比较多,将来会进行分解学习。

三,小结

本节详细分析了下GPIO的实现,GPIOA,GPIOB包括他们的寄存器其实都是一个object对象,而且他们的reg也创建了object及分配了内存空间。而GPIOA,B等对象的属性是连接在container的object的属性下的一个个子node。每一个Reg对象属性是挂载在reg objet下的进行了链表连接。

标签:Apple,--,peripheral,object,name,源码,gpio,reg,属性
From: https://blog.51cto.com/u_16247275/7664864

相关文章

  • 接口测试
    接口测试分层自动化测试UI自动化测试:主要通过模拟用户在界面的操作完成测试Unit层自动化测试:主要验证程序代码的正确性和语法的正确性Service层测试:主要测试模块之间的调用关系的正确性接口接口全称为应用编程接口,简称为API接口的本质是程序员开发的函数或方法,是完成一定功能的代......
  • 智能安全帽-GPS定位摄像头视频语音通话功能设计方案
    智能安全帽是一种集成了多种传感器和通信模块的创新设备。它内部包含陀螺仪、高度传感器、脱帽传感器、心率传感器、4G/5G通讯、GNSS定位、可选环境传感器以及语音播报系统等。这些功能使得智能安全帽能够实现人员定位、脱帽检测、生命体征监测、一键呼救、跌落监测、电子围栏......
  • 线程池要设置多大
    https://cloud.tencent.com/developer/article/1605149线程数是怎么设置的呢?服务器的配置、服务器资源的预算和任务自身的特性。具体来说就是服务器有多少CPU、多少内存、IO支持的最大QPS是多少,任务主要执行的是计算、IO还是混合操作。任务中是否包含数据库连接等的稀缺资源。......
  • 最全端口号收集,常用端口收集整理
    常用的服务端口号服务端口号协议描述echo7tcpecho7udpdiscard9tcp......
  • java: 用百度API读取增值税发票信息
     /***encoding:utf-8*版权所有2023涂聚文有限公司*许可信息查看:https://github.com/Baidu-AIP/java-sdk/blob/master/src/main/java/com/baidu/aip/http/AipRequest.java*描述:*#Author:geovindu,GeovinDu涂聚文.*#IDE:IntelliJIDEA202......
  • 跨域问题
    跨域(Cross-Origin)指的是在Web开发中,浏览器的同源策略(Same-OriginPolicy)下,一个网页的JavaScript代码试图访问不同源(不同域、不同协议或不同端口)的资源时所发生的情况。浏览器的同源策略:当一个网页上的JavaScript代码尝试访问不同源的资源时,浏览器会在请求头中添加一个Origin字段......
  • 商人过河问题数学建模
     问题描述三名商人各带–个随从乘船渡河,一只小船只能容纳二人,由他们自己划行.随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货,商人们怎样才能安全渡河呢? 问题建模考虑用深度优先搜索解决此问题,提前记录在船承载量为2时候,所有可行的移动状态,以及所有安全的商......
  • BEM 命名规范
    来源:ChatGPT,prompt"什么是BEM命名规范?",September30,2023,OpenAI,https://chat.openai.com.BEM(BlockElementModifier)是一种命名规范和方法,用于编写可维护且可重用的前端代码,特别是用于编写CSS和HTML。BEM的核心思想是将界面分解为可重用的组件,以及定义这些组件......
  • ST方案一个MCU带动两个无刷电机驱动的原生逻辑
    TIM1TIM8两个高级定时器,设置TIM2为启动计数触发源,触发时钟同步,并且设置上,两者错开相。核心思路是错开电流采样和处理的时刻1/*disablemainTIMcountertoensure2*asynchronousstartbyTIM2trigger*/3LL_TIM_DisableCounter(TIMx);45LL_T......
  • numpy -- 数据分析三剑客
    博客地址:https://www.cnblogs.com/zylyehuo/NumPy(NumericalPython)是Python语言中做科学计算的基础库。重在于数值计算,也是大部分Python科学计算库的基础,多用于在大型、多维数组上执行的数值运算。开发环境anaconda集成环境:集成好了数据分析和机器学习中所需要的全......