LINUX.ORG.RU

Меняется порядок плат видеозахвата PCIe

 ,


0

2

Добрый день. Вот такой вопрос. Может быть кто сталкивался с таким багом, как изменчивость нумераций устройств с перезагрузкой компа? (надеюсь, правильно сформулировал)) Например. Есть 2 платы захвата. Одноканальная и четырех канальная. Естественно, в девайсах они как video0 video1 video2 video3 video4. video0 - одноканальная, остальные видео - четырехканальная. С какой-то перезагрузкой вдруг одноканальная становится video4. Ну а одноканальная video0 и тд. В Windows я такого ни разу не наблюдал. Кто знает, как это пофиксить? Заранее благодарен.

Может быть кто сталкивался с таким багом,

К сожалению авторы линукса считают что это не баг. Аналогичная чушь с названиями жёстких дисков. Где-то в 4.х ядрах сломали вроде и сказали что так и должно быть. Все способы починить - костыли, ну тебе уже предложили варианты.

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

Нет, сломали. Что за убогая логика вообще? Внедрение новых фич - не оправдание к поломке чего-то ещё. Кто так делает - просто убогие и бесстыдные криворуки, которые выдумали нелепый аргумент в якобы защиту дефектной работы своего поделия, вместо того чтобы этот дефект исправлять. И не надо делать вид, что мультитред с предсказуемыми именами (и не просто предсказуемыми, а полностью совпадающими с результатом сингл-тред инициализации) сделать было невозможно. И дальнейшие оправдания и фейковые аргументы придумывать тоже не нужно.

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

И не надо делать вид, что мультитред с предсказуемыми именами сделать было невозможно.

Как по мне проблема в названиях вида videoN. Вот допустим есть две карты захвата PCI1: video0, video1 и PCI2: video2, video3. А теперь берем и заменям карту PCI1 на ту где уже три видеовхода, получается PCI1: video0, video1, video4. А теперь если представить еще пару таким перестановок.

Можно сделать названия иерархического вида pci1-video0, pci1-video1, pci2-video0. Но тогда при перетыкании в другой pci имя уже будет принадлежать другому устройству.

Можно сделать по серийнику или подобному uuid1-vide0, uuid1-video1, uuid2-video0. Тогда можно перетыкать по разным pci но имя всегда будет принадлежать нужному устройству.

Еще можно сделать привязку videoN к определенному устройству по серийнику и больше никому его не выдавать даже если устройство больше не используется. Минус только в том что нумерация не будет непрерывной.

А можно все способы воплотить одновременно просто для каждого свой путь использовать.

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

теперь берем и заменям карту PCI1 на ту где уже три видеовхода, получается PCI1: video0, video1, video4. А теперь если представить еще пару таким перестановок.

Всмысле заменяем? Не выключая комп? Если выключить - она станет 0 1 2, а вторая сдвинется на 3 4 - это нормально, у нас изменилось железо и от этого сползли чьи-то номера. Ненормально, когда ты ребутаешь комп 10 раз без изменений конфигурации, и каждый раз не знаешь какие у них получатся номера.

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

Ненормально, когда ты ребутаешь комп 10 раз без изменений конфигурации, и каждый раз не знаешь какие у них получатся номера.

Там просто загрузка и инициализация драйверов парралельно идет, кто первый успел того и тапки. Либо замедлить драйверы загружая их строго по порядку. Либо реализовать хотя-бы частичную привязку устройств к путям, что видимо никто делать не хочет.

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

Нет, именно поломали. Ничто не мешало сделать механизм на уровне ядра, который сначала в режиме мультипотока запускает дрова и обнаруживают все устройства, выдавая им временные имена, которые не видны в пространстве пользователя, а потом проходит по списку и уже переименовывает их по порядку. Просто решили забить болт и переложить это на udev.

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

Нет, можно просто юзерспейсные имена им назначать не сразу а после того как всё нашлось. Да, возможно пришлось бы доработать что-то в ядре, если к этим индексам там что-то гвоздями прибито, но они решили просто забить.

firkax ★★★★★
()

Посмотри параметры:

udevadm info -a -p $(udevadm info -q path -n /dev/video0)

Сделай файл /etc/udev/rules.d/99-video-cameras.rules

SUBSYSTEM=="video4linux", ATTRS{serial}=="12345678", SYMLINK+="camera_front"
SUBSYSTEM=="video4linux", ATTRS{serial}=="87654321", SYMLINK+="camera_rear"
SUBSYSTEM=="video4linux", ATTRS{serial}=="11223344", SYMLINK+="camera_left"
SUBSYSTEM=="video4linux", ATTRS{serial}=="44332211", SYMLINK+="camera_right"
sudo udevadm control --reload-rules
sudo udevadm trigger
steemandlinux ★★★★★
()
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от pfg

Конечно сломали.
Буквально вчера вставил в сервер pcie sata контроллер.
Включаю. Не поднимается сетевуха.
Оказалось она была enp1s0. С контроллером стала enp2s0. Пришлось менять имя в 20-ти местах. Такие дела.
Это сервер маленький. А если б куча всего подвинулось была бы вобще беда.

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

Нет, сломали.

Нет, не сломали. Тебе не гарантировали порядок. Это ты сам докумекал и прибил гвоздями свой говноскрипты к не стабильному интерфейсу.

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

и один херъ, порядок поменяется при изменении набора оборудования. а что делать с меняемым в горячую.
хотя это все тут уже объяснили :)

надо бы предложить в номер впиховывать хеш от UID номеров железок :)
как тебе такая мысль.

для носителей, к примеру вместо /dev/sd***, это уже сделано в виде поддержки подключения по UID/пути железок, UID файловых систем, именам и прочим стабильным атрибутам в подразделах /dev/disk/by-****** в нем аккурат есть всё вышесказаное :)

интересно у когонить в /etc/fstab остались /dev/sd** ??

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

По линкам и подключаю. Или что то неправильно сделал? SUBSYSTEM==«video4linux», KERNEL==«video0», SYMLINK+=«Channel_1_UHD» SUBSYSTEM==«video4linux», KERNEL==«video1», SYMLINK+=«Channel_1_FHD» SUBSYSTEM==«video4linux», KERNEL==«video2», SYMLINK+=«Channel_2_FHD» SUBSYSTEM==«video4linux», KERNEL==«video3», SYMLINK+=«Channel_3_FHD» SUBSYSTEM==«video4linux», KERNEL==«video4», SYMLINK+=«Channel_4_FHD»

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

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

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

udevadm info -a -p $(udevadm info -q path -n /dev/video0)

Почему не просто udevadm info -a -n /dev/video0

grep -i ‘serial’

ATTRS{vendor}
ATTRS{device}

Но у него у всех ATTR{index}=="0", то есть у многоканального возможно перемешивание канаовю

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

Почему не просто udevadm info -a -n /dev/video0

Я тормоз потому что :)

Но у него у всех ATTR{index}==«0», то есть у многоканального возможно перемешивание канаовю

Да, в этом и проблема…

steemandlinux ★★★★★
()