LINUX.ORG.RU

Как уникально идентифицировать из юзерспейса одинаковые PCI устройства?

 , , , ,


1

4

Которые воткнуты в количестве нескольких штук в один комп и у которых нет серийных номеров? По крайней мере, в выхлопе udevadm info -a их нет.

★★★★★

А что за устройства, если не секрет? Для чего? И нет, я не знаю ответа на твой вопрос, но интересно было бы знать.

Deleted ()

Смотря что ты понимаешь под «уникальной идентификацией». Вообще у каждого устройства есть адрес на шине, но, естественно, он может смениться после выключения.

tailgunner ★★★★★ ()

Значит по адресу на шине, вот драйвер как выставляет /dev/device0 ... /dev/deviceN? У device0 probe выполнилось первым. Видимо это зависит от адреса на шине.

tailgunner говорит после ребута может измениться - например добавится еще какое-то устройство - но ведь порядок будет прежним? Для данного типа одинаковых устройств ведь ничего не изменится, если только не добавится такое же еще?

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

после ребута может измениться - например добавится еще какое-то устройство - но ведь порядок будет прежним?

У меня даже в этом нет уверенности с архитектурой PCIe. И ТС не сказал, как он относится к ситуации «пользователь переткнул устройства в другие разъемы».

tailgunner ★★★★★ ()

На перетыкания плат и рестарты пофиг, нужно различать в процессе работы. Но есть ещё другой нюанс, девайсы представляют собой четыре независимых PCI устройства на одной плате, общающихся с компом через мост PCIe-PCI на этой же плате. Нужно как-то группировать эти 4 устройства по платам.

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

Тогда адресов на шине должно хватить. Номер моста в них входит.

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

На перетыкания плат и рестарты пофиг, нужно различать в процессе работы. Но есть ещё другой нюанс, девайсы представляют собой четыре независимых PCI устройства на одной плате, общающихся с компом через мост PCIe-PCI на этой же плате. Нужно как-то группировать эти 4 устройства по платам.

Можно топологию читать (парсить lspci -t или читать самому из config space).

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

У меня даже в этом нет уверенности с архитектурой PCIe.

Если на момент нумерации все девайсы были на местах, то получат такие же ID.

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

В общем, да, иначе многое сломается. Но были у нас устройства, в которых я не был уверен. Может, я ошибаюсь, а может, там была кривая реализация PCIe.

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

Когда-то Линус сам говорил, что после перезагрузки может поменяться. Звукачи хотели прописывать в конфигах карту для наименьших задержек, он сказал, мол, нифига так не выйдет. В результате стали прописывать по имени модуля. Но если карты однотипные, то не прокатит. Так и осталось непонятно, как же поступать в таком случае. Дальше не следил, может всё-таки поменялось, но rtirq так и использует имена модулей, не пцишные номера карт.

Deleted ()

Серийные номера у устройств надеюсь есть и они разные. Вот по ним и составляй правила udev. Подробности в гугле

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

В общем, да, иначе многое сломается. Но были у нас устройства, в которых я не был уверен. Может, я ошибаюсь, а может, там была кривая реализация PCIe.

Сложно такое представить, но, в порядке фантазии, если за бриджем сидят несколько устройств, и там есть какие-то нестабильности с link train, то бридж, наверное, может нумерацию устройств наверх отдавать в том порядке, в каком они натренировались, что (порядок) раз на раз не приходится.

mv ★★★★★ ()

«По крайней мере, в выхлопе udevadm info -a» В выхлопе «udevadm info -a» ничего нет, потому что не указан путь к устройству. ☺ Сначала надо найти устройство в файловой системе «/sys», например, в «/sys/devices/pci...».

beroal ()
Ответ на: комментарий от mv

Сложно такое представить, но, в порядке фантазии

В порядке моей фантазии - там прошивки поднимались с некоторой разбежкой по времени.

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

Сложно такое представить, но, в порядке фантазии, если за бриджем сидят несколько устройств, и там есть какие-то нестабильности с link train, то бридж, наверное, может нумерацию устройств наверх отдавать в том порядке, в каком они натренировались, что (порядок) раз на раз не приходится

у мну тож такая мысель, устройство может протупить, однако кажется у PCI-E таймауты довольно жесткие (100 мс) и только если устройство не ответило - тогда идем к следующему

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от tailgunner

В порядке моей фантазии - там прошивки поднимались с некоторой разбежкой по времени.

По стандарту, устройству даётся 200 ms на инициализацию, потом начинается линк трейн. Бридж/свитч всем сразу линки трейнит.

mv ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

у мну тож такая мысель, устройство может протупить, однако кажется у PCI-E таймауты довольно жесткие (100 мс) и только если устройство не ответило - тогда идем к следующему

Инициализация на одном уровне топологии параллельно идёт.

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

А, ну ясно. Многие корки PCI-E для FPGA это поддерживают. Но видимо у автора темы не своё устройство, а покупное. Если DSN есть в имеющихся, то это хороший способ его идентифицировать.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от Harald

потому что не указан путь к устройству. ☺

у меня очевидно указан

Так устройства видны в файловой системе или нет?

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