我正在浏览部分 Linux 内核的源代码,arch/arm/kernel/perf_event.c
并试图了解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 驱动的,但现在确定如何?