Ссылка семьи Набора I/O

Это приложение описывает каждую из семей I/O Kit подробно, обращая особое внимание на отношения клиента/провайдера. Для большинства семей это обеспечивает диаграмму иерархии классов. Если семья экспортирует интерфейс устройства, таким образом позволяя приложения устройствам доступа, представленным семьей, это также говорит Вам. Необходимо серьезно рассмотреть проявление интерфейсного устройством подхода прежде, чем попытаться записать резидентный ядром драйвер. Для получения информации об использовании интерфейсов устройства см., что документ Получает доступ к Аппаратным средствам Из Приложений.

Некоторые категории устройств в настоящее время не поддерживаются семьей I/O Kit. Если Ваше устройство попадает в неподдерживаемую категорию, Вы могли бы быть в состоянии записать драйвер «семьи меньше», использовать SDK кроме Набора I/O или создать новую семью. Посмотрите Устройства Без семей Набора I/O для подробных данных.

Можно счесть полезным исследовать исходный код на семью I/O Kit или определенный драйвер устройства. Чтобы сделать это, посетите Дарвинские Выпуски, выберите надлежащую версию OS X и нажмите Source для просмотра доступных исходных проектов.

ADB

Семья ADB предоставляет поддержку для, и доступ к, устройства, присоединенные к Системной шине Apple (ADB). Это обеспечивает абстракцию для драйверов контроллера шины ADB (IOADBController) и другого для драйверов устройств ADB (IOADBDevice).

Идентификатор пакета:

Заголовки в:

Ссылки и спецификации:

Иерархия классов:

../art/adbfamily.gif

Интерфейс устройства:

Табличные a-1  Клиенты и провайдеры семьи ADB

Клиент куска

Провайдер для куска

Действие

Устройства дисков, включающие порт ADB.

Управляет контроллером шины ADB

Пример

Драйвер для мыши ADB является клиентом семьи ADB, но является элементом семьи HID (в классе IOHIPointing).

Классы

Экземпляр IOADBDevice соответствует Ваш драйвер и загружает его в ядро. Ваш драйвер связывается с его семьей через экземпляр IOADBDevice.

Драйверы контроллера шины ADB должны наследоваться от класса IOADBController, как определено в заголовочном файле IOADBController.h

Примечания

Общие клиентские семьи включают семью HID (IOHIPointing и, классы IOHIKeyboard) и семью Graphics (класс IODisplay).

Все текущее оборудование для шины ADB, произведенное Apple, хорошо поддерживается драйверами, включенными с OS X. Сторонние разработчики не должны должны быть писать драйверы для семьи ADB, за исключением адаптеров ADB-USB.

ATA и ATAPI

Семья ATA и ATAPI предоставляет поддержку для контроллеров ATA и доступ к ATA и устройствам ATAPI на шине ATA.

Идентификатор пакета:

Заголовки в:

Ссылки и спецификации:

Иерархия классов:

../art/atafamily.gif

Интерфейс Device:

Табличные a-2  Клиенты и провайдеры семьи ATA и ATAPI

Клиент куска

Провайдер для куска

Действие

Управляет устройством, подключенным к шине ATA.

Управляет контроллером шины ATA.

Пример

Жесткий диск ATA или диск DVD-ROM ATAPI. Семейство систем хранения является наиболее распространенной семьей для клиентов.

Классы

Клиенты этого соответствия семьи против экземпляра IOATADevice, один из которых создается и публикуется драйвером контроллера для каждого ATA или устройством ATAPI, обнаруживающимся на шине. Они используют услуги, предоставленные тем объектом связаться с физическим устройством на шине.

Примечания

Клиенты семьи ATA должны дать команды ATA/ATAPI, инкапсулировавшие объектом IOATACommand. Этот объект команды инкапсулирует всю информацию, необходимую для кодирования единственной команды ATA/ATAPI, а также результатов выполнения команды.

Сторонние разработчики никогда не должны должны быть создавать элемент семьи ATA/ATAPI.

Аудио

Семья Audio предоставляет поддержку для включения доступа к устройствам, записывающим или воспроизводящим звуковые сигналы. Это обеспечивает гибкую абстракцию для аудиоустройств, разрешающую неограниченное количество каналов, а также произвольных частот дискретизации, битовых глубин и демонстрационных форматов. Семья Audio использует основу времени с высокой разрешающей способностью, использующуюся в качестве основания для получения информации синхронизации для всего аудио и системы MIDI в OS X. (Сама семья Audio не предоставляет услуг MIDI; они предоставлены платформой Core MIDI.)

Аудио Уровень аппаратной абстракции (Аудио HAL) предоставляет все аудио услуги приложениям в OS X. Аудио к HAL получают доступ через платформу Core Audio и определил ее программируемый интерфейс в AudioHardware.h в той платформе. Семья Audio обеспечивает ссылку между драйвером аудио и Аудио HAL. Поскольку Аудио, HAL является клиентом семьи Audio, вся функциональность аудиоустройства, доступно клиентам Аудио HAL.

Идентификатор пакета:

Заголовки в:

Интерфейс Device:

Управление питанием:

Табличные a-3  Клиенты и провайдеры семьи Audio

Клиент куска

Провайдер для куска

Действие

Резидентный ядром клиент не необходим. Используйте платформу Core Audio для доступа к Аудио HAL.

Или записи или воспроизводят звуковые сигналы.

Пример

Звуковые карты PCI, внешний USB или аудиоустройства FireWire и любое другое устройство, производящее или использующее аудио.

Классы

Драйвер аудио должен содержать подклассы и IOAudioDevice и IOAudioEngine.

Примечания

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

FireWire

Семья FireWire предоставляет поддержку для, и доступ к, устройства присоединили к шине FireWire (FireWire является товарным знаком Apple, применился к стандарту IEEE 1394 года, также иногда известному как я. LINK™).

У семьи FireWire есть сильное сродство с семьей SBP2. Драйвер, использующий транспортный протокол SBP-2, является наиболее распространенным клиентом семьи FireWire.

Идентификатор пакета:

Заголовки в:

Ссылки и спецификации:

Иерархия классов

../art/firewirefamily.gif

Интерфейс Device:

Табличные a-4  Клиенты и провайдеры семьи FireWire

Клиент куска

Провайдер для куска

Действие

Драйверы модуля: связь Дисков с модулем устройства, включающего шину FireWire. Драйверы протокола: Добавляет поддержка протокола, разрешающего одноранговую связь или эмуляцию по FireWire.

Управляет контроллером шины FireWire.

Пример

Драйверы модуля: драйвер для FireWire динамики. Драйверы протокола: драйвер, обеспечивающий TCP/IP по FireWire.

Классы

Драйверы модуля: экземпляр IOFireWireUnit, представляя модуль, найденный в конфигурации устройства ROM, является соответствующим против драйвера, и это загружается в ядро. Драйвер связывается с семьей FireWire через этот экземпляр. Драйверы протокола: экземпляр IOFireWireController соответствует драйвер протокола и загружает его в ядро. Драйвер связывается с семьей FireWire через этот экземпляр.

Классы драйвера должны наследоваться от класса IOFireWireController, как определено в заголовочном файле IOFireWireController.h.

Примечания

Наиболее распространенная клиентская семья является семьей SBP2.

OS X поставляет драйверы для всех контроллеров шины Open Host Controller Interface (OHCI). Сторонние разработчики обычно не должны должны быть писать драйверы контроллера шины для семьи FireWire.

В некоторых случаях можно записать драйвер для устройства FireWire вместо для модуля. Примером мог бы быть драйвер для устройства с минимальной конфигурацией ROM (т.е. только с идентификатором поставщика). Однако использованию минимальной конфигурации ROM строго обескураживает Apple. Кроме того, если Ваш драйвер соответствует против модуля FireWire, часто возможно сделать некоторые вещи с устройством.

Графика

Семья Graphics предоставляет поддержку для кадровых буферов и дисплеев (мониторы).

Идентификатор пакета:

Заголовки в:

Иерархия классов:

../art/graphicsfamily.gif

Интерфейс Device:

Табличные a-5  Клиенты и провайдеры семьи Graphics

Клиент куска

Провайдер для куска

Действие

Реализации поддерживают для кадрового буфера.

Пример

Классы

Драйверы кадрового буфера должны быть подклассами класса IOFramebuffer. Класс IONDRVFramebuffer поддерживает собственное Питание графические драйверы Mac OS PC (известный как “ndrv«s); эта поддержка является автоматической, если драйверы записаны правильно в спецификацию.

Примечания

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

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

Примечание по совместимости NDRV

Графические драйверы NDRV должны функционировать в OS X, если они правильно записаны. Если они правильно не записаны, много различий в среде выполнения OS X могли бы заставить их перестать работать, игнорироваться, или даже вызвать катастрофический отказ. Если Вы пишете драйвер NDRV, соблюдаете эти правила:

  • Получите доступ к аппаратным средствам карты с помощью виртуального обращения. Не предполагайте, что карта отображается в ее физически присвоенный адрес. В Mac OS 9, карты NDRV отображаются непосредственные, но в OS X, это не гарантируется. Получите виртуальные адреса для аппаратных средств своей карты через AAPL,address свойство, как задокументировано в “Разработанные Карты и Драйверы для Macintosh Питания PCI”.

  • Соединитесь только на собственных библиотеках драйвера, которые являются NameRegistryLib, DriverServicesLib и VideoServicesLib. Если Ваша карта соединится на InterfaceLib или какой-либо другой библиотеке прикладного уровня, то это, вероятно, не будет работать над OS X.

  • Не получайте доступ к низкой памяти; выполнение так вызывает катастрофический отказ (паника ядра) в OS X.

  • Вызовы реестра имени не поддерживаются от уровня прерывания в Mac OS 9 или OS X. Они возвращают ошибки в OS X.

  • Вторичные прерывания не поддерживаются в OS X. Нет никакой потребности фальсифицировать вертикальные пустые прерывания, если Ваша карта не поддерживает их — просто не создают службу VBL. Mac OS 9 продолжает требовать, чтобы служба VBL была установлена для перемещения курсора в устройство.

  • Размер штабеля ограничивается 16K на OS X; любой вызов NDRV должен использовать не больше, чем 4K штабеля.

Если Вы хотите внести условные изменения во время выполнения в свой код NDRV, свойство AAPL,iokit-ndrv установлен в свойствах устройства PCI, прежде чем OS X будет использовать Ваш драйвер.

OS X поддерживает 32 бита на пиксель, смешанные альфой курсоры в аппаратных средствах. Если Ваше устройство поддерживает смешанный альфой прямой цветной курсор, оно должно вызвать VSLPrepareCursorForHardwareCursor с этими полями набор HardwareCursorDescriptor запись:

bitDepth = 32 maskBitDepth = 0 numColors = 0colorEncodings = NULL

hardwareCursorData буфер в HardwareCursorInfo должен указать на буфер 32 бит на пиксель, данные ARGB. Данные не предварительно умножаются на альфа-канал.

HID

Класс Human Interface Device (HID) является одним из нескольких классов устройства, описанных USB (Универсальная последовательная шина) архитектура. Класс HID состоит прежде всего из использования людей устройств для управления операциями компьютерной системы. Примеры таких устройств класса HID включают:

В настоящее время OS X предоставляет менеджеру по HID, чтобы позволить приложениям получать доступ к джойстикам, аудиоустройствам и недисплеям Apple. Можно также использовать менеджера по HID для получения информации от другого типа устройства класса HID, UPS (источник бесперебойного питания) устройство. Устройства UPS совместно используют ту же структуру дескриптора отчета как другие устройства класса HID и предоставляют информацию, такую как напряжение, текущее, и частота. OS X менеджер по HID состоит из трех уровней:

Идентификатор пакета:

Заголовки в:

Ссылки и спецификации:

Иерархия классов:

../art/hidfamily.gif

Интерфейс Device:

Табличные a-6  Клиенты и провайдеры семьи HID

Клиент куска

Провайдер для куска

Действие

Управляет устройством ввода данных, таким как мышь мультикнопки, шаровой манипулятор или джойстик.

Пример

Классы

Примечания

Поддержка самых простых устройств ввода данных предоставлена универсальным драйвером.

Сеть

Семья Network предоставляет поддержку для сетевых контроллеров. Семья Network состоит из двух логических уровней:

Идентификатор пакета:

Заголовки в:

Иерархия классов:

../art/networkfamily.gif

Интерфейс Device:

Управление питанием:

Семья Network выполняет большую часть установки управления питанием и задач разрушения для разделенных на подклассы драйверов устройств. Если Вы разрабатываете драйвер для сетевого устройства, которое может быть пассивно питанием, которым управляют (который описывает большинство сетевых устройств), можно удовлетворить большинство основных потребностей управления питанием путем переопределения IONetworkController метод registerWithPolicyMaker и вызов IOService метод registerPowerDriver.

В Вашей реализации registerWithPolicyMaker, создайте массив IOPMPowerState структуры, чтобы определить состояния электропитания Вашего устройства и передать их в registerPowerDriver. Затем возвратитесь kIOReturnSuccess от registerWithPolicyMaker сказать семье Network, что Ваш драйвер может реагировать на вызовы управления питанием. (Реализация по умолчанию registerPowerDriver возвраты kIOReturnUnsupported.) Следующий фрагмент кода показывает один способ сделать это:

IOReturn MyEthernetDriver::registerWithPolicyMaker( IOService * policyMaker )
{
IOReturn ioreturn;
static IOPMPowerState powerStateArray[ kPowerStateCount ] = {
   { 1,0,0,0,0,0,0,0,0,0,0,0 },
   { 1,kIOPMDeviceUsable,kIOPMPowerOn,kIOPMPowerOn,0,0,0,0,0,0,0,0 }
};
fCurrentPowerState = kPowerStateOn;
ioreturn = policyMaker->registerPowerDriver( this, powerStateArray, kPowerStateCount );
return ioreturn;
}

Большинство драйверов сетевого устройства обрабатывает изменения питания, связанные со сном и следом в их реализациях IONetworkController методы enable и disable. Обратите внимание на то, что семья Network включает устройство, когда она переходит к состоянию электропитания для который kIOPMDeviceUsable флаг установлен. Когда в настоящее время включаемое устройство перемещается в состояние электропитания для который kIOPMDeviceUsable флаг не установлен, семья Network отключает его.

Если необходимо выполнить дополнительные задачи обработать сон и след, можно переопределить IOService метод setPowerState. Знайте, однако, что семья Network вызовет disable перед приемом вызова к Вашему setPowerState реализация, если новое состояние электропитания помещает устройство в неприменимое состояние. С другой стороны, вызовы семьи Network enable после получения a setPowerState вызовите для перемещения устройства в применимое состояние.

Если Ваш драйвер сетевого устройства выполняет DMA, необходимо переопределить IOService метод systemWillShutdown, который был представлен в OS X v10.5. Это особенно важно для драйверов, работающих в основанных на Intel компьютерах Macintosh. В Вашей реализации systemWillShutdown, необходимо удостовериться, что механизм DMA отключен, который приводит к необходимому отключению порта.

Табличные a-7  Клиенты и провайдеры семьи Network

Клиент куска

Провайдер для куска

Действие

Управляет сетевым контроллером.

Пример

Контроллеры на Ethernet, Кольце с маркерным доступом и адаптерах FDDI.

Классы

Драйвер должен быть экземпляром подкласса класса контроллера, реализующего универсальную функциональность сетевого контроллера, такую как IONetworkController или класса контроллера, полагающегося на IONetworkController для специализации для поддержки контроллера Ethernet (IOEthernetController). Посмотрите обсуждение классов семьи Network ниже для получения дополнительной информации.

Примечания

Драйверы обычно являются не клиентами семьи Network. Основной системный клиент этой семьи является DLIL (Уровень Интерфейса Канала передачи данных) модуль в сетевом стеке BSD.

Задействованные драйверы должны также создать объекты IONetworkInterface, регистрирующиеся в DLIL; такая регистрация связывает драйвер с сетевым интерфейсом (например, en0) в системе. Можно создать Network Kernel Extension (NKE) и вставить его в различных расположениях выше границы IOKit/DLIL для прерывания пакетов, команд или другого трафика события между объектом IONetworkInterface и верхними уровнями.

Другой клиент этой семьи является KDP (Протокол Отладчика ядра) модуль в ядре. Драйвер может создать объект IOKernelDebugger, продающий службы отладки и позволяющий отладку ядра через сетевое оборудование, которым управляет драйвер. Только драйверы, управляющие встроенным сетевым контроллером, требуются, чтобы предоставлять эту поддержку.

Другие классы семьи Network включают:

Плата ПК

Семья стандарта PC Card поддерживает 32-разрядные PC-карты (CardBus), 16-разрядные PC-карты (I/O и память), и Видеокарты Изменения масштаба. Эта поддержка охватывает контроллеры, которые совместимы с наборами регистров Yenta и ExCA (Intel 82365). Обслуживание карт семьи Apple стандарта PC Card, по большей части, совместимо со стандартом Card™ на 1 997 пк.

Карты CardBus являются по существу устройствами PCI в факторе другой формы. Если Вы пишете драйвер для карты CardBus, можно принять решение разделить на подклассы или от IOPCIDevice или от IOCardBusDevice. Посмотрите ссылочный раздел “PCI and AGP” для получения дополнительной информации о семье PCI.

Другие классы, предоставленные семьей, включают:

Идентификатор пакета:

Заголовки в:

Ссылки и спецификации:

Иерархия классов:

../art/pccardfamily.gif

Интерфейс Device:

Управление питанием:

PCI и AGP

Семья PCI и AGP предоставляет поддержку для, и доступ к, устройства, присоединенные к PCI и шинам AGP и мостам PCI.

Идентификатор пакета:

Заголовки в:

Ссылки и спецификации:

Иерархия классов:

../art/pcifamily.gif

Интерфейс Device:

Соответствие свойств:

Проверьте Дарвинский проект Открытого исходного кода, например, драйверы PCI.

Табличные a-8  Клиенты и провайдеры семьи PCI и AGP

Клиент куска

Провайдер для куска

Действие

Управляет устройством, включающим шину PCI.

Управляет контроллером шины PCI или мостом PCI.

Пример

Драйвер для PCI плата контроллера SCSI является клиентом семьи PCI, но является элементом семьи SCSI Parallel.

Классы

Драйвер связывается с его семьей через экземпляр IOPCIDevice или IOAGPDevice. Экземпляр одного из этих классов соответствует Ваш драйвер и загружает его в ядро.

Драйверы члена семьи PCI должны наследоваться от класса IOPCIBridge.

Примечания

Наиболее распространенными клиентскими семьями является USB, Сеть, SCSI, Графика и семьи Audio.

OS X поддерживает большую часть оборудования для шины PCI с рядом универсальных драйверов. В целом сторонние разработчики не должны писать драйверы для семьи PCI и AGP, если они не создают блок расширения PCI или разрабатывают драйверы для моста PCI со специальными характеристиками, не адресуемыми универсальными драйверами.

SBP-2

Семья SBP2 (Протокол последовательной шины 2) предоставляет поддержку для, и доступ к, устройства, присоединенные к шине FireWire, которые используют транспортный протокол SBP-2. Семья SBP2 является клиентом семьи FireWire. Устройства SBP-2 требуют, чтобы работал FireWire.

Идентификатор пакета:

Заголовки в:

Ссылки и спецификации:

Иерархия классов:

../art/sbp2family.gif

Интерфейс Device:

Табличные a-9  Клиенты и провайдеры семьи SBP2

Клиент куска

Провайдер для куска

Действие

Управляет устройством, использующим транспортный протокол SBP-2.

Предоставляет транспортные услуги SBP-2

Пример

Драйвер для типичного жесткого диска FireWire является клиентом семьи SBP2, но является элементом семейства массового хранения.

Классы

Клиентский драйвер связывается с семьей SBP2 через экземпляр IOFireWireSBP2LUN. Экземпляр этого класса создается для каждого ЛУНА (Число Логической единицы) найденный в конфигурации каталог модуля ROM; этот экземпляр соответствует Ваш драйвер и загружает его в ядро.

Драйверы члена семьи SBP2 должны наследоваться от класса IOFireWireSBP2Target.

Примечания

Наиболее распространенной клиентской семьей является Семейство систем хранения.

Параллель SCSI

Семья SCSI Parallel предоставляет поддержку для, и доступ к, устройства, присоединенные к параллельной шине SCSI. Эта семья поддерживает все основные функции Интерфейса Параллели SCSI 5 (SPI 5) спецификация для параллельных шин.

Идентификатор пакета:

Заголовки в:

Ссылки и спецификации:

Иерархия классов:

../art/scsifamily.gif

Интерфейс Device:

Табличные A-10  Клиенты и провайдеры семьи SCSI Parallel

Клиент куска

Провайдер для куска

Действие

Управляет устройством, включающим шину SCSI.

Управляет хост-адаптером SCSI или чипом контроллера.

Пример

Драйвер для диска диска SCSI является клиентом семьи SCSI Parallel, но участником Семейства систем хранения.

Классы

Клиентский драйвер связывается с семьей SCSI Parallel через экземпляр IOSCSIDevice. Ваш драйвер соответствовал бы на этом экземпляре и был бы загружен в ядро. Другой класс интереса является IOSCSICommand.

Поскольку семья SCSI Parallel в настоящее время поддерживает параллельные шины, задействованные драйверы используют класс IOSCSIParallelInterfaceController.

Примечания

Общие клиентские семьи включают Транспортные Драйверы для устройств хранения.

OS X включает универсальные драйверы для большинства встроенных аппаратных средств SCSI. В целом сторонние разработчики не должны писать драйверы, которые являются элементами семьи SCSI Parallel, если они не разрабатывают драйверы для платы расширения.

Модель архитектуры SCSI

Семья Model архитектуры SCSI предоставляет общую клиентскую поддержку для SCSI, USB (Хранение), FireWire SBP-2 и устройства ATAPI. Многие классы этой семьи принадлежат уровню Transport Driver, полученному в итоге в Таблице A-11

  Семья Table A-11 SCSI Architecture Model — уровень Transport Driver

Ввести

Классы

Комментарии

Связь услуг устройства

IOBlockStorageServices IOReducedBlockServices IOCompactDiscServices IODVDServices

Объекты связи, понимающие APIs от уровня Device Services (Семейство систем хранения) и экспортирующие APIs, что понимают драйверы Логической единицы (в уровне Transport Driver).

Драйверы Логической единицы

IOSCSIPeripheralDeviceType00 IOSCSIPeripheralDeviceType05 IOSCSIPeripheralDeviceType07 IOSCSIPeripheralDeviceType0E

Управляйте устройствами массового хранения, которые имеют файловые системы или являются загрузочными.

Кусок типа периферийного устройства

IOSCSIPerpheralDeviceNub

Не действительно кусок Набора I/O, но объект, запрашивающий устройство и определяющий, какой драйвер Логической единицы необходим.

Драйверы Протокола SCSI

Транспортный IOSCSIParallelInterface-ProtocolTransport IOUSBMassStorageClass IOATAPIProtocolTransport IOFireWireSerialBusProtocol-

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

Драйверы Логической единицы и Кусок Типа Периферийного устройства находятся на Прикладном уровне SCSI, наследовавшемся (в конечном счете) от IOSCSIPrimaryCommandsDevice. Драйверы Протокола SCSI находятся на Протокольном уровне SCSI, наследовавшемся от IOSCSIProtocolServices.

Семья Model архитектуры SCSI поддерживает мультимедийные устройства набора команд, такие как диски CD-RW.

Идентификатор пакета:

Заголовки в:

Иерархия классов:

../art/scsiarchmodelfamily.gif

Интерфейс Device:

Управление питанием:

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

Как показано в схеме иерархии классов выше, семья Model архитектуры SCSI определяет общий суперкласс для обоих типов драйверов: IOSCSIProtocolInterface. IOSCSIProtocolInterface класс определяет много методов управления питанием, разделяющих драйверы на подклассы, может вызвать или, менее часто, переопределить.

Последовательный

Семья Serial предоставляет поддержку для последовательных потоков символа байта.

Идентификатор пакета:

Заголовки в:

Ссылки и спецификации:

Иерархия классов:

../art/serialfamily.gif

Интерфейс Device:

Табличные A-12  Клиенты и провайдеры семьи Serial

Клиент куска

Провайдер для куска

Действие

Требует одно-полосы потокового сервиса данных с элементарным управлением потоком.

Обеспечивает одно-полосу потоковый сервис; другими словами, это не может быть основано на пакете. несмотря на то, что это может быть реверсивным. Драйвер может также реализовать управление потоком. Драйвер должен описать службы, это способно к обеспечению.

Классы

Писатели последовательного порта должны разделить IOSerialDriverSync на подклассы для своих драйверов, затем опубликовать как объекты кусков IOModemSerialStreamSync или классов IORS232SerialStreamSync, или (если ни один из них не достаточен), конкретный подкласс IOSerialStreamSync. Набор I/O использует эти объекты создать надлежащий интерфейс пользователя-клиента для доступа пространства пользователя через BSD.

Примечания

Разработчики должны использовать механизм файла устройств BSD, задокументированный в Доступ к Аппаратным средствам Из Приложений.

Запоминающие устройства.

Семейство систем хранения предоставляет высокоуровневую поддержку для устройств массового хранения произвольного доступа. Это является отдельным от базовой технологии, транспортирующей данные к и от представленного пространства памяти. Интерфейс к технологии базовой передачи объявляется в абстрактном классе IOBlockStorageDevice. Объекты драйвера хранения передают все запросы массового хранения через этот интерфейс, не имея необходимость иметь знание, или связь с, команды и механизмы раньше связывалась с устройством или шиной.

Объем Семейства систем хранения охватывает интерфейс IOBlockStorageDevice, в одном конце (направление провайдера), и интерфейс BSD в другом конце (клиентское направление), с различным драйвером и уровнями носителей в между. Рисунок a-1 иллюстрирует этот штабель.

  Штабель драйвера Семейства систем хранения рисунка a-1
Storage family driver stack

Каждый уровень состоит из ряда двух объектов — объект драйвера и дочерний мультимедийный объект (или объекты), это публикует. Класс IOStorage является общим базовым классом и для драйвера и для мультимедийных объектов. Это - абстрактный класс, объявляющий основное открытое, близко, чтение и интерфейсы записи, которые должны реализовать подклассы. Это устанавливает протокол, с которым мультимедийные объекты могут говорить с объектами драйвера, не будучи должен быть разделенными на подклассы для каждого драйвера. Чтение и интерфейсы записи обеспечивают доступ уровня байта к пространству памяти.

Класс IOBlockStorageDriver является общим базовым классом для универсальных драйверов блочной системы хранения. Это соответствует и связывается через интерфейс IOBlockStorageDevice и соединяется с остатком от платформы хранения через протокол IOStorage. Это расширяет протокол IOStorage путем реализации надлежащей открытой и близкой семантики, разблокирования для невыровненных передач, опроса относительно выбрасываемых носителей, провожения политики блокировки и извлечения, создания и мультимедийного объекта разъединения, и сбора и создания отчетов о статистике. Семейство систем хранения поддерживает другие основные типы дисков, такие как CD-приводы и DVD-приводы, через подклассы IOBlockStorageDriver. Редко, если когда-нибудь, необходимо разделить универсальный драйвер блочной системы хранения на подклассы для обработки особенностей устройства; скорее необходимо изменить драйверы базовой передачи для исправления любого не соответствующего поведения.

Класс IOMedia является абстракцией дискового устройства произвольного доступа. Это эквивалентно “объекту устройства” или “интерфейсному объекту” в других семьях I/O Kit.

IOMedia обеспечивает непротиворечивый интерфейс и для устройств реального и для виртуального диска, для подразделений дисков, таких как разделы, для надмножеств дисков, таких как объемы RAID, и т.д. Это расширяет класс IOStorage путем реализации надлежащего открытого, близко, чтения, запишите, и соответствуя семантику для мультимедийных объектов. Его свойства отражают свойства реальных дисковых устройств, включая естественный размер блока и writability.

Другой драйвер и уровни носителей в Семействе систем хранения известны как схемы фильтра. Эти дополнительные уровни разделяют мультимедийные объекты, обеспечивая некоторое манипулирование манипулированием данными или смещением между мультимедийными объектами. Эти уровни могут сложить произвольно на вершине друг друга, поскольку они - и клиент и провайдер мультимедийных объектов. Большинство третьих лиц разработает драйверы для уровня схемы фильтра, если бы не технология базовой передачи. Обратитесь к Схемам Фильтра IOMedia для получения дополнительной информации о разработке драйверов схемы фильтра.

Для получения дополнительной информации о разработке драйверов для технологии базовой передачи обратитесь к документации семьи Модели архитектуры SCSI. Семья Модели архитектуры SCSI является общей технологией базовой передачи для ATAPI, FireWire, SCSI и USB. Это предоставляет непротиворечивую основанную на CDB модель доступа писателям приложения и писателям драйвера и простой инфраструктуре для особенностей корректирующего устройства.

Идентификатор пакета:

Заголовки в:

Иерархия классов:

../art/storagefamily.gif

Интерфейс Device:

Схемы фильтра IOMedia

Схема фильтра является драйвером для объектов IOMedia. Это действует и как как клиент и как провайдер мультимедийных объектов. Драйвер схемы фильтра получает запросы массового хранения через свой краткий обзор read и write интерфейсы функции членства, в которых это может выполнить манипулирование данными или сместить манипулирование перед передачей запроса к его провайдеру объект IOMedia (или объекты). Существует несколько различных видов схем фильтра носителей:

  • Непосредственный — схема сжатия блочного уровня или схема шифрования, например, соответствовали бы против одного АЙОМЕДИИ, возражают и производят один объект ребенка Айомедии представление несжатого или незашифрованного содержания.

  • One-many — Схема выделения разделов, например, соответствовала бы против одного АЙОМЕДИИ, возражают и производят многократные объекты ребенка Айомедии, представляющие содержание каждого отличного раздела (см. Схемы выделения разделов для получения дополнительной информации).

  • Many-one — Схема RAID, например, соответствовала бы против многократных объектов АЙОМЕДИИ и произвела бы один объект ребенка Айомедии представление содержания RAIDed.

  • Many-many — Many-many схема соответствовала бы против многократных объектов АЙОМЕДИИ и произвела бы многократные объекты ребенка Айомедии.

Драйвер схемы фильтра наследовался от класса IOStorage и обязательно участвует в категории соответствия IOStorage (значение IOMatchCategory в индивидуальности).

Схемы выделения разделов

OS X включает две стандартных схемы выделения разделов:

  • IOApplePartitionScheme, стандартный драйвер схемы выделения разделов Apple

  • IOFDiskPartitionScheme, стандартный драйвер схемы выделения разделов PC

Драйвер схемы выделения разделов наследовался от класса IOPartitionScheme (который наследовался от IOStorage), соответствия против единственного родителя IOMedia, и производит один или несколько дочерних объектов IOMedia для каждого раздела, который это должно представлять. Это участвует в категории соответствия IOStorage, как со всеми драйверами схемы фильтра.

Схема выделения разделов не должна быть разделена на подклассы для использования определенного разработчиками содержания в разделе. Содержание раздела представлено отличным объектом IOMedia, опубликованным как дочерний элемент драйвера схемы выделения разделов. Каждый дочерний мультимедийный объект имеет свойства, далее идентифицирующие информацию, известную о разделе, такой довольное подсказка, размер и естественный размер блока. Довольной поле подсказки является строка, сформированная так же к известным строкам «Apple_Driver» и «Apple_HFS», или по определению, в форме «MyCompany_MyContent». Это разрешает разделам с определенным разработчиками содержанием быть идентифицированными уникально (когда раздел создается), и разрешает драйверам схемы фильтра соответствовать против такого содержания автоматически, никогда не зондируя диск.

Свойства IOMedia

Таблица A-13 перечисляет стандартный набор свойств для всех объектов IOMedia. Эти свойства могут использоваться в качестве соответствия свойств в поиске Набора I/O и уведомлении APIs, а также в целях соответствия драйвера схемы фильтра.

Табличные A-13  свойства (IOMedia) Семейства систем хранения

Ключ

Ввести

Описание

kIOMediaEjectableKey

Булевская переменная

Действительно ли носители являются выбрасываемыми?

kIOMediaLeafKey

Булевская переменная

Действительно ли носители являются листом в дереве носителей? Это - ложь каждый раз, когда клиентский драйвер схемы фильтра соответствовал против мультимедийного объекта.

kIOMediaPreferredBlockSizeKey

Число

Естественный размер блока носителей в байтах.

kIOMediaSizeKey

Число

Весь размер носителей в байтах.

kIOMediaWholeKey

Булевская переменная

Носители в корне дерева носителей? Это - истина для представления физических сред, представления носителей RAID и подобных представлений.

kIOMediaWritableKey

Булевская переменная

Действительно ли носители перезаписываемы?

kIOMediaContentKey

Строка

Описание содержания носителей, как вызвано на клиентским драйвером схемы фильтра. (Это описание содержания копируется автоматически с клиентской водительской схемы фильтра kIOMediaContentMaskKey свойство.) Формат строки следует соглашению «MyCompany_MyContent» и значениям по умолчанию к Довольному, которое строка Подсказки не должна никакая клиентская схема фильтра соответствовать против объекта. Используемый для информационных целей в пользовательских дисковых утилитах.

kIOMediaContentHintKey

Строка

Описание содержания носителей, как подсказал во время создания объекта. Формат строки следует соглашению «MyCompany_MyContent». Используемый для соответствия целей в драйверах схемы фильтра.

kIOBSDNameKey

Строка

Имя узла устройства BSD носителей. Имя динамично присваивается во время создания объекта. Используемый для доступа для чтения и доступа для записи к содержанию носителей (см. Доступ IOMedia Из Приложений).

Мультимедийный объект также имеет уникальный путь Набора I/O, который может быть получен через стандартный Набор I/O APIs.

Доступ к IOMedia из приложений

Стандартный механизм пространства пользователя для доступа к данным по части носителей является интерфейсом устройства BSD. В то время как доступ к приложениям обычного пользователя предоставлен через, интерфейс устройства BSD абстрагирован на уровне файловой системы посредством отличного чтения и записи APIs read и write системные вызовы (см. соответствующие страницы справочника для большего количества документации). Свойства и структура физического диска представлены в иерархии объектов Реестра Набора I/O и в свойствах каждого мультимедийного объекта, включая имя интерфейса устройства BSD, присвоенное мультимедийному объекту.

Определенный мультимедийный объект может быть сочтен через стандартный поиск Набора I/O и уведомление APIs. Словарь, используемый для описания IOMedia, мог бы относиться к определенным значениям свойств к определенному рабочему тракту или пути дерева устройств, или к определенному подклассу носителей. CD, например, появляется как подкласс IOCDMedia, со свойствами, надлежащими CD, такой как kIOCDMediaTOCKey. Такие свойства могут быть объединены для описания мультимедийного объекта уникально в системе или обобщены для идентификации определенного вида носителей с многократными возможными соответствиями (возвратился в итераторе).

Углерод APIs и Какао, APIs обеспечивает механизмы для отправки уведомлений о файловой системе, монтируют и размонтировали события, а также для доступа к файлу в файловой системе. Приложение может получить связанное имя интерфейса устройства BSD для данной файловой системы через GetVolParms (vMDeviceID) в Углероде и через getmntinfo в BSD. Связанный объект IOMedia может быть получен для данного имени интерфейса устройства BSD через Набор I/O APIs с помощью kIOBSDNameKey свойство.

USB

Семья USB предоставляет поддержку для, и доступ к, устройства, присоединенные к Универсальной последовательной шине (USB).

Два основных типа драйверов являются клиентами этой семьи: драйверы привилегированного режима и драйверы непривилегированного режима. Когда клиенты драйвера также находятся в ядре (таком как устройства HID, устройства массового хранения или сетевые устройства), драйверы привилегированного режима требуются. Когда только один процесс имеет доступ к устройству (например, принтеры и сканеры), драйверы непривилегированного режима предпочтены.

Идентификатор пакета:

Заголовки в:

Ссылки и спецификации:

Иерархия классов:

../art/usbfamily.gif

Интерфейс Device:

Резидентные ядром драйверы:

Семья USB для резидентных ядром драйверов состоит из трех основных классов:

Резидентные ядром драйверы USB являются клиентами семьи, которая предоставляет транспортные услуги и является участниками семьи, от которой они получают свое наследование классов. Например, драйвер для клавиатуры USB является клиентом объекта IOUSBInterface (т.е. объект IOUSBInterface является провайдером для драйвера), но драйвер клавиатуры является элементом IOHIDFamily. Семья USB обеспечивает механизм для достигания нажатий клавиш в клавиатуре. Драйвер клавиатуры поддерживает методы от семьи HID для отправки тех нажатий клавиш к системе событий.

Как упомянуто выше, можно записать драйвер для соответствия против USB-устройства или интерфейса USB. IOUSBDevice или классы IOUSBInterface являются провайдерами для драйверов. Сами драйверы могут быть элементами отдельной семьи (такими как IOHIDFamily или IOAudioFamily) или могут быть элементами семьи IOService.

Управление питанием:

Все драйверы USB-устройства в ядре должны реализовать, по крайней мере, основное управление питанием для увеличения экономии электроэнергии в системе. В OS X v10.5, семья USB представила IOUSBHubPolicyMaker объект, который является абстракцией концентратора USB, включающего возможности управления питанием. Когда Вы разрабатываете драйвер USB-устройства для выполнения в OS X v10.5 и позже и Вы вызываете joinPMtree, Ваш драйвер присоединяется в плоскость питания как дочерний элемент питания IOUSBHubPolicyMaker объект. (В более ранних версиях OS X родитель питания драйвера USB-устройства был IOUSBController объект, представляющий контроллер, к которому было присоединено устройство.)

Ваш драйвер USB-устройства может связаться с IOUSBHubPolicyMaker объект определить состояние электропитания его концентратора. Если, например, необходимо обработать неизбежное завершение работы по-другому от перезапуска, это может быть полезно. IOUSBHubPolicyMaker поддержка объектов следующие пять состояний электропитания для концентратора:

USB-устройства редко поддерживают больше, чем первые четыре из этих состояний электропитания, и многие поддерживают только на, сон, и прочь. Если Вы разрабатываете драйвер для USB-устройства, поддерживающего дремоту, необходимо вызвать SuspendDevice при переключении состояния электропитания устройства для дремоты, таким образом, концентратор может приостановить порт, к которому присоединяется устройство. Если драйверы для всех устройств, присоединенных к концентратору, делают это, концентратор может ввести состояние дремоты, которое может привести к значительной экономии электроэнергии для системы. Однако, если Ваш драйвер вызывает SuspendDevice также не изменяя состояние электропитания устройства для дремоты Вы препятствуете тому, чтобы концентратор ввел состояние дремоты и сэкономил электроэнергию.

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

Во время изменения состояния электропитания обратите внимание на то, что состояние электропитания концентратора USB не обновляется, пока концентратор не получает a powerChangeDone вызовите, который не происходит, пока все нисходящие концентраторы и устройства не получили их powerChangeDone вызовы. Если Вы используете, это означает это getPowerState вызовите представленный в OS X v10.5 для получения текущего состояния электропитания восходящего концентратора, Вы могли бы получить устаревшую информацию о состоянии электропитания. Однако, если Ваше устройство изменяется на на состоянии, можно предположить, что восходящие концентраторы фактически включены, даже если еще не были обновлены их значения состояния электропитания.

Табличные A-14  Клиенты и провайдеры семьи USB

Клиент куска

Провайдер для куска

Действие

Управляет устройством, включающим USB-порт.

Управляет контроллером Шины USB.

Пример

Драйвер клавиатуры является интерфейсным драйвером; его провайдер является драйвером для USB-устройства. Драйвер клавиатуры наследовался от класса IOHIKeyboard — это - элемент семьи HID.

Классы

Драйверы IOUSBDevice могут только связаться с USB-устройством через канал управления по умолчанию. Драйверы IOUSBInterface имеют объекты IOUSBPipe, создаваемые для всех конечных точек, описанных в интерфейсном дескрипторе для текущей конфигурации. Драйвер использует эти объекты связаться с устройством.

Драйверы члена семьи USB должны наследоваться от класса IOUSBController.

Примечания

Общие клиентские семьи включают семью HID (IOHIPointing и классы IOHIKeyboard) и Транспортные Драйверы для устройств Семейства систем хранения. Большинство клиентов привилегированного режима семьи USB является интерфейсными драйверами и только иногда драйверами устройств.

OS X включает универсальные драйверы, поддерживающие все контроллеры шины Open Host Controller Interface (OHCI). В целом сторонние разработчики не должны писать драйверы для семьи USB.

Драйвер, соответствующий: семья USB использует USB, Общая Спецификация Класса, версия 1.0 для соответствия устройств и интерфейсов к драйверам (для ссылки к этой спецификации, видят раздел выше названных “Ссылок и спецификаций”). Драйвер должен использовать ключи, определенные в этой спецификации для создания соответствующего словаря, определяющего определенную индивидуальность драйвера. Существует две таблицы ключей в спецификации. Первая таблица содержит ключи для нахождения устройств, и вторая таблица содержит ключи для нахождения интерфейсов. Обе таблицы показывают ключи в порядке специфики: первый ключ в каждой таблице определяет самый определенный поиск, и последний ключ определяет самый широкий поиск. Каждый ключ состоит из комбинации элементов, перечисленных в левом столбце таблицы.

Для успешного соответствия необходимо добавить элементы точно одного ключа к индивидуальности. Если Ваша индивидуальность будет содержать комбинацию элементов, не определенных каким-либо ключом, то процесс соответствия не найдет Ваш драйвер. Например, при попытке соответствовать устройству и Вам добавленные стоимости, представляющие, что поставщик устройства, продукт и протокол к Вашему соответствию словаря, процесс соответствия неуспешен, даже если устройство с теми теми же значениями в его дескрипторе устройства в настоящее время представляется куском IOUSBDevice в Реестре I/O. Это вызвано тем, что нет никакого ключа, комбинирующего элементы числа поставщика, номера продуктов и протокола.

Устройства Без семей Набора I/O

Некоторые категории устройств не сделали, чтобы семья поддерживала от Набора I/O. В целом существует три причины, почему определенное устройство не может поддерживаться семьей I/O Kit.

Устройства отображения

Нет никакой семьи I/O Kit для устройств отображения (камеры, принтеры и сканеры). Вместо этого поддерживайте для определенных характеристик устройства отображения, обрабатывается кодом пространства пользователя (см. Управляющие устройства Извне Ядра для дальнейшего обсуждения). Разработчики, которые должны поддерживать устройства отображения, должны использовать надлежащий SDK обработки изображений.

Цифровое видео

Для добавления возможностей цифрового видео к программному обеспечению используйте QuickTime APIs.

С последовательным доступом устройства (лентопротяжные устройства)

Нет, в настоящее время, никакой семьи I/O Kit, специально предназначенной для с последовательным доступом устройств, таких как лентопротяжные устройства. Однако сторонние разработчики могут использовать интерфейс устройства SAM для создания сменных компонентов для таких устройств.

Телефонные устройства

Нет, в настоящее время, никакой семьи I/O Kit для телефонных устройств. Apple оценивает планы относительно семьи Telephony для будущего.

Специфичные для поставщика устройства

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

В большинстве случаев, однако, семья не необходима для записи драйвера для этих устройств. Разработчики должны запустить путем наследования функциональности от IOService, тогда используйте GetProperty и SetProperty вызовы для передачи с их драйвером. Во многих случаях это должно быть достаточным. В некоторых случаях, однако, такие как карты сбора данных, требующие высокой пропускной способности, разработчик должен создать их собственный пользовательский клиент (для интерфейсного устройством плагина). Такие объекты могут обеспечить общую память и интерфейсы вызова процедуры к библиотеке пространства пользователя (см. IOUserClient.h). Можно найти несколько хороших примеров в IOKitExamples на Дарвинском сайте Открытого исходного кода.