我想获取分配给我的网卡的中断信息。除了 /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。
干杯