arm gic中断在linux内核软件中的处理

本文详细介绍了Linux内核如何处理ARM GIC中断控制器,包括内核调用栈、GIC-v中断控制器定义、Gic设备树定义、Gic-v2寄存器地址、GIC控制器初始化流程、中断响应机制、中断屏蔽与取消屏蔽、中断结束信号发送及中断触发类型的设置。此外,还提到了GIC安全扩展特性。
摘要由CSDN通过智能技术生成

内核调用栈log

[    0.000000] Call trace:

[    0.000000]  dump_backtrace+0x0/0x174

[    0.000000]  show_stack+0x28/0x3c

[    0.000000]  dump_stack+0xb4/0x110

[    0.000000]  __irq_domain_add+0x84/0x2f4

[    0.000000]  gic_init_bases+0x70/0x240

[    0.000000]  __gic_init_bases+0x1d4/0x200

[    0.000000]  gic_of_init+0x2dc/0x3c8

[    0.000000]  of_irq_init+0x1c8/0x370

[    0.000000]  irqchip_init+0x20/0x44

[    0.000000]  init_IRQ+0x168/0x198

[    0.000000]  start_kernel+0x2f8/0x4b8

[    0.000000]  __irq_domain_add+0x84/0x2f4

[    0.000000]  gicv2m_allocate_domains+0x60/0x100

[    0.000000]  gicv2m_init+0x17c/0x208

[    0.000000]  gic_of_init+0x384/0x3c8

[    0.000000]  of_irq_init+0x1c8/0x370

[    0.000000]  irqchip_init+0x20/0x44

[    0.000000]  init_IRQ+0x168/0x198

[    0.000000]  start_kernel+0x2f8/0x4b8

[    0.000000]  __irq_domain_add+0x84/0x2f4

[    0.000000]  irq_domain_create_hierarchy+0x68/0x90

[    0.000000]  msi_create_irq_domain+0x54/0x160

[    0.000000]  pci_msi_create_irq_domain+0x60/0x164

[    0.000000]  gicv2m_allocate_domains+0x98/0x100

[    0.000000]  gicv2m_init+0x17c/0x208

[    0.000000]  gic_of_init+0x384/0x3c8

[    0.000000]  of_irq_init+0x1c8/0x370

[    0.000000]  irqchip_init+0x20/0x44

[    0.000000]  init_IRQ+0x168/0x198

[    0.000000]  start_kernel+0x2f8/0x4b8

[    0.000000]  __irq_domain_add+0x84/0x2f4

[    0.000000]  irq_domain_create_hierarchy+0x68/0x90

[    0.000000]  msi_create_irq_domain+0x54/0x160

[    0.000000]  platform_msi_create_irq_domain+0x44/0x160

[    0.000000]  gicv2m_allocate_domains+0xb0/0x100

[    0.000000]  gicv2m_init+0x17c/0x208

[    0.000000]  gic_of_init+0x384/0x3c8

[    0.000000]  of_irq_init+0x1c8/0x370

[    0.000000]  irqchip_init+0x20/0x44

[    0.000000]  init_IRQ+0x168/0x198

[    0.000000]  start_kernel+0x2f8/0x4b8

[   16.236672]  __irq_domain_add+0x84/0x2f4

[   16.240597]  irq_domain_add_simple+0x58/0xc8

[   16.244870]  gpiochip_add_data_with_key+0x88c/0xd20

[   16.249751]  devm_gpiochip_add_data+0x5c/0xb0

[   16.254111]  pl061_probe+0x190/0x1f0

[   16.257688]  amba_probe+0xd8/0x18c

[   16.261093]  really_probe+0xec/0x4a0

[   16.264669]  driver_probe_device+0xec/0x134

[   16.268854]  device_driver_attach+0xc0/0xd0

[   16.273039]  __driver_attach+0xb0/0x180

[   16.276876]  bus_for_each_dev+0x84/0xe0

[   16.280712]  driver_attach+0x34/0x40

[   16.284288]  bus_add_driver+0x14c/0x240

[   16.288125]  driver_register+0x7c/0x124

[   16.291962]  amba_driver_register+0x58/0x6c

[   16.296148]  pl061_gpio_init+0x20/0x28

[   16.299898]  do_one_initcall+0x54/0x2d0

[   16.303736]  kernel_init_freeable+0x1b0/0x25c

[   16.308095]  kernel_init+0x1c/0x114

[   16.311584]  ret_from_fork+0x10/0x18

GIC-v中断控制器定义

  • 0 -  15:           SGI,软件定义的中断
  • 16 - 31:          PPI,一个cpu核私有的中断,比较timer中断
  • 32 - nr_irqs:  SPI,所有外设用的中断

Gic设备树定义

arch/arm64/boot/dts/arm/juno-base.dtsi

gic: interrupt-controller@2c010000 {

                              compatible = "arm,gic-400", "arm,cortex-a15-gic";

                              reg = <0x0 0x2c010000 0 0x1000>,  //GIC DIST

                                    <0x0 0x2c02f000 0 0x2000>,  //GIC CPU

                                    <0x0 0x2c04f000 0 0x2000>,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值