Я хочу получить информацию о прерываниях, назначенных моим сетевым картам. Есть ли другой способ, кроме / proc / interrupts?
Есть два общих интерфейса к информации ядра (кроме системных вызовов), и они реализованы как файловые системы. Эти две файловые системы - это / proc и / sys. sys немного более организован, чем proc и новее, но не так удобен для пользователя. Так что это немного лучше для программистов и избежать синтаксического анализа.
Если вам нужна информация из файловой системы sys (которую анализирует lspci (см. Какой-нибудь файл, который выводится 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
Итак, чтобы получить irq для eth0, вы можете просто:
cat /sys/class/net/eth0/../../irq
lspci -v покажет вам, какое IRQ назначено вашей сетевой карте (ам).
Ура