LINUX.ORG.RU

Как по имени устройства узнать, каким драйвером оно было создано?

 , ,


0

3

Доброго времени суток!

Собственно, сабж.

В /dev есть два устройства с именами media0, media1. Хочется понять, что это за устройства и кем были созданы.

Суть проблемы в том, что есть две конфигурации платы (device tree+bitstream). В одной конфигурации эти устройства создаются и все ок, а в другой - нет. Вот и хочется понять, из-за чего лыжи не едут.

Конфиги ядра одинаковые.

★★

Хочется понять, что это за устройства и кем были созданы.

Можно попробовать

udevadm info -q all -a /dev/media0

Kosyak ★★★★ ()

мб получится посмотреть major numer (например, через ls -l) и далее в { /proc/devices, /proc/misc} узнать что ему соответствует.

mashina ★★★★★ ()

Может не самый правильный совет, но не пробовал грепать сорсы ядра по слову media в директории с драйверами устройств?

Pythagoras ★★ ()
$ ls -la /dev/loop0 
brw-rw---- 1 root disk 7, 0 тра 12 00:28 /dev/loop0

# cat /proc/devices | grep ' 7 '
  7 vcs
  7 loop

# ls -la /sys/dev/block/7\:0

# ls -la /sys/dev/block/7\:0/

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

Печально. Пердолить ручками sysfs. Начать с major/minor номеров.

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

А если обратная задача - в /dev устройства нет, в /proc/devices оно есть, а в /sys/dev/char/ нет директории с номером этого устройства? В dmesg-е не было никаких ошибок.

aido ★★ ()
Последнее исправление: aido (всего исправлений: 1)
Ответ на: комментарий от aido

Сложно сказать, скорее всего это означает что драйвер есть - он загружен, а вот самого устройства нету.

Незнаю вкурсе вы или нет но как работают файловые устройства в линксе (/dev/*) - в принципе путь к утсройству и его имя с точки зрения ядра/драйвера роли не играют. Dev файл можно создать с любым именем и в любом каталоге (mknod). Основыне его характеристики:

Type - (char/block), Major number, Minor Number

Type и Major Number - это посути адресация драйвера в ядре линукса (когда какаято программа пытается открыть/писать/читать из dev файла ядро ищет драйвер в таблице символьных или блочных устройств по его Major number), а вот Minor Number на поиск драйвера не влияет - он просто передается как аргумент в функции драйвера.

Далее какая последовательность действий системы в целом:

1) Драйвер (модуль) регистрирует новый тип устройств в системе (type + major number).
2) Ядро вносит записи в таблицу ПОТДЕРЖИВАЕМЫХ устройств и вы видете это в файле /proc/devices
3) Драйвер находит устройство в системе (или получает сигнал что нужно создать новое виртуальное устройство)
4) Драйвер регестрирует это устройство в списке устройств (назначает минорный номер) - вы видете это в /sys/dev/char или /sys/dev/block
5) Юзер спейс утелита udev получает нотификацию о том что в ядре зарегестрировано новое устройство и создает соотвецтвующий файл в каталоге /dev

Некоторые сторонние драйвера могут не потдерживать пункт 3,4 в таком случае вы можете просто руками (mknod) создать нужное устройство и попытатся его использовать.

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

Моя прога начала сходить с ума:

# ./init.sh
:: hdmii_present = 0
ERROR(../src/mediactl_helper.c:246) : Entity '400d0000.hls' not found

# dmesg | grep -i hls
xilinx-hls 400d0000.hls: device xlnx,v-hls-sobel found

То есть ядро видит это устройство, а прога - нет. grep по всем исходникам примера не дал определения функции, давшей ошибку. То есть, у xilinx в одном из TRD черный ящик.

И я теперь совсем не понимаю, как это править.

P.S.: сегодня с утра пришел - устройства нашлись. что произошло за ночь - хз))

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