/proc/interrupts 的替代方案

/proc/interrupts 的替代方案

我想获取分配给我的网卡的中断信息。除了 /proc/interrupts 之外还有其他方法吗?

答案1

有两个通用的内核信息接口(系统调用除外),它们以文件系统的形式实现。这两个文件系统是 /proc 和 /sys。sys 比 proc 更有条理,也更新,但不那么用户友好。所以它对程序员来说更好一点,可以避免解析。

如果您想要来自 sys 文件系统的信息(lspci 解析(请参阅 输出的 somefile strace -o somefile lspci)):

$ lspci | grep -i network
00:19.0 Ethernet controller: Intel Corporation 82566DC Gigabit Network Connection (rev 02)
$ cat /sys/devices/pci0000:00/0000:00:19.0/irq
2299

注意两个命令之间的 00:19 关系。irq 文件返回的数字将与相关设备的 /proc/interrupts 的第一列相同。

如果你想要更多关于 sys 文件系统的信息,请查看内核源代码中包含的文档,例如/usr/src/linux-source-2.6.27/Documentation/filesystems

更新:

有没有办法将输出与接口名称连接起来?

当然,如果你仔细研究 sys,你会发现有很多符号链接指向 sys 中的其他位置。例如,在 /sys/class/net 中:

[kbrandt@kb: /sys/class/net] ls -l
lrwxrwxrwx 1 root root 0 2009-11-02 11:01 eth0 -> ../../devices/pci0000:00/0000:00:19.0/net/eth0
lrwxrwxrwx 1 root root 0 2009-11-02 11:01 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx 1 root root 0 2009-11-02 11:01 pan0 -> ../../devices/virtual/net/pan0
lrwxrwxrwx 1 root root 0 2009-11-02 11:01 vmnet1 -> ../../devices/virtual/net/vmnet1
lrwxrwxrwx 1 root root 0 2009-11-02 11:01 vmnet8 -> ../../devices/virtual/net/vmnet8

因此,要获取 eth0 的 irq,您只需:

cat /sys/class/net/eth0/../../irq

答案2

lspci -v 将显示分配给您的网卡的 IRQ。

干杯

相关内容