LINUX.ORG.RU
ФорумAdmin

Ещё раз о получении информации из udev

 ,


0

1

Копаясь в man udevadm, я пока только один способ нашёл получать из udev информацию о присвоении имён файлам устройств. Допустим у меня есть wifi-карта Atheros AR9285, я:

  1. даю команду «lspci» и в её выводе примечаю строку
    02:00.0 Network controller: Atheros Communications Inc. AR9285 Wireless Network Adapter (PCI-Express) (rev 01)
  2. запоминаю номер слота
  3. даю команду «udevadm info --export-db | less»
  4. делаю в просмотровщике поиск по строке «02:00.0»
  5. сдвигаюсь на несколько строк ниже найденной и нахожу там искомое:
    INTERFACE=wlan0


Как сделать проще?

★★★★★

/sys/dev/*/*

anonymous
()
Ответ на: комментарий от sunny1983

name - имя файла устройства в /dev/, созданного udev'ом. path - путь к «устройству» в /sys/.

Пример: /sbin/udevadm info --path=/class/net/eth0 --query=all

AITap ★★★★★
()
Ответ на: комментарий от AITap

Не пойдёт. Предполагается, что запрашивающий о eth0 ничего не знает и узнать - как раз конечная задача.

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

Учитывая, что в /sys нет «имён» PCI-устройств (они хранятся в /usr/share/misc/pci.ids), первый шаг будет обязательным. Придумать способ просмотреть под-устройства данного устройства в udevadm мне не удалось, так что нужно либо смотреть список файлов в /sys/bus/pci/devices/<slot>/net/, либо парсить grep -Fl <slot> /sys/class/net/*/device/uevent.

AITap ★★★★★
()
Ответ на: комментарий от sunny1983

Всё ОК, там есть ID_MODEL_FROM_DATABASE, который и есть то, что выводит lcpci.

selivan ★★★
()

Неужели сложная задача оказалась? А как-нибудь её решить не копаясь в /sys, а, например, анализировав отработанные события udev можно?

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от AITap

Что неправильно в скрипте:

#!/bin/sh
if [ -f "`find /sys/devices -name 0000:"$1"`/net" ]
then
  ls `find /sys/devices -name 0000:"$1"`/net
else
  echo "No net interfaces on this slot"
fi

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

.../net - это директория, а Вы пытаетесь проверить, является ли она файлом (-f). Правильнее - -d (на директорию) или -e (на существование).

find'ом можно не пользоваться, pci-слот всё равно будет в /sys/bus/pci/devices/.

AITap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.