Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

30 - Подсистема udev

Лекция



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

На предыдущих лекциях мы иногда упоминали о подсистеме udev. Вы уже должны понимать в общих чертах, что такое udev и зачем она нужна. Проще всего пояснить назначение подсистемы udev на основе шины USB и подключаемых к ней устройств. Когда к компьютеру подключается USB-устройство, ядро на уровне обслуживания шины USB, фиксирует событие присоединения нового устройства. Перечень таких событий можно посмотреть выполнив команду dmesg. Вот пример событий, которые регистрирует ядро при подключении флеш-накопителя:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[962726.528540] usb 2-2: new high speed USB device using ehci_hcd and address 8
[962726.663367] usb 2-2: configuration #1 chosen from 1 choice
[962726.665095] scsi9 : SCSI emulation for USB Mass Storage devices
[962726.665328] usb-storage: device found at 8
[962726.665335] usb-storage: waiting for device to settle before scanning
[962731.664264] usb-storage: device scan complete
[962731.664971] scsi 9:0:0:0: Direct-Access     OCZ      RALLY2           8.07 PQ: 0 ANSI: 2
[962731.665787] sd 9:0:0:0: Attached scsi generic sg5 type 0
[962731.670693] sd 9:0:0:0: [sde] 7843840 512-byte logical blocks: (4.01 GB/3.74 GiB)
[962731.671175] sd 9:0:0:0: [sde] Write Protect is off
[962731.671182] sd 9:0:0:0: [sde] Mode Sense: 03 00 00 00
[962731.671188] sd 9:0:0:0: [sde] Assuming drive cache: write through
[962731.677810] sd 9:0:0:0: [sde] Assuming drive cache: write through
[962731.677826]  sde: sde1
[962732.148443] sd 9:0:0:0: [sde] Assuming drive cache: write through
[962732.148456] sd 9:0:0:0: [sde] Attached SCSI removable disk

До появления udev необходимо было вручную находить подключаемые устройства и настраивать их работу в системе. Теперь эту работу на себя берет udev. Когда вы подключаете флеш-накопитель к компьютеру с современным Linux-дистрибутивом, то вся настройка и монтирование файловой системы происходит автоматически.

Очень тесно с udev связана файловая система sysfs, которая монтируется в каталог /sys. Каталог /sysотображает и предоставляет доступ к аппаратной конфигурации компьютера. Другими словами /sys - это отображение аппаратной конфигурации компьютера. Содержимое каталога /sys динамически меняется при изменении аппаратной конфигурации.

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

Итак, подведем маленький итог. Задача ядра определять изменения в аппаратной конфигурации системы, регистрировать эти изменения, и вносить изменения в каталог /sys. Задача подсистемы udev выполнить дальнейшую интеграцию и настройку устройства в системе (отобразить его в каталоге /dev), и предоставить пользователю уже готовое к работе устройство.

Подсистема udev настраивает устройства в соответствии с заданными правилами. Об этом говорит сайт https://intellect.icu . Правила содержаться в файлах каталога /etc/udev/rules.d/. Также файлы с правилами могут содержаться и в каталоге /etc/udev/. Все файлы правил просматриваются в алфавитном порядке.

Рассмотрим строку с правилом из файла правил и познакомимся с основными принципами построения правил:

1
SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", NAME="scd%n", SYMLINK+="sr%n"

В строке видим 4 пары выражений разделенных запятой. Первые две пары являются так называемыми фильтрами, которые позволяют идентифицировать устройство. В примере SUBSYSTEMS==”scsi” указывает на то, что устройство должно быть SCSI-устройством, а пара KERNEL==”sr[0-9]*” идентифицирует устройство по имени которое оно (устройство) получило от ядра системы. То есть это правило будет применяться к SCSI-устройству с именем sr0 или sr1 и т.д.

Далее идут пары-действия которые будут выполняться с устройствами которые соответствуют фильтру.NAME=”scd%n” - эта запись говорит о том, что для устройства будет создан файл-устройство в каталоге /dev с именем scd0 или scd1 и т.д. Цифра будет зависеть от цифры в имени устройства. Вместо %n и будет подставлена цифра из имени. Если имя устройства будет sr0, то scd%n преобразуется в scd0. Также очень часто используется подстановка %k%k - это полное имя устройства. То есть вместо %k будет подставлено sr0. Если одного имени файла-устройства (/dev/scd0) недостаточно, то можно создать символические линки -SYMLINK+=”sr%n”. Это выражение создаст в каталоге /dev символический линк с именем sr0 на файл устройство /dev/scd0. Обратите внимание, что используется оператор +=.

Для каждого подключаемого устройства ядро создает соответствующие записи в каталоге /sys. Устройство кроме принадлежности к какой-либо подсистеме и имени, также имеет множество атрибутов, таких как название, модель, серийный номер и другие. Идентифицировать устройства можно и по именам атрибутов. Для этого используется выражение ATTRIB{наименование атрибута}==значение атрибута.

Выполним следующее практическое задание. Напишем правило, которое создаст в каталоге /dev символический линк на подключаемый флеш-накопитель. Флеш-накопитель идентифицируем по серийному номеру. Подключаем флеш-накопитель и с помощью команды dmesg смотрим имя которое было присвоено ядром для этого накопителя:

1
2
3
4
...
[962731.665787] sd 9:0:0:0: Attached scsi generic sg5 type 0
[962731.670693] sd 9:0:0:0: [sde] 7843840 512-byte logical blocks: (4.01 GB/3.74 GiB)
...

Имя накопителя - sde. Далее воспользуемся командой udevinfo. Команда udevinfo - предназначена для просмотра базы данных udev, а также для получения информации об устройствах из каталога /sys. Подробнее о команде в man udevinfo, сейчас рассмотрим только частный случай использования. Следующая команда выдаст информацию об устройстве:

1
2
3
4
5
6
7
8
9
10
11
12
udevinfo -q all -n sde

P: /devices/pci0000:00/0000:00:13.2/usb2/2-2/2-2:1.0/host8/target8:0:0/8:0:0:0/block/sde
N: sde
W: 85
S: block/8:64
S: disk/by-id/usb-OCZ_RALLY2_ST1A9BFE-0:0
...
...
E: DKD_PARTITION_TABLE_SCHEME=mbr
E: DKD_PRESENTATION_NOPOLICY=0
E: DEVLINKS=/dev/block/8:64 /dev/disk/by-id/usb-OCZ_RALLY2_ST1A9BFE-0:0

Нас интересует самая первая строка которая содержит путь к остальной информации об устройстве записанной в каталоге /sys. Чтобы получить эту информацию нужно выполнить команду udevinfo -a -p путь. Чтобы не набирать такой длинный путь можно записать такую команду:

1
udevinfo -a -p $(udevinfo -q path -n sde)

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
...
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{urbnum}=="4811"
    ATTRS{idVendor}=="058f"
    ATTRS{idProduct}=="6387"
    ATTRS{bcdDevice}=="0100"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="4"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{authorized}=="1" 
    ATTRS{serial}=="ST1A9BFE"
...

Теперь можно составить правило. Например, так:

1
SUBSYSTEMS=="usb", ATTRS{serial}=="ST1A9BFE", SYMLINK+="MyFlashRally"

Это правило будет применено ко всем устройствам подсистемы USB у которых серийный номер равен ST1A9BFE. В результате должен быть создан символический линк на такое устройство в каталоге /dev.

Создаем файл /etc/udev/rules.d/10-myudev.rules, вставляем в него наше правило. Отключаем флеш-накопитель, перегружаем демон udev и снова подключаем флеш-накопитель. Выполним команду ls -l /dev | grep MyFlash:

1
2
$ ls -l /dev/ | grep MyFlash
lrwxrwxrwx  1 root root             3 2010-03-19 21:19 MyFlashRally -> sde

Видим, что подсистема udev выполнила наше правило и создала символический линк на файл-устройство sde.

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

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

создано: 2014-09-13
обновлено: 2024-11-13
225



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


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

Операционная система LINUX

Термины: Операционная система LINUX