Горячее и холодное подключение устройств. Горячее подключение

Оригинал: 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", устройство может использоваться, в противном случае устройство игнорируется.

Представим обычное утро в одной из многоэтажек спального района нашего любимого города: унитаз, душ, побриться, чай, почистить зубы, воды коту (или в любом другом порядке) - и на работу… Все на автомате и не задумываясь. До тех пор, пока из крана холодной воды - течет холдная вода, а из грячей - горячая. А бывает откроешь холодную, а оттуда - кипяток!!11#^*¿>.

Давайте разбираться.

Холодное водоснабжение или ХВС

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

Если говорить коротко, то водомерный узел состоит из двух задвижек, сетчатого фильтра и счётчика.



В некоторых есть дополнительно обратный клапан

и обвод водомера.

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


где распределяется по стоякам, которые ведут воду в квартиры по этажам.



Какое давление в системе?

9-ти этажки

Дома высотой до 9 этажей имеют нижний розлив снизу вверх. Т.е. от водомера по большой трубе вода уходит по стоякам до 9-го этажа. Если у водоканала настроение хорошее, то на вводе нижней зоны должно быть примерно 4 кг/см2 . С учётом падения давления в один килограмм на каждые 10 метров водяного столба жители 9-го этажа получат приблизительно 1 кг давления, что считается нормой. На практике же в старых домах давление на вводе составляет всего 3,6 кг. И жители 9го этажа довольствуются ещё меньшим давлением чем 1кг/см2

12-20 этажей

Если дом выше 9-ти этажей, например 16 этажей, то такая система делится 2 зоны. Верхняя и нижняя. Где для нижней зоны сохраняются те же условия, а для верхней давление поднимают примерно до 6 кг. Чтобы воду поднять на самый верх в подающую магистраль, а с ней вода стояками идёт до 10-го этажа. В домах выше 20-ти этажей подача воды может делится на 3 зоны. При такой схеме подачи, вода в системе не циркулирует, стоит на подпоре. В квартире многоэтажки в среднем мы получаем давление от 1 до 4 кг. Бывают и другие значения но сейчас мы их рассматривать не будем.

Горячее водоснабжение или ГВС

В некоторых малоэтажных домах горячая вода подключена по такой же схеме, стоит на подпоре без циркуляции, этим и объясняется то, что при открытии крана с горячей водой, какое-то время идёт холодная, остывшая вода. Если взять тот же дом в 16 этажей то в таком доме система ГВС устроена иначе. Горячая вода как и холодная так же подаётся в дом по большой трубе, и после счётчика идёт в домовую магистраль

которая поднимает воду, на чердак где она распределяется по стоякам и опускается в самый низ в обратную магистраль. Кстати, счётчики ГВС считают не только объём утерянной (потреблённой) воды в доме. Эти счётчикитак же считают потери температуры (гигоколории)

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

При такой схеме, горячая вода всегда циркулирует. Стоит вам открыть кран, горячая вода уже здесь. Давление в такой системе примерно 6-7 кг. на подаче и чуть ниже на обратке для обеспечения циркуляции.

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

HotPlug - горячее подключение) - термины означающие отключение или подключение электронного оборудования в/к (компьютерной) системе во время её работы без выключения питания и остановки (системы) (HotPlug), а также замену (переподключение) блока в целом (Hot Swap ). Также существует термин, обозначающий противоположность горячей замене - Холодная замена , то есть все (пере)подключения производятся после остановки системы и снятия напряжения (остаточного потенциала).

Оборудование делится по этому принципу на допускающее горячую замену и не допускающее .

История

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

  • Предназначены для горячей замены и, следовательно, поддерживают горячую замену стандарты PCMCIA , USB , FireWire , Fibre Channel и eSATA.
    Среди устройств этого типа - флеш-накопители , некоторые жесткие диски в том числе для массивов в серверах, карты расширения форматов PCI-X , PCI Express , ExpressCard (PCMCIA, также ранее называемые PC Cards), находящие применение в ноутбуках и даже некоторые блоки питания.
  • Не поддерживает полноценную горячую замену дисковые интерфейсы SATA и полностью не поддерживает протокол IDE (IDE поддерживает горячее подключение) .

Конструкция системы

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

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

Более сложные схемы обладают запасом избыточности и легко восстанавливают данные при внезапном отключении устройства.

Термин «горячая замена» используется в двух значениях. С одной стороны, он обозначает возможность отсоединить или присоединить устройство без отключения питания. С другой стороны, он также может подразумевать еще и автоматическое определение устройства при подсоединении. Первое значение термина распространяется на интерфейсы RS-232 , FireWire и простейшие реализации SCSI , второе значение - на USB, FireWire, PCI Express и сложные варианты SCSI.

Конструкция гнезда

Крайние контактные площадки питания сделаны длиннее внутренних сигнальных

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

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

Вот пример типичной последовательности подключения:

  1. Замыкаются наиболее длинные контакты (заземление). Тем самым достигается электрическая безопасность соединения и защита от статического заряда.
  2. Замыкаются длинные или средние контакты предварительного питания. Заряжаются входные контуры цепей питания.
  3. Подключаются короткие контакты питания.
  4. Соединение считается установленным. Включается сигнал инициализации питания.
  5. Цепь мягкого включения питания подает напряжение на устройство.
  6. Задержка в десятки миллисекунд.
  7. Цепь питания закончила мягкое подключение. Выключается сигнал инициализации питания.
  8. Устройство начинает полноценную работу.

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

Горячее подключение в программном обеспечении

Термин «горячее подключение» также используется применительно к программному обеспечению и означает возможность изменять программу без остановки ее выполнения. Такую возможность поддерживают лишь несколько языков программирования , включая Lisp , Erlang и Smalltalk . Язык Java поддерживает эту возможность только в процессе работы отладчика (Java Platform Debugger Architecture, JPDA).

Предметно ориентированный язык программирования 1С v8 предоставляет возможность изменять код при работающей программе. (http://v8.1c.ru/overview/release_8_1_5/administration.htm раздел "Обновление частей конфигурации"). Так как компиляция отдельных модулей происходит в момент исполнения программы, и при изменении модуля он компилируется в сеансе заново, это не совсем "горячее подключение".Нужно заново создать сеанс, чтобы изменения вступили в силу, и только для этого пользователя (другим надо перезапустить новый сеанс). В версии v7 эта возможность также присутствовала при использовании дополнительных программных средств (http://openconf.1cpp.ru/vk/turbomd/) и штатной командой #ЗагрузитьИзФайла....(требуется только заново открыть форму или отчет). Вообще при использовании интерпретируемых языков программирования (с сохранением текстов программ внутри модулей) " горячее подключение" реализуется просто заменой текстов.

Сгнил старый водопровод в квартире. Испарина на трубах, свищ за свищом; перекрыть воду, а потом снова подать – из кранов хлещет ржавчина. И планируется ремонт кухни с санузлом, а старые трубы не то что трогать или дышать – смотреть на них боязно. Нужно менять, но работа стоит дорого. Можно ли заменить квартирный водопровод своими руками? Да, можно, и без всяких разрешений-оформлений. Нужно будет только договориться со слесарем ДЭЗа, чтобы перекрыл подачу воды в стояки максимум на час; скорее всего, удастся управиться минут за 10. Или предупредить соседей, если не вредные, и перекрыть/снова подать самому.

Порядок замены

Замена водопровода производится в определенной последовательности. Работа «на глазок» и «по ходу дела» в непрофессиональном исполнении нередко заканчивается протечкой. План производства работ примерно таков:

  1. Выбор материала новых труб.
  2. Выбор схемы разводки горячей и холодной воды.
  3. Разработка схемы водоснабжения квартиры.
  4. Расчет диаметра труб по выбранным материалу и схеме.
  5. Подготовка монтажного инструмента.
  6. Закупка материалов.
  7. Сборка отборно-учетных узлов, монтаж их на стояки и регистрация.
  8. Демонтаж старых труб и сантехнических приборов.
  9. Подключение ГМС и аквастопа, если предусмотрено.
  10. Подключение колбового фильтра (с ГМС обязателен).
  11. Монтаж труб водопроводов горячей и холодной воды.
  12. Установка и подключение сантехники, прежней или новой.
  13. Пробная подача воды; устранение выявленных дефектов.
  14. Установка и подключение бойлера.

ГМС, колбовый фильтр и аквастоп

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

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

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

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

Выбор труб

Новый водопровод в квартире начинается с выбора труб. Сталь в быту отжила свое, и выбирать приходится из металлопластика, пластика и паяной меди. Эта стадия работы, пожалуй, самая ответственная – неправильный выбор сведет на нет все старания, расходы и хлопоты.

Медь

О медных водопроводных трубах можно сказать сразу: их пропагандисты не ведают, что говорят. Или ведают, но себе не ставят. Во-первых, на меди в контакте с водой образуется закись меди – та самая ярь-медянка, о которой Том Сойер толковал Гекльберри Финну. Да, медь человеку нужна, но в ничтожных количествах в виде микроэлемента, а не в составе сильного яда. В качестве контраргумента приводят, мол, медь с хлором из воды образует защитную пленку. Абсурд для любого, помнящего хотя бы школьную химию.

Во-вторых, в состав припоя для меди входит олово. Белое олово, мягкий металл, со временем превращается в другую его, как говорят химики, аллотропную модификацию – серое олово, рассыпчатый порошок. То есть, поставив у себя медные трубы (очень дорогие), мы тем самым на 100% гарантируем протечку. И оплату работы фирмы, специализирующейся на медных трубах, так как самому правильно спаять их невозможно.

Металлопластик

Металлопластиковые трубы довольно дороги, но их можно соединять своими руками, не имея опыта. Металлопластиковый водопровод собирается на специальных резьбовых узлах с прокладками или под обжим – фитингах. Кроме того, металлопластиковые трубы можно плавно изгибать. Гидродинамическое сопротивление и потери давления в металлопластике очень малы.

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

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

Пластик

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

Полибутилен (PB)

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

Полиэтилен (PE)

Дешевы, но для ГВС нужны полиэтиленовые армированные трубы; обычный полиэтилен не держит уже 60 градусов. Гнуть и клеить нельзя, паяный стык надежно держит давление не более 3,5 ат, а давление воды в городском водопроводе может быть до 6 ат (0,6 Мбар) для холодной воды и 4,5 ат для горячей, так что сохраняется вероятность внезапного прорыва. Гидравлическое сопротивление, правда, наименьшее из всех.

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

ПВХ (PVC)

Свойства поливинилхлорида (ПВХ) достаточно хорошо известны: химически стоек, недорог, термостойкость до 80 градусов, легко клеится, но не очень прочен и боится ультрафиолета. Стыки, как паяные так и клеевые, выходят более хрупкими, чем цельный материал, так что опасность прорыва остается и нужен аквастоп. Замена отдельных секций клееного ПВХ, разумеется, сложнее, чем у разборного металлопластика, но проще, чем для паяных стыков: прогрев соединение бытовым феном, стык можно разнять, а потом опять склеить. В общем, вариант бюджетный или для начинающего мастера при длине основной ветви от стояка до самой дальней точки водоразбора не более 10 м и при не более чем 7 точках отбора.

Пропилен (PP)

Прокладка квартирного водопровода полиизопропиленовыми трубами (пропиленом) ныне общепринята. Материал не очень дорог, прочен, стоек, паяные стыки сохраняют все качества основы, термостойкость – до 130 градусов, правильно спаянный держит до 12 ат. Гидравлическое сопротивление выше, чем у ПВХ, но все равно накопление налета в просвете минимально, а с ГМС исключено. Недостатков при самостоятельном выполнении всего два:

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

Однако пропиленовый трубопровод на сегодняшний день единственный, который можно сделать раз навсегда и забыть. Поэтому остановимся на пайке пропилена отдельно, тем более что пайка других пластиков отличается только более низкой температурой (110-130 градусов для полиэтилена и около 150 для ПВХ).

Пайка пропилена

Пайка пропилена кустарным паяльником-«утюгом» встык (см. рис. справа) недопустима:

  1. На «колбаске» внутри накапливаются загрязнения, и собранный таким способом трубопровод оказывается более подвержен засорению, чем стальной.
  2. Давление воды, распирая трубы, стремится разорвать стык. При 16 градусах в трубе и 20-25 снаружи через примерно три месяца порог усталости материала оказывается превзойденным, и стык течет.

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

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

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

Схема разводки

Коллекторы-гребёнки

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

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

Разработка схемы водоразбора

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

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

  1. Трубы горячей и холодной воды, их тип и диаметр просвета.
  2. Приборы учета.
  3. Аварийные клапаны и сливы.
  4. Запорная арматура.
  5. Точки разбора с указанием потребителей.
  6. Резервные ветви и устройства.
  7. Направление тока воды.

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

  • Схема справа выполнена в изометрии – для красоты, что ли? Пересечения труб ее запутывают, а представления о реальном расположении точек разбора она не дает: стиралка с бойлером выходят под полом.
  • Там же слишком много стрелок-указателей тока там, где и так ясно, куда течет, что тоже запутывает схему.
  • Там же – нечетко и не по правилам изображена запорная арматура с приборами учета.
  • Там же – не указаны тип и диаметр труб.
  • Там же – кто, где и когда видел, чтобы вода в бойлер подавалась сверху, а унитаз смывался через отлив?
  • Зато на схеме слева даже не специалисту ясно, что бойлер (6) – резервный. Замечание будет: «А где обратный клапан на горячую? Без него при прекращении подачи котел свою в горячий стояк погонит, если вентиль (10) не перекрыть». Но это уже по сути дела и с полным пониманием.

Правильная упрощенная схема водопровода в квартире

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

Расчет труб

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

Точный расчет трубопровода – дело специалистов высокой квалификации, но для городской квартиры, чтобы нормально текло, можно прикинуть и самому. Исходные данные такие:

  1. Минимально допустимое давление – 0,3 ат.
  2. Потеря давления на 1 м пропиленовой трубы 16 мм – 0,05 ат.
  3. Средняя для квартирной разводки потеря давления на единицу фитингов и арматуры – 0,15 ат.
  4. Потеря напора в отборно-учетном узле – 0,25 ат.
  5. При обычных значениях напора на входе в стояк 1,5-4,5 ат в трубе 12 мм периодическая турбулизация неизбежна, а в 16 мм трубах не наблюдается.
  6. Запас по напору для самой дальней точки – не менее двухкратного.

Осталось узнать напор (давление) на входе, и можно определить, хватит ли при последовательной разводке такой, самой ходовой, трубой, давления для самого дальнего крана или придется взять пошире и подороже. Давление внизу стояка можно узнать по манометру в подвале или у эксплуатанта здания; затем отнимаем по 0,6 ат на этаж. Можно и прикинуть по соседям исходя из тех же 0,6 ат/этаж: если, скажем, через три этажа вверх из кранов еще течет, то у нас добрых 2 ат. Но в многоэтажках такой фокус не проходит: чтобы не удорожать чрезмерно квартирную разводку, там делают отдельные стояки на нижние и верхние и даже на нижние, средние и верхние этажи.

Пример расчета: второй этаж девятиэтажки; жильцы верхних этажей на воду не жалуются. Имеем не менее 4 ат напора. 11 единиц арматуры (5 тройников, 6 угольников, 1 вентиль) дают 1,65 ат потерь. Длина трубы от стояка до дальней стены кухни – 6,5 м, это еще 0,325 ат потерь. Всего, с отборно-учетным узлом, имеем 0,325+1,65+0,25=2,225 ат потерь. Многовато, нужно проверить давление манометром и, скорее всего, взять основную трубу 20-25 мм, или разводиться по параллельной схеме от гребенки, иначе в летнюю сушь можно остаться «сухим».

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

Зависимость потерь в трубах и арматуре нелинейная: они зависят от скорости течения, которая, в свою очередь, зависит от сечения просвета трубы. Незначительное увеличение диаметра трубы резко снижает потери, поэтому обычная для квартир разводка 20 мм трубой с отводами к точкам 16 мм в большинстве случаев работает хорошо. В сложных случаях точный расчет можно сделать по СНиП, внутренний водопровод и канализация зданий. Там есть все нужные формулы и номограммы; расчет может сделать человек с инженерным образованием любого профиля.

Нужно только иметь в виду, что на сей счет есть аж три СНиПа с одинаковым индексом: 2.04.01-85, 2.04.01-85(2000) и 2.04.01-85* « (Domestic water supply and drainage systems in buildings)». Правильный – СНиП последний.

Инструмент, материалы, демонтаж старого

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

Дадим лишь один совет: не берите вентили с рычагом. Он выполнен из силумина или пластика и имеет свойство обламываться в самый неподходящий момент, как раз тогда, когда нужно срочно перекрыть. Берите шаровые вентили с рукояткой-«бабочкой». Круглые рифленые рукояти тоже не ломаются, но мокрые или потные руки по ним скользят.

Учет и контроль

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

Узел собирают с гидроизоляцией соединений лентой ФУМ и так же подключают к стояку, перекрыв предварительно воду; перед подачей воды нужно не забыть перекрыть запорный вентиль. Это единственная операция, и кратковременная, требующая отключения подачи воды соседям по стояку.

Для холодной и горячей воды нужны отдельные узлы счетчиков. Крайне желательно, чтобы счетчики и рукояти вентилей были выделены цветом. Показания счетчиков должны быть ясно читаемы без каких-либо дополнительных операций (съем люка и т.п.), поэтому часто приходится заранее собирать часть цельного трубопровода, иногда довольно причудливой конфигурации, для подключения приборов учета к стояку. Помимо труб и паяльника для этого понадобятся переходные муфты с пластика на металл МРВ – муфта резьбовая внутренняя. Пластик же к узлам учета подключается при помощи МРН – муфт резьбовых наружных.

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

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

ГМС, аквастоп, фильтр

Хотя конструкция ГМС неразборная и не позволяет с ее помощью воровать воду, и опломбировке это устройство не подлежит, подключение ГМС до счетчика недопустимо: шламом может забиться турбинка счетчика. ГМС с колбовым фильтром подключают после приборов учета; фильтр – сразу после ГМС. Аквастоп можно подключить сразу после фильтра, но, если он электродинамический, магнитное поле ГМС может вызывать его ложное срабатывание, но относить аквастоп далеко от стояка смысла нет: на прорыв до него он не реагирует.

Видео: обзор вариантов компоновки элементов водопровода

Монтаж трубопроводов

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

Прежде всего нужно установить дуги – пластиковые планки с угольниками МРВ под смесители. Они крепятся к капитальной стене саморезами в дюбелях. При креплении нужно учесть толщину отделки: штукатурки и кафеля или другого декоративного покрытия.

Не имея большого строительного опыта, добиться расположения выходных патрубков заподлицо со стеной очень сложно. Лучше заранее сделать их ВЫСТУПАЮЩИМИ над отделанной стеной на половину ширины бортика декоративных колпаков смесителя: если колпаки нерегулируемые, их можно будет без особого труда довести на наждачном круге или вручную на наждачном бруске.

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

  • С помощью переходников МРН/МРВ и металлопластиковых вставок. В квартире это достаточно надежно, а в углах над штробами можно сделать съемные лючки для ревизии и ремонта резьбовых соединений.
  • Монтировать трубопроводы по месту. Для этого нужен компактный паяльник. Такой стоит дороже, и нужно работать в х/б перчатках, чтобы случайно не обжечься.

Четвертый момент – пайка. На одну пайку уходит 15 мм трубы. То есть, если между двумя фитингами ровно 1 м, отрезать нужно 1030 мм; если 0,6 м – 630 мм т.д.

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

И, наконец, . Это – отдельный производственный цикл, и делается она после ввода водопровода в эксплуатацию. Патрубки под бойлер делаются заранее, но вентили на них (они обязательно нужны на обоих) перекрываются сразу после монтажа труб, и дополнительно патрубки заглушаются.

Видео: пример смонтированного водопровода

Существуют два различных способа рассматривать горячее подключение. Ядро рассматривает горячее подключение как взаимодействие между оборудованием, ядром и драйвером ядра. Пользователи рассматривают горячее подключение как взаимодействие между ядром и пользовательским пространством в рамках программы, называемой /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 для правильного формата старшего и младшего номера для каждого устройства.

mob_info