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


Драйверы

Каждый драйвер в модели драйверов устройств описывается объектом device driver,
Объект device driver имеет четыре метода для обработки "горячего" подключения, поддержки plug-and-play и управления питанием. Метод probe вызывается, когда драйвер шины обнаруживает устройство, которым, вероятно, может управлять данный драйвер. Соответствующая функция должна прозондировать аппаратную часть, чтобы выполнить дальнейшую проверку устройства. Метод remove вызывается для устройства, допускающего "горячее" подключение, когда оно отсоединяется. Он также вызывается для каждого устройства, управляемого драйвером, когда выгружается сам драйвер. Методы shutdown, suspend И resume вызываются ДЛЯ устройства, КОГДа ядро ДОЛЖНО изменить его режим энергопотребления.

Счетчик ссылок, включенный в объект kobj, встроенный в дескриптор, позволяет отслеживать обращения к объекту device driver. Счетчик увеличивается при вызове функции get driverO и уменьшается при вызове put_driver.

Функция driver register вставляет НОВЫЙ объект device driver В МОДеЛЬ драйвера устройства и автоматически создает для него новый каталог в файловой системе sysfs. И наоборот, функция driver unregister о удаляет драйвер из модели.

Как правило, объект device driver статически встраивается в более крупный дескриптор. Например, драйверы PCI описываются структурами pci driver. Поле driver этой структуры является объектом device driver, а другие поля специфичны для шины PCI.

Шины

Каждый тип шины, поддерживаемый ядром, описывается объектом bus type. Каждый объект bus type включает в себя встроенную подсистему. Подсистема, которая хранится в переменной bus subsys, объединяет все подсистемы, встроенные в объекты bus type. Подсистема bus subsys ассоциирована с каталогом /sys/bus. Например, существует каталог /sys/bus/pci, ассоциированный с типом шины PCI. Подсистема, относящаяся к конкретной шине, как правило, содержит только два набора kset, называемых drivers и devices (и соответствующих ПОЛЯМ drivers И devices объекта bus type).

Набор drivers содержит дескрипторы device driver всех драйверов, имеющих отношение к данному типу шины, а набор devices содержит дескрипто
ры device всех устройств шины данного типа. Поскольку каталоги, соответствующие объектам устройств, уже содержатся в файловой системе sysfs в каталоге /sys/devices, каталог устройств подсистемы, относящейся к данной шине, содержит символьные ссылки на каталоги, включенные в /sys/devices. Функции bus for each drv и bus for each dev перебирают элементы списков драйверов и устройств соответственно.

Метод match выполняется, когда ядро должно проверить, может ли данный драйвер управлять данным устройством. Функция, реализующая этот метод, как правило, проста, потому что она ищет идентификатор устройства в таблице идентификаторов, поддерживаемых драйвером. Метод hotpiug выполняется, когда устройство регистрируется в модели драйвера. Функция, реализующая этот метод, должна использовать переменные окружения для передачи информации, специфичной для шины, программе, работающей в режиме пользователя, которая таким образом оповещается о наличии нового доступного устройства (см. разд. "Регистрация драйвера устройства” далее в этой главе). Наконец, методы suspend и resume выполняются, когда устройство на шине данного типа должно поменять режим энергопотребления.

Предыдущая страница | 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...