我想知道如何 /proc/interrupts
保持最新状态?
是只irq
探测了驱动程序还是包含irqs
系统中所有可能的驱动程序的列表?
正如您在内核源代码中看到的,它显示了系统所有可能的 irq。
在source/fs/proc/interrupts.c:39中,一个序列操作被初始化为返回与系统中存在的中断一样多的元素/proc/interrupts
。
在source/kernel/irq/proc.c:479中,我们可以看到每个中断的计数器都是通过kstat_irqs_cpu(irq, cpu)
.
这意味着中断计数信息在不同的计数器中更新,每个 cpu 一个。计数器在读取 proc 文件时求和。这是内核中的常见模式。它可以防止对全局计数器的争用。
/proc 下的所有文件都是伪文件,这意味着其中不存在实际数据。
当您访问 proc fs 下的任何文件时,将调用与该特定 proc 文件链接的 proc 方法,并且 proc 方法访问某些相关的内核数据结构并动态生成数据,这些数据可以读取和显示。proc 文件中的数据通常用于显示系统的状态信息,或设备驱动程序的状态。
proc fs一般是作为驱动的一部分实现的,在驱动代码中加入proc和seq fs层,不过proc也被内核使用,一般用来显示系统的状态信息。由于没有通用proc 文件之间的层次结构或分类,与较新的 sysfs 文件系统相比,它们很少使用。
要知道信息是如何产生的,你必须研究实现的proc层。fs/proc/interrupts.c
本网站简要介绍了其中一些方法。