0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GIC驱动的执行流程是什么

麦辣鸡腿堡 来源:LoyenWang 作者:LoyenWang 2023-09-28 15:09 次阅读

驱动流程分析

GIC驱动的执行流程如下图所示:

图片

  • 首先需要了解一下链接脚本vmlinux.lds,脚本中定义了一个__irqchip_of_table段,该段用于存放中断控制器信息,用于最终来匹配设备;
  • 在GIC驱动程序中,使用IRQCHIP_DECLARE宏来声明结构信息,包括compatible字段和回调函数,该宏会将这个结构放置到__irqchip_of_table字段中;
  • 在内核启动初始化中断的函数中,of_irq_init函数会去查找设备节点信息,该函数的传入参数就是__irqchip_of_table段,由于IRQCHIP_DECLARE已经将信息填充好了,of_irq_init函数会根据arm,gic-400去查找对应的设备节点,并获取设备的信息。中断控制器也存在级联的情况,of_irq_init函数中也处理了这种情况;
  • or_irq_init函数中,最终会回调IRQCHIP_DECLARE声明的回调函数,也就是gic_of_init,而这个函数就是GIC驱动的初始化入口函数了;
  • GIC的工作,本质上是由中断信号来驱动,因此驱动本身的工作就是完成各类信息的初始化,注册好相应的回调函数,以便能在信号到来之时去执行;
  • set_smp_process_call设置__smp_cross_call函数指向gic_raise_softirq,本质上就是通过软件来触发GIC的SGI中断,用于核间交互;
  • cpuhp_setup_state_nocalls函数,设置好CPU进行热插拔时GIC的回调函数,以便在CPU热插拔时做相应处理;
  • set_handle_irq函数的设置很关键,它将全局函数指针handle_arch_irq指向了gic_handle_irq,而处理器在进入中断异常时,会跳转到handle_arch_irq执行,所以,可以认为它就是中断处理的入口函数了;
  • 驱动中完成了各类函数的注册,此外还完成了irq_chip, irq_domain等结构体的初始化,这些结构在下文会进一步分析;
  • 最后,完成GIC硬件模块的初始化设置,以及电源管理相关的注册等工作;
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5068

    文章

    19008

    浏览量

    302986
  • 驱动
    +关注

    关注

    12

    文章

    1824

    浏览量

    85169
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208873
  • gic
    gic
    +关注

    关注

    0

    文章

    14

    浏览量

    6265
收藏 人收藏

    评论

    相关推荐

    U-boot的执行流程

    本文主要讲述了U-boot的执行流程
    发表于 07-14 16:58 668次阅读
    U-boot的<b class='flag-5'>执行</b><b class='flag-5'>流程</b>

    ARM之中断GIC分析

      1.“站的高尿的远”  GIC为中断控制器,不要和ARM core的中断搞混了,这些中断都是连接到ARM core的IRQ或者FIQ上的。  要了解arm中断系统,GIC绝对不容错过,好先付
    发表于 11-26 13:50

    ARM GIC(二)之中断术语的定义

    ARM在GIC中,对于中断,定义了如下的一些术语。一、中断状态对于每一个中断而言,有以下4个状态:◾inactive:中断处于无效状态◾pending:中断处于有效状态,但是cpu没有响应该中断
    发表于 04-06 10:15

    ARM GIC电源管理使用手册指南

    gic中的redistributor进行connect,这样将来gic才可以将中断发送给core。connection的流程如下所示:GICR_WAKER寄存器上电流程,行为描述
    发表于 05-27 16:41

    一文解析ARM GIC中断线映射与GICD寄存器配置

    activate到deactivation均为中断处理函数工作内容。上几篇博文已经详细介绍了GIC 架构基础,稍微有些抽象。接下来尝试从源码和寄存器手册分解TF-A GIC V3驱动源码,进一步理解arm
    发表于 05-27 17:24

    基于GIC的物联网的应用方案

    本文档内容介绍了基于GIC的物联网的应用方案,供参阅。
    发表于 09-18 15:46 0次下载
    基于<b class='flag-5'>GIC</b>的物联网的应用方案

    mfc程序执行流程小结,MFC程序的执行顺序

     摘要:本文章主要以MFC程序的执行流程执行顺序等执行过程的剖析做出的结论,下面一起来看看原文的具体介绍。
    发表于 12-08 15:48 9508次阅读
    mfc程序<b class='flag-5'>执行</b><b class='flag-5'>流程</b>小结,MFC程序的<b class='flag-5'>执行</b>顺序

    小电阻器对治理电网GIC的效果分析

    地磁感应电流(geomagnetically induced currents,GIC)引起变压器半波饱和对电力系统的安全运行产生不利影响,甚至引发大面积停电事故。为了有效治理GIC对大规模电力系统
    发表于 01-04 17:03 7次下载
    小电阻器对治理电网<b class='flag-5'>GIC</b>的效果分析

    GIC是什么意思 GIC硬件原理

    GIC硬件原理 ARM公司提供了一个通用的中断控制器 GIC(Generic Interrupt Controller) , GIC 的版本包括 V1 ~ V4 ,由于本人使用的SoC中的中断控制器
    的头像 发表于 09-28 14:58 1846次阅读
    <b class='flag-5'>GIC</b>是什么意思 <b class='flag-5'>GIC</b>硬件原理

    GIC驱动设备信息添加

    字段:用于与具体的驱动来进行匹配,比如图片中arm, gic-400,可以根据这个名字去匹配对应的驱动程序; interrupt-cells字段:用于指定编码一个中断源所需要的单元个数,这个值为3
    的头像 发表于 09-28 15:03 382次阅读
    <b class='flag-5'>GIC</b><b class='flag-5'>驱动</b>设备信息添加

    Linux GIC驱动数据结构分析

    数据结构分析 先来张图: GIC驱动中,使用 struct gic_chip_data 结构体来描述GIC控制器的信息,整个驱动都是围绕着该
    的头像 发表于 09-28 15:18 534次阅读
    Linux <b class='flag-5'>GIC</b><b class='flag-5'>驱动</b>数据结构分析

    GIC-600的组件是如何连接的

    为了适应大规模的SoC设计,GIC-600被设计成分布式IP。 所谓分布式,GIC-600由几种组件构成,每个组件可以跟其它相关模块在物理设计上摆放在一起,并与其拥有共同的电源域;组件之间通过片上网
    的头像 发表于 11-07 17:19 664次阅读
    <b class='flag-5'>GIC</b>-600的组件是如何连接的

    GIC-600的内部结构组件

    接下来看看每个组件。 • 首先是distributor,一个SoC只有一个。 •它的组件只能与distributor通信。所以,可以看出,distributor是GIC-600中的核心,其作用是收集
    的头像 发表于 11-07 17:29 578次阅读
    <b class='flag-5'>GIC</b>-600的内部结构组件

    gic和ARM Core的连接

    • ◾nVIRQ: 虚拟普通中断 • ◾nVFIQ: 虚拟快速中断 (2)gicv3和ARM Core的连接 gicv3 AXI-stream协议 • ◾gic stream协议,是基于AXI-stream协议
    的头像 发表于 11-07 18:07 589次阅读
    <b class='flag-5'>gic</b>和ARM Core的连接

    bootm命令的执行流程

    Bootm命令用来从memory启动内核,bootm命令的执行流程如下图所示。 在串口终端输入bootm命令后,执行do_bootm函数来完成相应的功能。Do_bootm函数首先
    的头像 发表于 12-04 17:33 1095次阅读
    bootm命令的<b class='flag-5'>执行</b><b class='flag-5'>流程</b>