Linux Kernel (Ядро линукса) (часть 2)


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

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

Однако в таком случае файл устройства не может быть создан раз и навсегда. Он должен создаваться сразу после инициализации драйвера с надлежащими старшим и младшим номерами. Поэтому необходим стандартный способ экспортирования номеров устройств, используемых каждым драйвером, в приложения, работающие в режиме пользователя. Как мы видели ранее, модель драйвера устройства предлагает элегантное решение: старший и младший номера хранятся в атрибутах dev в подкаталогах каталога /sys/class.

Динамическое создание файлов устройств

Ядро Linux может создавать файлы устройств динамически. Нет необходимости заполнять каталог /dev файлами всех мыслимых аппаратных устройств, поскольку файлы устройств могут быть созданы по требованию”. Благодаря модели драйвера устройства ядро Linux 2.6 позволяет сделать это весьма простым способом. В системе необходимо установить набор программ режима пользователя, известный под коллективным именем инструментарий udev”.
При запуске системы содержимое каталога /dev стирается, а программа udev сканирует подкаталоги каталога /sys/class в поисках файлов dev. Для каждого такого файла (который представляет собой комбинацию из старшего и младшего номеров логического устройства, поддерживаемого ядром) программа создает соответствующий файл устройства в каталоге /dev. Кроме того, она назначает имена файлам устройств и создает символьные ссылки согласно информации в файле конфигурации, чтобы была соблюдена традиционная схема именования файлов устройств в Unix. В конце концов, каталог /dev заполняется файлами устройств, поддерживаемых ядром данной системы, и только ими.

Нередко файл устройства создается уже после инициализации системы. Это происходит либо при загрузке модуля, содержащего драйвер ранее не поддерживаемого устройства, либо при горячем” подключении устройства, например, к порту USB. Инструментарий udev может автоматически создать соответствующий файл устройства, потому что модель драйвера устройства поддерживает горячее” подключение. Как только ядро обнаруживает новое устройство, оно запускает новый процесс, выполняющий сценарий оболочки /sbin/hotplug, работающий в режиме пользователя3, передавая ему полезную информацию об обнаруженном устройстве через переменные окружения. Сценарий режима пользователя обычно читает файл конфигурации и выполняет операции, необходимые для завершения инициализации нового устройства. Если инструментарий udev установлен, этот сценарий создает также соответствующий файл устройства в каталоге /dev.

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...