驅動流程分析
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硬件模塊的初始化設置,以及電源管理相關的注冊等工作;
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
嵌入式
+關注
關注
5086文章
19141瀏覽量
305971 -
驅動
+關注
關注
12文章
1844瀏覽量
85345 -
Linux
+關注
關注
87文章
11314瀏覽量
209783 -
gic
+關注
關注
0文章
14瀏覽量
6277
發布評論請先 登錄
相關推薦
ARM之中斷GIC分析
1.“站的高尿的遠” GIC為中斷控制器,不要和ARM core的中斷搞混了,這些中斷都是連接到ARM core的IRQ或者FIQ上的?! ∫私鈇rm中斷系統,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
mfc程序執行流程小結,MFC程序的執行順序
摘要:本文章主要以MFC程序的執行流程、執行順序等執行過程的剖析做出的結論,下面一起來看看原文的具體介紹。
發表于 12-08 15:48
?9569次閱讀
小電阻器對治理電網GIC的效果分析
地磁感應電流(geomagnetically induced currents,GIC)引起變壓器半波飽和對電力系統的安全運行產生不利影響,甚至引發大面積停電事故。為了有效治理GIC對大規模電力系統
發表于 01-04 17:03
?7次下載
GIC是什么意思 GIC硬件原理
GIC硬件原理 ARM公司提供了一個通用的中斷控制器 GIC(Generic Interrupt Controller) , GIC 的版本包括 V1 ~ V4 ,由于本人使用的SoC中的中斷控制器
GIC驅動設備信息添加
字段:用于與具體的驅動來進行匹配,比如圖片中arm, gic-400,可以根據這個名字去匹配對應的驅動程序; interrupt-cells字段:用于指定編碼一個中斷源所需要的單元個數,這個值為3
GIC-600的組件是如何連接的
為了適應大規模的SoC設計,GIC-600被設計成分布式IP。 所謂分布式,GIC-600由幾種組件構成,每個組件可以跟其它相關模塊在物理設計上擺放在一起,并與其擁有共同的電源域;組件之間通過片上網
GIC-600的內部結構組件
接下來看看每個組件。 ? 首先是distributor,一個SoC只有一個。 ?它的組件只能與distributor通信。所以,可以看出,distributor是GIC-600中的核心,其作用是收集
gic和ARM Core的連接
? ?nVIRQ: 虛擬普通中斷 ? ?nVFIQ: 虛擬快速中斷 (2)gicv3和ARM Core的連接 gicv3 AXI-stream協議 ? ?gic stream協議,是基于AXI-stream協議
bootm命令的執行流程
Bootm命令用來從memory啟動內核,bootm命令的執行流程如下圖所示。 在串口終端輸入bootm命令后,執行do_bootm函數來完成相應的功能。Do_bootm函數首先
評論