Что это означает, когда что-то говорит о том, что файлы устройств UNIX являются статическими?

Я читал об удеве . В разделе «Обзор» Wikipedia заявляет, что «в отличие от традиционных Unix-систем, где узлы устройств в каталоге / dev были статическим набором файлов, диспетчер устройств Linux udev динамически предоставляет только узлы для устройств, реально присутствующих на система».

Что это значит, когда говорится «статический набор файлов»? Означает ли это, что всегда есть файлы /dev но они не всегда указывают на реальное устройство?

2 Solutions collect form web for “Что это означает, когда что-то говорит о том, что файлы устройств UNIX являются статическими?”

Я предполагаю, что вы имеете в виду этот параграф:

В отличие от традиционных Unix-систем, где узлы устройства в каталоге / dev были статическим набором файлов, диспетчер устройств Linux udev динамически предоставляет только узлы для устройств, реально присутствующих в системе. Несмотря на то, что devfs использовались для обеспечения аналогичной функциональности, Грег Кроа-Хартман привел ряд причин 3 для предпочтения его реализации над devfs:

Из первого предложения они относятся к другим системам Unix, где устройства в /dev статически созданы и сохраняются при перезагрузке для перезагрузки. Предыдущие версии Linux (думаю, версия 2.4 для ядра) тоже работали так, но новые версии больше не ведут себя таким образом. Другие Unix-файлы обычно включают в себя общий набор файлов устройств при их установке, и редко требуется вручную создавать дополнительные.

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

 $ mknod ./dev/random b 12 5 

ПРИМЕЧАНИЕ. Это указывает на создание дескриптора /dev/random file в качестве блочного устройства с основным номером устройства 12 и младшим номером устройства 5.

Файлы устройств под / dev

ОП задал следующий следующий вопрос относительно общей функциональности каталога /dev . Вот его вопрос:

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

Изучая это, я решил, что начну с проекта Linux From Scratch, чтобы получить базовое представление о том, как /dev управляется в более новых версиях ядра Linux. Я знаю, что в прошлом (думаю, версии ядра 2.4 и раньше) каталог /dev был статическим набором файлов, которые буквально занимали место на жестком диске, но с появлением udev и sysfs это уже не так.

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

Так ушли дни, когда вам приходится беспокоиться о файлах устройств под /dev . Теперь этот каталог полностью управляется udev и sysfs из перезагрузки для перезагрузки.

Дополнительные ресурсы udev & sysfs

  • учебники libudev и Sysfs
  • 7.4. Управление устройствами и модулями в системе LFS
  • Статьи для Linux для вас – серия драйверов устройств Linux

Рекомендации

  • Создание специальных файлов с помощью 'mknod'
  • Базовые спецификации Open Group Issue 6 – mknod

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

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

Традиционно файлы устройств существовали только в каталоге корневой файловой системы под названием / dev, обычно создаваемом инструментом «MAKEDEV», который считывает файлы конфигурации и создает узлы устройства. Это называется статической настройкой и использовалось в течение многих лет почти во всех UNIX-подобных ОС, включая Linux. Для этого подхода есть несколько недостатков.

  • Файлы устройств существовали, даже если соответствующее оборудование не присутствовало в текущей системе. Трудно было сказать, что было или нет.
  • Если обновление ядра представило новые типы устройств, администратору, вероятно, придется вручную создавать для них узлы устройств.
  • Существовал ограниченный набор основных и второстепенных номеров, статически назначая пару всем возможным узлам устройства (помните, что одно физическое устройство может иметь множество узлов устройства из-за разбиения) не было масштабируемым.

Первая попытка linux по решению этой проблемы была названа devfs (некоторые другие операционные системы, подобные UNIX, также имеют файловую систему, называемую devfs, но я не знаю деталей). Это была виртуальная файловая система, в которой ядро ​​обеспечивало бы узлы устройства. Afaict был относительно мертворожден, он толкнул свою собственную нестандартную схему именования устройств, понравилось вам это или нет, и не предлагал огромных преимуществ перед статическими / dev

Позже udev пришел. Это использовало другую модель. Tmpfs был установлен на / dev, а dameon в пользовательском пространстве управлял узлами устройства в нем на основе уведомлений от ядра. https://lwn.net/Articles/65197/

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

  • Как установить скорость повторения клавиатуры USB с помощью udev?
  • Принятие udev игнорировать определенные устройства во время загрузки
  • udev правила вождения меня орехи
  • Где можно установить локальное программное обеспечение, которое работает до / usr?
  • XFCE на Debian: скрытые блокирующие устройства
  • Автоматическое обновление базы данных MPD при вставке внешнего хранилища
  • Может ли udev контролировать установку и размонтирование сетевого хранилища?
  • Как заполнять / etc / network / interfaces автоматически
  • Обнаружение монитора во время загрузки?
  • Группа изменения правил Удева
  • udev Не удается переименовать сетевое устройство: устройство или ресурс занят
  • Linux и Unix - лучшая ОС в мире.