Что значит функция горячего подключения. Горячее подключение. Правила подключения HDMI оборудования

Существуют два различных способа рассматривать горячее подключение. Ядро рассматривает горячее подключение как взаимодействие между оборудованием, ядром и драйвером ядра. Пользователи рассматривают горячее подключение как взаимодействие между ядром и пользовательским пространством в рамках программы, называемой /sbin/hotplug . Эта программа вызывается ядром, когда оно хочет уведомить пространство пользователя, что в ядре только что случился какой-то тип события горячего подключения.

Динамические устройства

Наиболее частое использование значение термина "горячее подключение" происходит при обсуждении того факта, что большинство всех компьютерных систем теперь может обрабатывать устройства, которые появляются или исчезают, когда система включена. Это очень отличается от компьютерных систем лишь несколько лет назад, когда программисты знали, что им необходимо сканировать все устройства только во время загрузки и им никогда не приходилось беспокоиться о своих устройствах, исчезающих при отключении питания для всей машины. Теперь, с появлением USB, CardBus PCMCIA, IEEE1394 и PCI контроллеров горячего подключения ядру Linux необходимо иметь способность работать надежно, независимо от того, какое оборудование добавляется или удаляется из системы. Это ложится дополнительным бременем на автора драйвера устройства, поскольку теперь они должны всегда работать с устройством, внезапно вырываемым из подчинения без предварительного уведомления.

Каждый тип шины обрабатывает потерю устройства по-разному. Например, когда PCI, CardBus или PCMCIA устройство удаляется из системы, это обычно происходит до того, как драйвер был уведомлен об этом действии через свою функцию remove . Прежде, чем это случается, все чтения из PCI шины возвращают все биты установленными. Это означает, что драйверам необходимо всегда проверять значение данных, которые они прочитали из шины PCI и быть в состоянии должным образом обработать значение 0xff .

Пример этого можно увидеть в драйвере drivers/usb/host/ehci-hcd.c , который представляет собой PCI драйвер для платы контроллера USB 2.0 (High-Speed). Он имеет следующий код в своём основном цикле установления связи для обнаружения, что плата контроллера была удалена из системы:

result = readl(ptr);

if (result == ~(u32)0) /* карта удалена */

Return -ENODEV;

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

Устройства горячего подключения не ограничены только традиционными устройствами, такими как мышь, клавиатуры и сетевые карты. Есть много систем, которые теперь поддерживают удаление и добавление целиком процессоров и карт памяти. К счастью, ядро Linux должным образом обрабатывает добавление и удаление таких основных "системных" устройств, так что отдельные драйверы устройств не должны обращать внимание на эти вещи.

Утилита /sbin/hotplug

Как упоминалось ранее в этой главе, когда устройство добавляется или удаляется из системы, генерируется "событие горячего подключения". Это означает, что ядро вызывает программу пользовательского пространства /sbin/hotplug . Эта программа, как правило, очень небольшой скрипт bash, который просто передаёт выполнение списку других программ, которые находятся в дереве каталога /etc/hotplug.d/ . Для большинства дистрибутивов Linux этот скрипт выглядит следующим образом:

DIR="/etc/hotplug.d"

for I in "${DIR}/$1/"*.hotplug "${DIR}/"default/*.hotplug ; do

If [ -f $I ]; then

Test -x $I && $I $1 ;

done

exit 1

Другими словами, скрипт ищет все программы имеющие суффикс .hotplug , которые могут быть заинтересованы в этом событии и вызывает их, передавая им ряд различных переменных окружения, которые были установлены ядром. Более подробная информация о работе скрипта /sbin/hotplug можно найти в комментариях к программе и на странице руководства hotplug(8) .

Как упоминалось ранее, /sbin/hotplug вызывается при создании или уничтожении kobject-а. Программа горячего подключения вызывается с одним аргументом командной строки, представляющим название для данного события. Основное ядро и определённая подсистема также участвуют в установке набора переменных окружения (смотрите ниже) с информацией о том, что только что произошло. Эти переменные используются в программах горячего подключения, чтобы определить, что только что произошло в ядре, и есть ли какое-то специальное действие, которое должно иметь место.

Аргумент командной строки, переданный в /sbin/hotplug , является именем, связанным с этим событием горячего подключения, как определено kset-ом, назначенным для kobject. Это имя может быть установлено вызовов функции name , которая является частью структуры hotplug_ops kset-а, описанной ранее в этой главе; если эта функция отсутствует или никогда не вызывалась, используется название самого kset-а.

Переменными окружения по умолчанию, которые всегда устанавливаются для программы /sbin/hotplug , являются:

ACTION

Строка add (добавить) или remove (удалить), в зависимости от того, был ли данный объект только что создан или уничтожен.

DEVPATH

Путь к каталогу в файловой системе sysfs, который указывает на kobject, который в настоящее время либо создан, либо уничтожен. Обратите внимание, что точка монтирования файловой системы sysfs не добавлена к этому пути, так что её определение предоставлено сделать программе пользовательского пространства.

SEQNUM

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

SUBSYSTEM

Та же строка, передаваемая в качестве аргумента командной строки, как описано выше.

Ряд различных шинных подсистем для вызова /sbin/hotplug добавляют свои собственные переменные окружения, когда связанное с шиной устройство было добавлено или удалено из системы. Они делают это в своём обратном вызове горячего подключения, указанном в struct kset_hotplug_ops , назначенной этой шине (как описано в разделе "Операции горячего подключения"). Это позволяет пользовательскому пространству иметь возможность автоматической загрузки необходимых модулей, которые могут быть необходимы для управления устройством, которое было обнаружено на шине. Вот список разных типов шин и переменных окружения, которые они добавляют для вызова /sbin/hotplug .

IEEE1394 (FireWire)

Все устройства на шине IEEE1394, также известной как FireWire, имеют параметр имени для /sbin/hotplug и переменная окружения SUBSYSTEM устанавливается в значение ieee1394 . Подсистема Ieee1394 также всегда добавляет следующие четыре переменные окружения:

VENDOR_ID

24-х разрядный идентификатор поставщика для устройства IEEE1394.

MODEL_ID

24-х разрядный идентификатор модели для устройства IEEE1394.

GUID

64-х разрядный GUID для этого устройства.

SPECIFIER_ID

24-х разрядное значение, определяющее владельца спецификации протокола для этого устройства

VERSION

Значение, которое определяет версию спецификации протокола для этого устройства.

Сеть

Все сетевые устройства создают сообщение горячего подключения, когда устройство зарегистрировано или разрегистрировано в ядре. Вызов /sbin/hotplug имеет параметр имени и переменная окружения SUBSYSTEM устанавливается в значение net и добавляет только следующую переменную окружения:

INTERFACE

Имя интерфейса, который был зарегистрирован или разрегистрирован из ядра. Примерами его являются lo и eth0 .

PCI

Любые устройства на шине PCI имеют параметр имени и переменная окружения SUBSYSTEM устанавливается в значение pci . Подсистема PCI также всегда добавляет следующие четыре переменные окружения:

PCI_CLASS

Номер PCI класса для данного устройства, в шестнадцатеричном виде.

PCI_ID

Идентификаторы поставщика и устройства PCI для данного устройства, в шестнадцатеричном виде, объединенные в формате vendor:device .

PCI_SUBSYS_ID

Идентификаторы поставщика и подсистемы PCI, объединенные в формате subsys_vendor:subsys_device .

PCI_SLOT_NAME

"Имя" слота PCI, которое даётся устройству ядром в формате domain:bus:slot:function . Примером может быть 0000:00:0d.0 .

Ввод

Для всех устройств ввода (мышь, клавиатуры, джойстики и так далее), сообщение горячего подключения генерируется, когда устройство добавляется и удаляется из ядра. Параметр /sbin/hotplug и переменная окружения SUBSYSTEM устанавливаются в значение input . Подсистема ввода также всегда добавляет следующие переменные окружения:

PRODUCT

Многозначная строка, перечисляющая значения в шестнадцатеричном виде, без ведущих нулей, в формате bustype:vendor:product:version .

Следующие переменные окружения могут присутствовать, если устройство их поддерживает:

NAME

Название устройства ввода, как задано устройством.

PHYS

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

Все они происходят из дескриптора устройства ввода и устанавливаются в соответствующие значения, если данное устройство ввода его поддерживает.

USB

Любые устройства на шине USB имеют параметр имени и переменная окружения SUBSYSTEM устанавливается в значение usb . Подсистема USB также всегда добавляет следующие переменные окружения:

PRODUCT

Строка в формате idVendor/idProduct/bcdDevice

TYPE

Строка в формате bDeviceClass/bDeviceSubClass/bDeviceProtocol , которая определяет эти зависимые от устройства USB поля.

Если поле bDeviceClass установлено в 0, также устанавливается следующая переменная окружения:

INTERFACE

Строка в формате bInterfaceClass/bInterfaceSubClass/bInterfaceProtocol , которая определяет эти зависимые от устройства USB поля.

Если выбрана опция сборки ядра CONFIG_USB_DEVICEFS , который выбирает, что файловая система usbfs будет собрана в ядре, также устанавливается следующая переменная окружения:

DEVICE

Строка, которая показывает, где находится устройство в файловой системе usbfs . Эта строка имеет формат /proc/bus/usb/USB_BUS_NUMBER/ SB_DEVICE_NUMBER , в котором USB_BUS_NUMBER является трёхзначным номером шины USB, к которой подключено устройство, а USB_DEVICE_NUMBER является трёхзначным номером, который был назначен ядром для этого USB устройства.

SCSI

Все SCSI устройства создают событие горячего подключения, когда SCSI устройство создано или удалено из ядра. Вызов /sbin/hotplug имеет параметр имени и переменная окружения SUBSYSTEM установлена в значение scsi для каждого SCSI устройства, которое добавляется или удаляется из системы. Никакие дополнительные переменные окружения не добавляться системой SCSI, но она упоминается здесь потому, что существует специальный SCSI скрипт в пространстве пользователя, который может определить, что SCSI драйверы (дисковода, ленточного накопителя, обычный и т.д.) должны быть загружены для указанного устройства SCSI.

Установочные станции ноутбуков

Если поддерживающая Plug-and-Play установочная (док) станция ноутбука добавлена или удалена из работающей системы Linux (путём включения ноутбука в станцию, или его удаления), создаётся событие горячего подключения. Вызов /sbin/hotplug имеет параметр имени и переменная окружения SUBSYSTEM установлена в значение dock . Никакие другие переменные окружения не установлены.

S/390 и zSeries

На архитектуре S/390, архитектура канальной шины поддерживает широкий спектр оборудования, каждое из которых генерирует события /sbin/hotplug , когда они добавляются или удаляются из виртуальной системы Linux. Все эти устройства имеют для /sbin/hotplug параметр имени и переменная окружения SUBSYSTEM установлена в значение dasd . Никакие другие переменные окружения не установлены.

Использование /sbin/hotplug

Теперь, когда ядро Linux вызывает /sbin/hotplug для каждого добавляемого или удаляемого из ядра устройства, чтобы воспользоваться этим, в пользовательском пространстве были созданы ряд очень полезных инструментов. Двумя из наиболее популярных инструментов являются скрипты Linux горячего подключения и udev .

Скрипты горячего подключения Linux

Скрипты горячего подключения Linux начались в качестве самого первого пользователя вызова /sbin/hotplug . Эти скрипты смотрят на разные переменные окружения, которые ядро устанавливает для описание устройства, которое было только что обнаружено и затем пытаются найти модуль ядра, который соответствует этому устройству.

Как уже говорилось ранее, когда драйвер использует макрос MODULE_DEVICE_TABLE , программа, depmod , принимает эту информацию и создаёт файлы, находящиеся в /lib/module/KERNEL_VERSION/modules.*map . Знак * является различием, в зависимости от типа шины, которую поддерживает драйвер. В настоящее время файлы модульной карты создаются для драйверов, которые работают с устройствами с поддержкой подсистем PCI, USB, IEEE1394, INPUT, ISAPNP и CCW.

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

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

udev

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

devfs имеет в своём дизайне некоторые весьма существенные недостатки. Она требует от каждого драйвера устройства быть измененным для её поддержки и она требует от драйвера устройства указать имя и местоположение в дереве /dev , где он помещён. Она также не надлежащим образом обрабатывает динамические старшие и младшие номера, заставляя политику именования устройств принадлежать ядру, а не пространству пользователя. Разработчики ядра Linux действительно ненавидят иметь политику в ядре и так как политика именования devfs не следует спецификации Linux Standard Base, это действительно их беспокоит.

С тех пор, как ядро Linux начало устанавливаться на огромных серверах, многие пользователи столкнулись с проблемой, как управлять очень большим количеством устройств. Массивы дисковых накопителей из более 10.000 уникальных устройств представляют очень сложную задачу обеспечения того, чтобы каждый диск всегда был проименован тем же точным именем, где бы он ни был помещен в дисковом массиве или когда он был обнаружен ядром. Эта та же проблема, от которой страдают пользователи настольных компьютеров, пытающиеся подключить два USB принтера к своей системе и затем понимающие, что они не имели возможности обеспечить, чтобы принтер, известный как /dev/lpt0 , не был бы изменён и отнесён к другому принтеру в случае перезагрузки системы.

Таким образом, был создан udev . Он опирается на всю информацию устройства, экспортируемую в пользовательское пространство через sysfs и на уведомление через /sbin/hotplug , что устройство было добавлено или удалено. Политические решения, такие, как какое имя дать устройству, могут быть указаны в пространстве пользователя, вне ядра. Это гарантирует, что политика именования удалена из ядра и позволяет большую степень гибкости при именовании каждого устройства.

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

Всё, что драйверу устройства необходимо сделать, чтобы udev правильно с ним работал, является обеспечение того, чтобы любые старшие и младшие номера, присвоенные устройству, управляемому драйвером, экспортировались в пользовательское пространство через sysfs. Для любого драйвера, который использует подсистему для присвоения ему старшего и младшего номера, это уже сделано подсистемой и драйвер не должен делать никакой работы. Примерами подсистем, которые делают это, являются подсистемы: tty, misc, usb, input, scsi, block, i2c, network и frame buffer. Если ваш драйвер самостоятельно обрабатывает получение старшего и младшего номера через вызов функции cdev_init или устаревшей функции register_chrdev , драйвер должен быть изменён, чтобы udev работал с ним должным образом.

udev ищет в дереве /class/ в sysfs файл с именем dev , чтобы определить, какой старший и младший номер присвоен данному устройству, когда оно вызывается ядром через интерфейс /sbin/hotplug . Драйверу устройства просто необходимо создать такой файл для каждого устройства, которым он управляет. Как правило, интерфейс class_simple - самый простой способ это сделать.

Как уже упоминалось в разделе "Интерфейс class_simple" , первым шагом в использовании интерфейса class_simple является создание struct class_simple с помощью вызова функции class_simple_create :

static struct class_simple *foo_class;

foo_class = class_simple_create(THIS_MODULE, "foo");

if (IS_ERR(foo_class)) {

Printk(KERN_ERR "Error creating foo class.\n");

Goto error;

Этот код создаёт каталог в sysfs в /sys/class/foo .

Всякий раз, когда драйвер находит новое устройство и вы присваиваете ему младший номер, как описано в Главе 3 , драйвер должен вызывать функцию class_simple_device_add :

class_simple_device_add(foo_class, MKDEV(FOO_MAJOR, minor), NULL, "foo%d", minor);

Этот код вызывает создание в /sys/class/foo поддиректории, названной fooN , где N - младший номер для этого устройства. В этом каталоге создаётся один файл, dev , и это именно то, что необходимо udev , чтобы создать узел устройства для вашего устройства. Когда ваш драйвер освобождается от устройства и вы отказываетесь от младшего номера, который был за ним закреплён, для удаления записи в sysfs для этого устройства необходим вызов class_simple_device_remove :

class_simple_device_remove(MKDEV(FOO_MAJOR, minor));

Позже, когда весь ваш драйвер выключается, для удаления класса, который вы первоначально создали вызовом class_simple_create , является необходимым вызов class_simple_destroy :

class_simple_destroy(foo_class);

Файл dev , который создаётся вызовом class_simple_device_add , состоит из старшего и младшего номера, разделенных символом : . Если ваш драйвер не хочет использовать интерфейс class_simple , потому что вы хотите предоставить для подсистемы другие файлы внутри каталога класса, используйте функцию print_dev_t для правильного формата старшего и младшего номера для каждого устройства.

Выгорание HDMI интерфейса

20.03.2017

admin

Частенько приходится объяснять клиентам, что устройства с HDMI интерфейсом не следует подключать на «горячую». Кому-то удается объяснить это при продаже или установке такого оборудования, а тем, кому повезло меньше, только после его поломки.

Сегодня хочу вам рассказать о тонкостях подключения HDMI оборудования.

Терминология

Термин «Горячее подключение» (англ. HotPlug) - означает коммутацию (отключение или подключение) электронного оборудования во время его работы без отключения электропитания .

Применительно к компьютерам существует схожий термин «Горячая замена» , означающий отключение/подключение/замену компонентов системы, опять-таки, без предварительного обесточивания.

Подключать оборудование и компоненты «на горячую» крайне не рекомендуется, а говоря о HDMI оборудовании и вовсе строго воспрещается!

Интерфейсы устройств, поврежденные при «горячем подключении», называют сожженными или сгоревшими , а их внутренние компоненты – пробитыми или горелыми .

Обратный термин - «Холодное подключение» (Холодная замена) , то есть все (пере) подключения производятся после отключения питания устройств и снятия напряжения (остаточного потенциала).

Несмотря на то, что многие пользователи не утруждают себя отключением устройств из розетки при коммутации, тем не менее, общепринятая практика и предписания правил безопасности рекомендуют осуществлять любую коммутацию именно «на холодную»! Возможно, кто-то захочет возразить и укажет на спецификации ряда интерфейсов или инструкции к некоторым устройствам, где черным по белому говорится о возможности «горячего подключения». Однако, применительно к HDMI оборудованию это может очень плохо закончиться…

Причины выгорания HDMI интерфейсов

К сожалению, HDMI интерфейс крайне чувствителен к всевозможным электрическим разрядам и при «горячем подключении», с высокой долей вероятности, можно сжечь HDMI порт или чип телевизора, монитора, видеокарты или любого другого HDMI устройства.

Из-за чего же может сгореть устройство с HDMI интерфейсом при подключении «на горячую»?

Дело в том, что электрические разряды постоянно накапливаются на одежде и человеческом теле (статическое электричество). Эти разряды при подключении одного устройства к другому попадают в разъёмы, и являются причиной повреждения оборудования. Второй причиной повреждения HDMI при подключении «на горячую» является наличие на корпусах устройств достаточно высоких потенциалов (порядка 100 вольт). В момент соединения устройств происходит выравнивание потенциалов (разряд) в следствии чего и происходит повреждение оборудования.

К несчастью, данная проблема известна с самого начала появления HDMI интерфейса и является следствием оптимизированной схемотехники и общей дешевизны комплектующих. И, что не мало огорчает, все эти недостатки будут свойственны и новым версиям интерфейса.

Абсолютно все устройства с HDMI интерфейсом абсолютно всех производителей подвержены этой проблеме. К сожалению, ни громкое имя бренда, ни высокая стоимость устройства не гарантируют 100% безопасности в этом вопросе. Поэтому, если не хотите распрощаться с девайсом или кругленькой суммой денег, соблюдать правила подключения следует беспрекословно!

Примеры поврежденных HDMI устройств

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

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

Исправный и выжженный HDMI порт. Почувствуй разницу.

Выжженный HDMI порт изнутри.

Сожжённый резистор.

Причем, зачастую выгорает главный управляющий чип или сразу несколько, что делает ремонт оборудования нецелесообразным (в виду его дороговизны) или даже невозможным.

«Пробитый» чип.

Еще одна жертва «горячего подключения».

Три одновременно «пробитых» чипа.

Совсем плохой вариант.

Надеюсь, что вы не столкнетесь с подобными неприятностями.

А что же защита, спросите вы?! Естественно, разработчики ставят защиту HDMI интерфейсов, но, к сожалению, спасает она лишь от легкой «статики». От более серьезных разрядов, которые присутствуют повсеместно, к сожалению, защиты не делают. Повторюсь, даже техника топовых брендов страдает от «горячего подключения» по HDMI.

Правила подключения HDMI оборудования

Как следует напугав читателя мы подошли к главной части нашей статьи: Как же обезопасить оборудование с HDMI интерфейсами?

Существуют общие правила правильного подключения электронных устройств:

  1. Обесточить все подключаемое оборудование. Причем, не просто отключить кнопкой на пульте или тумблером на задней панели, а именно выключить из розетки!
  2. Скоммутировать оборудование при помощи кабелей. Это касается как HDMI кабелей, так и других, например, аудио-, Ethernet- и прочих кабелей.
  3. После этого включить все устройства системы в розетку.
  4. Только после это можно пользоваться оборудованием.

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

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

Защита HDMI интерфейсов

Но бывают случаи, когда коммутировать оборудование «на холодную» нет совсем никакой возможности. Например, когда речь идет об HDMI-удлинителях и между устройствами на расстояние в несколько десятков или даже сотен метров; когда в крупном магазине подключено сразу несколько десятков телевизоров, работающих во всем торговом зале, а менеджеру нужно срочно продемонстрировать покупателю работоспособность какого-то товара; когда в спорт баре идет прямой эфир; когда HDMI-оборудование используется для видео-трансляции и прочих, чаще всего не бытовых случаях. В этом случае рекомендуется использовать специальные устройства защиты HDMI интерфейсов. Их можно найти у различных производителей и, чтобы не превращать статью в рекламную, я не стану указывать здесь какие-то конкретные модели.

Защита HDMI интерфейсов

Эти пассивные элементы (предохранители) используются для защиты устройств с HDMI интерфейсами от электростатических разрядов, разности потенциалов при подключении оборудования «на горячую», а также грозовых наводок. Они активны на всех каналах TMDS и будут выступать в качестве конечной защиты ESD. В момент когда разряд пойдет по кабелю этот «малыш» возьмет весь удар на себя.

В принципе, если вас не пугают лишние расходы, такие предохранители можно использовать и в быту. Ставить их нужно на каждое HDMI соединение с одной стороны.

Вы можете

Оригинал: Some Nifty udev Rules and Examples
Авторы: Vimal Daga, Davender Singh
Дата публикации: 28 Июня 2012 г.
Перевод: А.Панин
Дата публикации перевода: 23 октября 2012 г.

Благодаря системе udev, которую разработали Greg Kroah-Hartman, Kay Sievers и Dan Stekloff, процесс подключения flash-накопителей, жестких дисков, камер и мобильных телефонов к системе под управлением ОС Linux стал простым и управляемым как никогда раньше. Впервые реализованная в ядре Linux версии 2.6, система udev обрабатывает как горячее подключение устройств к работающей системе, так и холодное подключение устройств (присоединенных до включения системы). В этой статье мы рассмотрим процесс динамического создания файлов устройств в каталоге /dev и приведем несколько примеров настроек, пригодных для использования или просто для развлечения.

Под udev понимается реализация файловой системы устройств devfs в пространстве пользователя. Система включает в себя службу udevd , файлы настроек и файлы правил, используемые для динамического управления файлами устройств Linux, находящимися в директории /dev , в ответ на события, генерируемые ядром (uevents). Udev с успехом полностью заменила старую реализацию devfs начиная с ядра Linux версии 2.6.

Для чего же понадобилась полностью переработанная реализация системы управления файлами устройств? И почему внедрение udev было столь успешным? Для получения ответа необходимо рассмотреть историю развития интерфейсов драйверов устройств ОС Linux.

С каждым файлом устройства связано два 8-битных значения: младший идентификатор (minor number) и старший идентификатор (major number). Каждый драйвер устройства имеет старший идентификатор; и все файлы устройств, работающих под управлением этого драйвера имеют одинаковый старший идентификатор. Младшие идентификаторы устройств различны у разных устройств, работающих под управлением этого драйвера.

В ранних версиях Linux файловая система /dev содержала по одному статическому файлу для каждого устройства, которое могло бы быть подключено к системе (и управлялось бы драйвером устройства). К сожалению, этот подход имел ряд проблем: было недостаточно значений идентификаторов для присвоения всем возможным устройствам, в особенности в условиях растущего количества поддерживаемых устройств. Также, наличие более 18000 файлов устройств требовало большого количества дополнительного дискового пространства. Эти проблемы были решены путем предоставления возможности udev игнорировать значения младшего и старшего идентификатора файлов устройств.

При горячем подключении устройств, таких как оборудование с интерфейсом USB, не было постоянства при присвоении названия и идентификатора файлу устройства. К примеру, на системе с двумя USB-принтерами, один из принтеров может быть представлен файлом /dev/usb/lp0 , а другой файлом /dev/usb/lp1 - но при этом нет точного понимания, какой из принтеров представлен тем или иным файлом. Это поведение могло меняться в зависимости от того, какое из устройств было включено при загрузке компьютера или подключено раньше - или может меняться в зависимости от того, подключено ли устройство к USB-разветвителю или напрямую к USB-порту системы. Такое поведение всегда разочаровывало и сбивало с толку пользователей. Система udev позволяет задать постоянное имя устройства при помощи правил.

Другие возможности udev решают множество проблем, доставшихся в наследство от devfs:

  • udev работает в пространстве пользователя, сокращая количество и сложность кода ядра.
  • udev позволяет назначать постоянное имя устройства, не зависящее от порядка включения устройств и расположения устройства на шине.
  • udev динамически изменяет файлы в директории /dev , создавая файлы только для тех устройств, которые присутствуют и подключены к системе. Также возможно назначение произвольных имен устройств при помощи символических ссылок на файлы устройств.
  • udev предоставляет информацию об устройстве приложениям пользовательского пространства, убирая необходимость доступа к внутренним структурам ядра для получения данной информации.

Как работает udev

Служба udevd слушает netlink-сокет в ожидании событий, генерируемых ядром при подключении или отключении устройства. Вы можете наблюдать за этими событиями при помощи команды udevmonitor - запустите ее, подключите USB-устройство, например, flash-накопитель, и отключите его (в новейших дистрибутивах может не быть программы udevmonitor - в этом случае используйте udevadm .)

Во время запуска udev монтирует файловую систему tmpfs в в директорию /dev . После этого файлы устройств копируются из директории /lib/udev/device в директорию /dev и udev начинает принимать события ядра для устройств с холодным подключением. Директория /etc/udev/rules.d используется для изменения параметров устройств, создания символических ссылок на файлы устройств и выполнения других действий. Для устройств, использующих горячее подключение, udevd принимает события ядра при помощи D-Bus, после чего получает атрибуты нового устройства из файловой системы /sys и применяет правила в зависимости от атрибутов - после этого создается файл устройства в файловой системе /dev . Udev также позволяет подгружать предназначенные для этого драйверы устройств при помощи механизма "modalias".

Правила и примеры использования udev

Udev предоставляет возможность изменять свое поведение на основе правил и конфигурационных файлов. Вы можете переопределить принцип работы правил, поставляемых в комплекте с системой (обычно находящихся в /lib/udev/rules.d ) или добавить индивидуальные и специфические возможности, удовлетворяющие вашим потребностям. Правила можно добавлять в директорию /etc/udev/rules.d/ - директорию для индивидуальных пользовательских правил.

Создавайте свои правила (которые назначают имя файла устройства, создают символические ссылки, устанавливают права доступа и выполняют другие необходимые вам действия) в этой директории. Для того, чтобы удостоверится, что правило предшествует остальным, убедитесь, что имя файла начинается с числа, меньшего, чем остальные правила, которые должны выполняться после него - например, 10-local.rules .

Отключить учетную запись пользователя root до того момента, как администратор подключит свой USB-диск

BUS=="usb", SUBSYSTEM=="block", PROGRAM="/bin/enable_root_login"

Для того, чтобы это правило работало, вам необходимо разработать приложение или сценарий оболочки с заданным именем, для того, чтобы получать серийный номер устройства, подключенного к системе и сравнивать его с известным серийным номером устройства администратора. В случае совпадения серийных номеров, программа удалит строку auth requisite pam_deny.so из файла /etc/pam.d/login , что позволит вход в систему под учетной записью пользователя root. В случае подключения других USB-устройств, никаких изменений файлов произведено не будет. Напротив, как только USB-носитель будет отключен, эта строка будет снова добавлена в файл.

Это правило было протестировано на дистрибутиве RHEL 5.0 и прекрасно работало, тем не менее, при использовании команды su или при входе в однопользовательском режиме при загрузке это правило не будет работать. Для запрета входа под учетной записью пользователя root при использовании команды su , можно сделать следующее:

  1. Отредактировать файл /etc/security/access.conf , добавив строку root: ALL .
  2. Отредактировать файл /etc/pam.d/system-auth , добавив в качестве второй строки account required pam_access.so .
  3. Отредактировать файл /etc/pam.d/su и сделать первой строкой этого файла строку account include system_auth .

Эти действия, конечно же, должны производиться программой enable_root_login . После проверки серийного номера USB-устройства на принадлежность администратору, программа должна убрать все сделанные изменения в файлах, а в том случае, если присоединенное устройство не принадлежит администратору, произвести все вышеприведенные действия над файлами.

Эти действия не спасут от входа под учетной записью пользователя root в однопользовательском режиме, тем не менее, вы можете установить пароль на загрузчик GRUB для предотвращения простого доступа к однопользовательскому режиму.

Для получения информации о серийном номере устройства, названии устройства, идентификаторе поставщика, названии производителя и других параметрах можно использовать следующую команду: udevinfo -a -p /sys/block/sdb

В новейших дистрибутивах программы udevinfo может не быть - в этом случае следует использовать udevadm вместо udevinfo .

Отключить все USB-порты

BUS=="usb", OPTIONS+="ignore_device"

Итогом выполнения этого правила будет отключение всех устройств, подсоединенных к USB-портам вашей системы - USB-принтеры, клавиатуры и мыши не будут работать. Будьте осторожны при использовании!

Отключить все блочные устройства, присоединенные к USB-портам

BUS=="usb", SUBSYSTEM=="block", OPTIONS+="ignore_device"

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

Назначить постоянное имя файлу устройства второго IDE-диска

Замените sdb в том случае, если хотите применить правило к другому диску.

Игнорировать второй USB SCSI/IDE-диск, подключенный по USB

KERNEL=="sdb", NAME="my_spare"

BUS=="usb", KERNEL=="hdb", OPTIONS+="ignore_device"

Добавить символическую ссылку на заданный файл устройства USB-мыши

SUBSYSTEM=="input", BUS=="usb", SYSFS{serial}=="0000:00:1d.0", SYMLINK+=="MY-USB-MOUSE"

Изменить имя файла устройства на основании производителя устройства

BUS=="usb", SYSFS{manufacturer}=="JetFlash", NAME="UNIVERSE"

Это правило изменяет имя файла устройства на "UNIVERSE" в том случае, если производителем USB-накопителя является JetFlash.

Выборочно разрешить использование блочных USB-устройств при помощи специальной программы

BUS=="usb", SUBSYSTEM=="block", PROGRAM="/bin/usbc.jar", RESULT!="my", OPTIONS+="ignore_device"

В том случае, если программа выводит "my", устройство может использоваться, в противном случае устройство игнорируется.

Частенько приходится объяснять клиентам, что устройства с HDMI интерфейсом не следует подключать на «горячую». Кому-то удается объяснить это при продаже или установке такого оборудования, а тем, кому повезло меньше, только после его поломки.

Сегодня хочу вам рассказать о тонкостях подключения HDMI оборудования.

Терминология

Термин «Горячее подключение» (англ. HotPlug) - означает коммутацию (отключение или подключение) электронного оборудования во время его работы без отключения электропитания .

Применительно к компьютерам существует схожий термин «Горячая замена» , означающий отключение/подключение/замену компонентов системы, опять-таки, без предварительного обесточивания.

Подключать оборудование и компоненты «на горячую» крайне не рекомендуется, а говоря о HDMI оборудовании и вовсе строго воспрещается!

Интерфейсы устройств, поврежденные при «горячем подключении», называют сожженными или сгоревшими , а их внутренние компоненты – пробитыми или горелыми .

Обратный термин - «Холодное подключение» (Холодная замена) , то есть все (пере) подключения производятся после отключения питания устройств и снятия напряжения (остаточного потенциала).

Несмотря на то, что многие пользователи не утруждают себя отключением устройств из розетки при коммутации, тем не менее, общепринятая практика и предписания правил безопасности рекомендуют осуществлять любую коммутацию именно «на холодную»! Возможно, кто-то захочет возразить и укажет на спецификации ряда интерфейсов или инструкции к некоторым устройствам, где черным по белому говорится о возможности «горячего подключения». Однако, применительно к HDMI оборудованию это может очень плохо закончиться…

Причины выгорания HDMI интерфейсов

К сожалению, HDMI интерфейс крайне чувствителен к всевозможным электрическим разрядам и при «горячем подключении», с высокой долей вероятности, можно сжечь HDMI порт или чип телевизора, монитора, видеокарты или любого другого HDMI устройства.

Из-за чего же может сгореть устройство с HDMI интерфейсом при подключении «на горячую»?

Дело в том, что электрические разряды постоянно накапливаются на одежде и человеческом теле (статическое электричество). Эти разряды при подключении одного устройства к другому попадают в разъёмы, и являются причиной повреждения оборудования. Второй причиной повреждения HDMI при подключении «на горячую» является наличие на корпусах устройств достаточно высоких потенциалов (порядка 100 вольт). В момент соединения устройств происходит выравнивание потенциалов (разряд) в следствии чего и происходит повреждение оборудования.

К несчастью, данная проблема известна с самого начала появления HDMI интерфейса и является следствием оптимизированной схемотехники и общей дешевизны комплектующих. И, что не мало огорчает, все эти недостатки будут свойственны и новым версиям интерфейса.

Абсолютно все устройства с HDMI интерфейсом абсолютно всех производителей подвержены этой проблеме. К сожалению, ни громкое имя бренда, ни высокая стоимость устройства не гарантируют 100% безопасности в этом вопросе. Поэтому, если не хотите распрощаться с девайсом или кругленькой суммой денег, соблюдать правила подключения следует беспрекословно!

Примеры поврежденных HDMI устройств

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

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

Исправный и выжженный HDMI порт. Почувствуй разницу.

Выжженный HDMI порт изнутри.

Сожжённый резистор.

Причем, зачастую выгорает главный управляющий чип или сразу несколько, что делает ремонт оборудования нецелесообразным (в виду его дороговизны) или даже невозможным.

«Пробитый» чип.

Еще одна жертва «горячего подключения».

Три одновременно «пробитых» чипа.

Совсем плохой вариант.

Надеюсь, что вы не столкнетесь с подобными неприятностями.

А что же защита, спросите вы?! Естественно, разработчики ставят защиту HDMI интерфейсов, но, к сожалению, спасает она лишь от легкой «статики». От более серьезных разрядов, которые присутствуют повсеместно, к сожалению, защиты не делают. Повторюсь, даже техника топовых брендов страдает от «горячего подключения» по HDMI.

Правила подключения HDMI оборудования

Как следует напугав читателя мы подошли к главной части нашей статьи: Как же обезопасить оборудование с HDMI интерфейсами?

Существуют общие правила правильного подключения электронных устройств:

  1. Обесточить все подключаемое оборудование. Причем, не просто отключить кнопкой на пульте или тумблером на задней панели, а именно выключить из розетки!
  2. Скоммутировать оборудование при помощи кабелей. Это касается как HDMI кабелей, так и других, например, аудио-, Ethernet- и прочих кабелей.
  3. После этого включить все устройства системы в розетку.
  4. Только после это можно пользоваться оборудованием.

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

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

Защита HDMI интерфейсов

Но бывают случаи, когда коммутировать оборудование «на холодную» нет совсем никакой возможности. Например, когда речь идет об HDMI-удлинителях и между устройствами на расстояние в несколько десятков или даже сотен метров; когда в крупном магазине подключено сразу несколько десятков телевизоров, работающих во всем торговом зале, а менеджеру нужно срочно продемонстрировать покупателю работоспособность какого-то товара; когда в спорт баре идет прямой эфир; когда HDMI-оборудование используется для видео-трансляции и прочих, чаще всего не бытовых случаях. В этом случае рекомендуется использовать специальные устройства защиты HDMI интерфейсов. Их можно найти у различных производителей и, чтобы не превращать статью в рекламную, я не стану указывать здесь какие-то конкретные модели.

Защита HDMI интерфейсов

Эти пассивные элементы (предохранители) используются для защиты устройств с HDMI интерфейсами от электростатических разрядов, разности потенциалов при подключении оборудования «на горячую», а также грозовых наводок. Они активны на всех каналах TMDS и будут выступать в качестве конечной защиты ESD. В момент когда разряд пойдет по кабелю этот «малыш» возьмет весь удар на себя.

В принципе, если вас не пугают лишние расходы, такие предохранители можно использовать и в быту. Ставить их нужно на каждое HDMI соединение с одной стороны.

http://obob.tv/tekhnologii/vygoranie-hdmi-interfeysa/

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

В чем особенность водоснабжения многоквартирного дома?

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

Чаще всего жители многоэтажек пользуются водой центрального водоснабжения. С помощью водопровода она подается в отдельные сантехнические приборы под определенным давлением. Зачастую вода проходит очистку с помощью хлорирования.

Состав системы центрального водоснабжения

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

Последний вид материала практически не используется в современных постройках.

Типы схем водоснабжения

Система водоснабжения бывает трех типов:

  • коллекторная;
  • последовательная;
  • комбинированная (смешанная).

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

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

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

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

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

  1. В случае протечке трудно искать поврежденные участки.
  2. Невозможность подачи воды к отдельному сантехническому прибору.
  3. Трудность доступа к трубам в случае поломки.

Горячее водоснабжение многоквартирного дома. Схема

Разводки труб делятся на два типа: к стояку горячего и холодного водоснабжения. Кратко их называют ХВС и ГВС. Особого внимания заслуживает система горячего водоснабжения многоквартирного дома. Схема сетей ГВС состоит из двух типов проводок - нижней и верхней. Чтобы сохранить высокую температуру в трубопроводе часто используют закольцованные проводки. Гравитационный напор заставляетводу циркулировать в кольце, несмотря на отсутствие водоразбора. В стояке она охлаждается и попадает в нагреватель. Вода с большей температурой подается в трубы. Так и происходит непрерывная циркуляция теплоносителя.

Тупиковые магистрали также не редкость, но чаще всего их можно встретить в хозяйственных помещениях промышленных объектов и в небольших жилых зданиях с малой этажностью. Если отбор воды планируется непостоянно, то применяют циркуляционный трубопровод. Инженеры советуют использовать горячее водоснабжение в многоквартирных домах (схема была рассмотрена выше) с этажностью не более 4.Трубопровод с тупиковым стоякомтакже встречается в общежитиях, санаториях и гостиницах. Трубы тупиковой сети обладают меньшей металлоемкостью, поэтому остывают быстрее.

Сети ГВС в своем составе имеют горизонтальный магистральный трубопровод и распределительные стояки. Последние обеспечивают разводки труб по отдельным объекта - квартирам. ГВС монтируют в максимальной близости к сантехническому оборудованию.

Для построек с большой протяженностью магистральных труб используют схемы с циркуляционным и закольцованным по дающим трубопроводами. Обязательным условием является установка насоса для поддержания циркуляции и постоянного водообмена.

Двухтрубная схема ГВС — Фото 07

Современные строители и инженеры все чаще прибегают к использованию двухтрубных систем ГВС. Принцип работы заключается в том, что насос забирает воду из обратной магистрали и подает ее в нагреватель.Такой трубопровод обладает большей металлоемкостью и считается наиболее надежным для потребителей.