Глава 14, Модель устройства в Linux

Предыдущая  Содержание  Следующая V*D*V

Глава 14

 

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

 

Модель устройства версии 2.6 обеспечивает такую абстракцию. Сейчас она широко используется в ядре для поддержки широкого спектра задач, включая:

 

Управление питанием и выключение системы

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

 

Взаимодействие с пользовательским пространством

Реализация виртуальной файловой системы sysfs тесно связана с моделью устройства и выставляет структуру, предоставленную ей. Предоставление информации о системе для пользовательского пространства и ручек управления для изменения рабочих параметров всё чаще выполняется через sysfs и, следовательно, через модель устройства.

 

Устройства, подключаемые без выключения системы

Компьютерное оборудование становится все более динамичным; периферийные устройства могут приходить и уходить по прихоти пользователя. Механизм горячего подключения, используемый в ядре для обработки и (особенно) взаимодействия с пользовательским пространством при подключении и отключении устройств, управляется с помощью модели устройства.

Классы устройств

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

 

Жизненные циклы объектов

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

 

Модель устройства Linux представляет собой сложную структуру данных. Рассмотрим, например, Рисунок 14-1, который показывает (в упрощённой форме) небольшую часть структуры модели устройства, связанной с USB мышью. Вниз по центру диаграммы мы видим часть дерева ядра "устройств", которое показывает, как мышь подключена к системе. Дерево "шины" прослеживает, что подключено к каждой шине, в то время как поддерево "классы" озабочено функциями, предоставляемыми устройствами, независимо от того, как они подключены. Дерево модели устройства даже на простой системе содержит сотни узлов, похожих на показанные на диаграмме; оно является сложной структурой данных для визуализации в целом.

 

Рисунок 14-1. Небольшая часть модели устройства

Рисунок 14-1. Небольшая часть модели устройства

 

По большей части, код модели устройства в Linux заботится обо всех этих деталях без навязывания себя авторам драйверов. Оно в основном находится на заднем плане; прямым взаимодействием с моделью устройства, как правило, занимается логика шинного уровня и другие разные подсистемы ядра. Как результат, многие авторы драйверов могут полностью игнорировать модель устройства и доверить ей позаботиться о себе самой.

 

Однако, есть моменты, когда хорошо иметь понимание модели устройства. Есть моменты, когда модель устройства "выходит наружу" из-под других слоёв; например, обычный код DMA (который мы встретим в Главе 15) работает со struct device. Вы можете захотеть использовать некоторые из возможностей модели устройства, таких как подсчёт ссылок и соответствующие возможности, предоставляемые kobjects. Взаимодействие с пользовательским пространством через sysfs также является функцией модели устройства; эта глава рассказывает, как работает такое взаимодействие.

 

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

 

Многие читатели могут рассматривать эту главу как дополнительный материал, которые не требует прочтения до конца в первый раз. Тех, кто заинтересовался работой модели устройства Linux призываем, однако, двигаться вперёд, так как мы углубляемся в низкоуровневые детали.

Предыдущая  Содержание  Следующая