如何以及何时初始化此irq的值

时间:2013-11-07 14:16:50

标签: c linux-kernel arm linux-device-driver

我正在arch/arm/kernel/perf_event.c中查看Linux内核的部分源代码,并尝试了解request_irq如何在此处进行设置:

static int armpmu_reserve_hardware(struct arm_pmu *armpmu)
 {
    int err;
    struct platform_device *pmu_device = armpmu->plat_device;

    if (!pmu_device)
            return -ENODEV;

    pm_runtime_get_sync(&pmu_device->dev);
    err = armpmu->request_irq(armpmu, armpmu_dispatch_irq);
    if (err) {
            armpmu_release_hardware(armpmu);
            return err;
    }

    return 0;

}

现在request_irq的第一个参数的值应该是一个整数。现在我无法弄清楚整数值是如何被初始化的。

此处还提供了struct pmu

http://lxr.free-electrons.com/source/arch/arm/include/asm/pmu.h

我们在内核设备树文件中定义了PMU表示

 pmu {
     compatible = "arm,cortex-a15-pmu";
     interrupts = <0 20 0xf01 0 21 0xf01 0 22 0xf01 0 23 0xf01 >;
  };

现在,我相信其中一条中断线是20,21,22,23,但现在肯定如何?

1 个答案:

答案 0 :(得分:1)

根据this code request_id需要struct arm_pmu*