Ссылка семьи Набора 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).
Идентификатор пакета:
com.apple.iokit.IOADBFamily
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/adb/
Интерфейс Device:
IOKit.framework/Headers/adb
Ссылки и спецификации:
Глава 5 — “Менеджер по ADB” внутреннего Macintosh: устройства (http://developer .apple.com/documentation/Hardware/DeviceManagers/adb/adb.html)
Техническое примечание HW01 (http://developer .apple.com/technotes/hw/hw_01.html)
Руководство по Аппаратным средствам семьи Macintosh, второму выпуску, Apple Computer.
Иерархия классов:
Интерфейс устройства:
Экспортирует интерфейс для чтения и записи регистров на устройствах ADB. Интерфейс определяется в
IOADBLib.h
. Только опрошенные операции режима поддерживаются через эту библиотеку. Операции прерывания только поддерживаются для резидентных ядром клиентов.
ATA и ATAPI
Семья ATA и ATAPI предоставляет поддержку для контроллеров ATA и доступ к ATA и устройствам ATAPI на шине ATA.
Идентификатор пакета:
com.apple.iokit.IOATAFamily
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/ata
Ссылки и спецификации:
Американский национальный институт стандартов (ANSI) — http://www.ansi.org
Национальный комитет для стандартов информационных технологий (NCITS) — http://www.ncits.org
Технический комитет 13 (T13) — http://www.t13.org
Иерархия классов:
Интерфейс Device:
Несмотря на то, что эта семья самостоятельно не экспортирует интерфейсы устройства, семья Model архитектуры SCSI действительно предоставляет интерфейсную устройством поддержку для устройств ATAPI.
Аудио
Семья Audio предоставляет поддержку для включения доступа к устройствам, записывающим или воспроизводящим звуковые сигналы. Это обеспечивает гибкую абстракцию для аудиоустройств, разрешающую неограниченное количество каналов, а также произвольных частот дискретизации, битовых глубин и демонстрационных форматов. Семья Audio использует основу времени с высокой разрешающей способностью, использующуюся в качестве основания для получения информации синхронизации для всего аудио и системы MIDI в OS X. (Сама семья Audio не предоставляет услуг MIDI; они предоставлены платформой Core MIDI.)
Аудио Уровень аппаратной абстракции (Аудио HAL) предоставляет все аудио услуги приложениям в OS X. Аудио к HAL получают доступ через платформу Core Audio и определил ее программируемый интерфейс в AudioHardware.h
в той платформе. Семья Audio обеспечивает ссылку между драйвером аудио и Аудио HAL. Поскольку Аудио, HAL является клиентом семьи Audio, вся функциональность аудиоустройства, доступно клиентам Аудио HAL.
Идентификатор пакета:
com.apple.iokit.IOAudioFamily
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/audio/
Интерфейс Device:
Несмотря на то, что эта семья непосредственно не экспортирует интерфейсы устройства, семья Audio действительно обеспечивает интерфейс устройства, использующийся Аудио Уровнем аппаратной абстракции (Аудио HAL) для доступа ко всем абстракциям, предоставленным семьей Audio (см. описание выше).
Управление питанием:
Семья Audio выполняет большинство задач управления питанием для разделенных на подклассы драйверов устройств. Драйвер аудио не должен вызывать
PMinit
,joinPMtree
,registerPowerDriver
, илиPMstop
, потому что семья Audio заботится об инициализации управления питанием, присоединении драйвера в плоскость питания и регистрацию его с управлением питанием и завершением управления питанием.Несмотря на то, что драйвер аудио не должен реализовывать
IOService
методsetPowerState
, это действительно должно реализоватьIOAudio
методperformPowerStateChange
выполнять работу изменения состояния электропитания ее устройства.Семья Audio реализует определение безделья путем отслеживания активные аудио механизмы, таким образом, пользовательский драйвер аудио никогда не должен вызывать
activityTickle
или определите безделье самостоятельно.
FireWire
Семья FireWire предоставляет поддержку для, и доступ к, устройства присоединили к шине FireWire (FireWire является товарным знаком Apple, применился к стандарту IEEE 1394 года, также иногда известному как я. LINK™).
У семьи FireWire есть сильное сродство с семьей SBP2. Драйвер, использующий транспортный протокол SBP-2, является наиболее распространенным клиентом семьи FireWire.
Идентификатор пакета:
com.apple.iokit.IOFireWireFamily
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/firewire/
Интерфейс Device:
IOKit.framework/Headers/firewire
Ссылки и спецификации:
Торговая ассоциация 1394 года — http://www.1394ta.org
IEEE — http://www.ieee.org/portal/site. Копии спецификации IEEE 1394 года могут быть куплены здесь.
Соединение Разработчика Apple — http://developer.apple.com/hardwaredrivers/firewire/index.html
Иерархия классов
Интерфейс Device:
Обеспечивает интерфейс устройства экспорт интерфейса для отправки и получения пакетов на шине FireWire, и для добавления записи в собственный FireWire компьютера конфигурируют ROM.
В некоторых случаях можно записать драйвер для устройства FireWire вместо для модуля. Примером мог бы быть драйвер для устройства с минимальной конфигурацией ROM (т.е. только с идентификатором поставщика). Однако использованию минимальной конфигурации ROM строго обескураживает Apple. Кроме того, если Ваш драйвер соответствует против модуля FireWire, часто возможно сделать некоторые вещи с устройством.
Графика
Семья Graphics предоставляет поддержку для кадровых буферов и дисплеев (мониторы).
Идентификатор пакета:
com.apple.iokit.IOGraphicsFamily
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/graphics/
Интерфейс Device:
IOKit.framework/Headers/graphics
Иерархия классов:
Интерфейс Device:
Семья Graphics экспортирует несколько интерфейсов устройства, так как большая часть доступа графических устройств от пространства пользователя. Однако уровень Quartz решает доступ в арбитражном порядке к кадровым буферам от пространства пользователя до системы управления окнами или CGDirectDisplay API. Другие уровни, такие как Углерод Рисуют Звездочки, обеспечивают доступ к приложениям к графике.
Графическое ускорение предоставляется модулями, загруженными в пользовательское адресное пространство. Интерфейс CFPlugIn, определенный в
IOGraphicsInterface.h
, реализует двумерное ускорение. Точно так же OpenGL определяет интерфейс загружаемого пакета для трехмерного рендеринга. Поскольку нет никакого стандартного способа реализовать эту функциональность, специфичный для аппаратных средств код может существовать и в коде пространства пользователя и в загруженном ядром драйвере.
Примечание по совместимости 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 состоит из трех уровней:
Менеджер по HID клиент API, обеспечивающий определения и функции Ваше приложение, может использовать для работы с устройствами класса HID
семья HID, обеспечивающая инфраструктуру HID в ядре, такую как базовые классы, отображение памяти пространства пользователя ядра и код организации очередей и синтаксический анализатор HID
драйверы HID, предоставленные Apple
Идентификатор пакета:
com.apple.iokit.IOHIDFamily
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/hid/
иKernel.framework/Headers/IOKit/hidsystem/
Интерфейс Device:
IOKit.framework/Headers/hid/
иIOKit.framework/Headers/hidsystem/
Ссылки и спецификации:
Раздел HID Information USB.org — веб-сайт Разработчиков (http://www .usb.org/developers/hidpage)
Иерархия классов:
Интерфейс Device:
Семья HID экспортирует интерфейс устройства через менеджера по HID клиент API. Менеджер по HID включает
IOHIDLib.h
иIOHIDKeys.h
(расположенный в/System/Library/Frameworks/IOKit.framework/Headers/hid
) которые определяют ключи свойства, описывающие устройство, ключи элемента, описывающие элементы устройства, и функции интерфейса устройства и структуры данных, которые Вы используете для передачи с устройством. После создания интерфейса устройства для выбранного устройства класса HID можно использовать функции интерфейса устройства, чтобы открыть и закрыть устройство, получить новое значение элемента или установить значение элемента.
Клиент куска | Провайдер для куска | |
---|---|---|
Действие | Управляет устройством ввода данных, таким как мышь мультикнопки, шаровой манипулятор или джойстик. | |
Пример | ||
Классы | ||
Примечания | Поддержка самых простых устройств ввода данных предоставлена универсальным драйвером. |
Сеть
Семья Network предоставляет поддержку для сетевых контроллеров. Семья Network состоит из двух логических уровней:
Уровень Controller — этот уровень представляет сетевой контроллер.
Интерфейсный уровень — этот уровень представляет сетевой интерфейс, опубликованный сетевым контроллером.
Идентификатор пакета:
com.apple.iokit.IONetworkingFamily
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/network/
Интерфейс Device:
IOKit.framework/Headers/network/
Иерархия классов:
Интерфейс Device:
Интерфейс устройства для этой семьи обычно является сетевым стеком BSD. Приложения используют интерфейс сокета, предоставленный сетевым стеком для доступа косвенно услуги, предоставленные семьей Network.
Управление питанием:
Семья 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 отключен, который приводит к необходимому отключению порта.
Задействованные драйверы должны также создать объекты IONetworkInterface, регистрирующиеся в DLIL; такая регистрация связывает драйвер с сетевым интерфейсом (например, en0
) в системе. Можно создать Network Kernel Extension (NKE) и вставить его в различных расположениях выше границы IOKit/DLIL для прерывания пакетов, команд или другого трафика события между объектом IONetworkInterface и верхними уровнями.
Другой клиент этой семьи является KDP (Протокол Отладчика ядра) модуль в ядре. Драйвер может создать объект IOKernelDebugger, продающий службы отладки и позволяющий отладку ядра через сетевое оборудование, которым управляет драйвер. Только драйверы, управляющие встроенным сетевым контроллером, требуются, чтобы предоставлять эту поддержку.
Другие классы семьи Network включают:
IOOutputQueue — помогает в организации очередей исходящих пакетов.
IOPacketQueue — представляет обобщение
mbuf
пакет очередь FIFO.IOMbufMemoryCursor — переводит
mbuf
пакеты в рассеяние - собирают список пар длины и физических адресов.IONetworkData — представляет контейнер для единственной группы счетчиков статистики.
IONetworkMedium — представляет носитель единой сети, поддерживаемый сетевым устройством.
Плата ПК
Семья стандарта 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.
Другие классы, предоставленные семьей, включают:
IOPCCard16Device — представляет 16-разрядное устройство стандарта PC Card.
IOPCCard16Enabler — позволяет Вам переопределять процесс конфигурации карты для 16-разрядных карт. Это используется в основном для карт с поврежденными или недостающими записями СНГ.
IOZoomVideoDevice — представляет Видеоустройство Изменения масштаба.
IOPCCardBridge — представляет мост стандарта PC Card; этот класс является подклассом IOPCI2PCIBridge, который является подклассом IOPCIBridge.
Идентификатор пакета:
com.apple.iokit.IOPCCardFamily
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/pccard/
Ссылки и спецификации:
Документация для Обслуживания карт может быть найдена в
doc
каталог источника семьи стандарта PC Card (доступный через Дарвина CVS). Можно также найти в том же расположении демонстрационный 16-разрядный драйвер.Соединение Разработчика Apple — http://developer.apple.com/hardwaredrivers/pci/
Иерархия классов:
Интерфейс Device:
Ни один.
Управление питанием:
Классы
IOPCCardBridge
,IOPCCard16Device
,IOPCCard16Enabler
, иIOCardBusDevice
предоставьте некоторую поддержку управления питанием.
PCI и AGP
Семья PCI и AGP предоставляет поддержку для, и доступ к, устройства, присоединенные к PCI и шинам AGP и мостам PCI.
Идентификатор пакета:
com.apple.iokit.IOPCIFamily
Заголовки в:
Kernel.framework/Headers/IOKit/pci/
Ссылки и спецификации:
Эта семья поддерживает все основные функции Локальной шины PCI 2,1 спецификации.
Специальная группа PCI — http://www.pcisig.com
Соединение Разработчика Apple — http://developer.apple.com/hardwaredrivers/pci/
Иерархия классов:
Интерфейс Device:
Ни один. Приложениям не разрешают прямой доступ к оборудованию для шины PCI для соображений безопасности. Вместо этого приложения должны взаимодействовать с высокоуровневыми службами, такими как предоставленные интерфейсами устройства USB или других семей.
Соответствие свойств:
Семья PCI/AGP разрешает соответствовать на основе, Открывают Firmware или на регистрах PCI. См. описание класса IOPCIDevice в справочной документации для подробных данных.
Проверьте Дарвинский проект Открытого исходного кода, например, драйверы PCI.
Клиент куска | Провайдер для куска | |
---|---|---|
Действие | Управляет устройством, включающим шину 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.
Идентификатор пакета:
com.apple.iokit.IOFireWireSBP2
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/sbp2/
Интерфейс Device:
IOKit.framework/Headers/sbp2
Ссылки и спецификации:
T10 технический комитет — http://www.t10.org
Стандарт SBP-2: ftp://ftp.t10.org/t10/drafts/sbp2/
Иерархия классов:
Интерфейс Device:
Семья SBP2 обеспечивает интерфейс устройства, экспортирующий интерфейс для отправки SBP-2 ORBs к устройству.
Параллель SCSI
Семья SCSI Parallel предоставляет поддержку для, и доступ к, устройства, присоединенные к параллельной шине SCSI. Эта семья поддерживает все основные функции Интерфейса Параллели SCSI 5 (SPI 5) спецификация для параллельных шин.
Идентификатор пакета:
com.apple.iokit.IOSCSIParallelFamily
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/scsi/spi
. Заголовочный файлIOSCSIParallelInterfaceController.h
поддерживает разработку драйвера для платы SCSI.
Ссылки и спецификации:
T10 технический комитет — http://www.t10.org
SCSI Техническая Библиотека информации — http://www.scsilibrary.com/
Иерархия классов:
Интерфейс Device:
Поддержка интерфейса Device параллельных устройств SCSI предоставлена семьей Model архитектуры SCSI. Посмотрите Модель архитектуры SCSI
Модель архитектуры SCSI
Семья Model архитектуры SCSI предоставляет общую клиентскую поддержку для SCSI, USB (Хранение), FireWire SBP-2 и устройства ATAPI. Многие классы этой семьи принадлежат уровню Transport Driver, полученному в итоге в Таблице A-11
Ввести | Классы | Комментарии |
---|---|---|
Связь услуг устройства | IOBlockStorageServices IOReducedBlockServices IOCompactDiscServices IODVDServices | Объекты связи, понимающие APIs от уровня Device Services (Семейство систем хранения) и экспортирующие APIs, что понимают драйверы Логической единицы (в уровне Transport Driver). |
Драйверы Логической единицы | IOSCSIPeripheralDeviceType00 IOSCSIPeripheralDeviceType05 IOSCSIPeripheralDeviceType07 IOSCSIPeripheralDeviceType0E | Управляйте устройствами массового хранения, которые имеют файловые системы или являются загрузочными. |
Кусок типа периферийного устройства | Не действительно кусок Набора I/O, но объект, запрашивающий устройство и определяющий, какой драйвер Логической единицы необходим. | |
Драйверы Протокола SCSI | Транспортный IOSCSIParallelInterface-ProtocolTransport IOUSBMassStorageClass IOATAPIProtocolTransport IOFireWireSerialBusProtocol- | Классы для специфичных для шины драйверов. Несмотря на то, что эти классы принадлежат другим семьям, они - часть разделения на уровни Модели архитектуры SCSI. |
Драйверы Логической единицы и Кусок Типа Периферийного устройства находятся на Прикладном уровне SCSI, наследовавшемся (в конечном счете) от IOSCSIPrimaryCommandsDevice. Драйверы Протокола SCSI находятся на Протокольном уровне SCSI, наследовавшемся от IOSCSIProtocolServices.
Семья Model архитектуры SCSI поддерживает мультимедийные устройства набора команд, такие как диски CD-RW.
Идентификатор пакета:
com.apple.iokit.IOSCSIArchitectureModelFamily
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/scsi-commands/
Интерфейс Device:
IOKit.framework/Headers/scsi-commands
Иерархия классов:
Интерфейс Device:
Библиотеку для семьи Model архитектуры SCSI вызывают SCSITaskLib. Это включает три интерфейса: MMCDeviceInterface, SCSITaskDeviceInterface и SCSITaskInterface. Классом пользователя-клиента является SCSITaskUserClient. Если необходимо получить доступ к устройству Параллели SCSI, и приложение должно работать в версиях OS X до v10.2, видеть Доступ Устройства Параллели SCSI для получения информации о том, как сделать это. Иначе, необходимо использовать интерфейсы устройства в SCSITaskLib для доступа к устройству (см. Устройства модели архитектуры SCSI Доступа для получения информации о том, как сделать это).
Управление питанием:
Семья Model архитектуры SCSI выполняет большую часть установки управления питанием и задач разрушения и для драйверов служб протокола и для драйверов логической единицы. В целом драйвер служб протокола, такой как IOATAPIProtocolTransport, должен быть в состоянии перейти физическое устройство внутренней связи между прочь и на состояниях. С другой стороны, драйвер логической единицы, такой как IOSCSIPeripheralDeviceType05, должен быть в состоянии управлять мультимедийным устройством, поддерживающим все состояния электропитания, определенные спецификацией команд мультимедиа SCSI. Кроме того, драйвер логической единицы, возможно, должен был бы определить, необходимо ли изменение состояния электропитания, блок входящий I/O, когда устройство не находится в надлежащем состоянии электропитания, и указывают состояние электропитания, которое устройство должно ввести во время начальной загрузки.
Как показано в схеме иерархии классов выше, семья Model архитектуры SCSI определяет общий суперкласс для обоих типов драйверов: IOSCSIProtocolInterface
. IOSCSIProtocolInterface
класс определяет много методов управления питанием, разделяющих драйверы на подклассы, может вызвать или, менее часто, переопределить.
При разработке драйвера служб пользовательского протокола Вы не должны выполнять шаги, обрисованные в общих чертах в Реализации Основного Управления питанием Вместо этого необходимо вызвать
IOSCSIProtocolInterface
методInitializePowerManagement
в Вашем водительскомstart
подпрограмма. Затем если существует специфичная для устройства работа, чтобы сделать для обработки изменений состояния электропитания, можно реализовать методыHandlePowerOn
иHandlePowerOff
.Точно так же при разработке пользовательского драйвера логической единицы Вы не должны выполнять шаги, обрисованные в общих чертах в Реализации Основного Управления питанием, Если Ваше устройство соответствует надлежащей спецификации набора команд, Вы не должны переопределять методы в своем драйвере, если Вы не хотите реализовать пользовательскую функциональность управления питанием. Например, Вы могли бы хотеть, чтобы Ваше устройство перешло от активного состояния непосредственно к состоянию сна, вместо через промежуточные состояния между активным и сном.
В
IOSCSIProtocolInterface
класс, семья Model архитектуры SCSI обеспечивает следующие методы, которые может реализовать подкласс драйвера логической единицы:InitializePowerManagement
. Реализация суперкласса этого метода выполняет задачи установки управления питанием. Драйвер подкласса может переопределить этот метод для предоставления информации о состояниях электропитания поддержки устройства.TicklePowerManager
. Реализация суперклассаTicklePowerManager
вызовыactivityTickle
метод, приводящий к запросу для изменения устройства на его активное состояние электропитания. Драйвер подкласса может переопределить этот метод для указания состояния, отличающегося от активного.GetInitialPowerState
. Этот метод используется для указания состояния по умолчанию (обычно активный), устройство должно быть в когда начальные загрузки системы. Когда начальные загрузки системы, драйвер подкласса может переопределить этот метод и указать то состояние, если устройство должно ввести различное состояние.GetNumberOfPowerStateTransitions
. Драйвер подкласса может переопределить этот метод для создания отчетов о числе переходов между самыми низкими и самыми высокими определенными с помощью спецификации состояниями электропитания поддержки устройства. Обратите внимание на то, что системный сон не считается в переходах, потому что это не состояние электропитания, которое устройство вводит добровольно.HandlePowerChange
. Драйвер подкласса переопределяет этот метод для выполнения работы изменения состояния электропитания устройства.
Последовательный
Семья Serial предоставляет поддержку для последовательных потоков символа байта.
Идентификатор пакета:
com.apple.iokit.IOSerialFamily
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/serial/
Интерфейс Device:
IOKit.framework/Headers/serial/
Ссылки и спецификации:
Посмотрите
termios
. Также посмотрите связанный заголовочный файлKernel.framework/Headers/sys/termios.h
Иерархия классов:
Интерфейс Device:
Приложения могут получить доступ к семье Serial через узлы устройства BSD, наиболее распространенный клиент этой семьи. Приложение может считать и записать данные с помощью узлов устройства BSD в
/dev
. Данные также направляются через к PPP через эти узлы устройства. Можно найти ключи и другие свойства для использования в доступе к устройствам вIOKit.framework/Headers/serial/IOSerialKeys.h
.
Клиент куска | Провайдер для куска | |
---|---|---|
Действие | Требует одно-полосы потокового сервиса данных с элементарным управлением потоком. | Обеспечивает одно-полосу потоковый сервис; другими словами, это не может быть основано на пакете. несмотря на то, что это может быть реверсивным. Драйвер может также реализовать управление потоком. Драйвер должен описать службы, это способно к обеспечению. |
Классы | Писатели последовательного порта должны разделить IOSerialDriverSync на подклассы для своих драйверов, затем опубликовать как объекты кусков IOModemSerialStreamSync или классов IORS232SerialStreamSync, или (если ни один из них не достаточен), конкретный подкласс IOSerialStreamSync. Набор I/O использует эти объекты создать надлежащий интерфейс пользователя-клиента для доступа пространства пользователя через BSD. | |
Примечания | Разработчики должны использовать механизм файла устройств BSD, задокументированный в Доступ к Аппаратным средствам Из Приложений. |
Запоминающие устройства.
Семейство систем хранения предоставляет высокоуровневую поддержку для устройств массового хранения произвольного доступа. Это является отдельным от базовой технологии, транспортирующей данные к и от представленного пространства памяти. Интерфейс к технологии базовой передачи объявляется в абстрактном классе IOBlockStorageDevice. Объекты драйвера хранения передают все запросы массового хранения через этот интерфейс, не имея необходимость иметь знание, или связь с, команды и механизмы раньше связывалась с устройством или шиной.
Объем Семейства систем хранения охватывает интерфейс IOBlockStorageDevice, в одном конце (направление провайдера), и интерфейс BSD в другом конце (клиентское направление), с различным драйвером и уровнями носителей в между. Рисунок a-1 иллюстрирует этот штабель.
Каждый уровень состоит из ряда двух объектов — объект драйвера и дочерний мультимедийный объект (или объекты), это публикует. Класс IOStorage является общим базовым классом и для драйвера и для мультимедийных объектов. Это - абстрактный класс, объявляющий основное открытое, близко, чтение и интерфейсы записи, которые должны реализовать подклассы. Это устанавливает протокол, с которым мультимедийные объекты могут говорить с объектами драйвера, не будучи должен быть разделенными на подклассы для каждого драйвера. Чтение и интерфейсы записи обеспечивают доступ уровня байта к пространству памяти.
Класс IOBlockStorageDriver является общим базовым классом для универсальных драйверов блочной системы хранения. Это соответствует и связывается через интерфейс IOBlockStorageDevice и соединяется с остатком от платформы хранения через протокол IOStorage. Это расширяет протокол IOStorage путем реализации надлежащей открытой и близкой семантики, разблокирования для невыровненных передач, опроса относительно выбрасываемых носителей, провожения политики блокировки и извлечения, создания и мультимедийного объекта разъединения, и сбора и создания отчетов о статистике. Семейство систем хранения поддерживает другие основные типы дисков, такие как CD-приводы и DVD-приводы, через подклассы IOBlockStorageDriver. Редко, если когда-нибудь, необходимо разделить универсальный драйвер блочной системы хранения на подклассы для обработки особенностей устройства; скорее необходимо изменить драйверы базовой передачи для исправления любого не соответствующего поведения.
Класс IOMedia является абстракцией дискового устройства произвольного доступа. Это эквивалентно “объекту устройства” или “интерфейсному объекту” в других семьях I/O Kit.
Это представляет присутствие устройства или часть этого.
Это представляет программируемый интерфейс тому устройству.
Это поддерживается отдельным драйвером, реализующим требуемую функциональность.
IOMedia обеспечивает непротиворечивый интерфейс и для устройств реального и для виртуального диска, для подразделений дисков, таких как разделы, для надмножеств дисков, таких как объемы RAID, и т.д. Это расширяет класс IOStorage путем реализации надлежащего открытого, близко, чтения, запишите, и соответствуя семантику для мультимедийных объектов. Его свойства отражают свойства реальных дисковых устройств, включая естественный размер блока и writability.
Другой драйвер и уровни носителей в Семействе систем хранения известны как схемы фильтра. Эти дополнительные уровни разделяют мультимедийные объекты, обеспечивая некоторое манипулирование манипулированием данными или смещением между мультимедийными объектами. Эти уровни могут сложить произвольно на вершине друг друга, поскольку они - и клиент и провайдер мультимедийных объектов. Большинство третьих лиц разработает драйверы для уровня схемы фильтра, если бы не технология базовой передачи. Обратитесь к Схемам Фильтра IOMedia для получения дополнительной информации о разработке драйверов схемы фильтра.
Для получения дополнительной информации о разработке драйверов для технологии базовой передачи обратитесь к документации семьи Модели архитектуры SCSI. Семья Модели архитектуры SCSI является общей технологией базовой передачи для ATAPI, FireWire, SCSI и USB. Это предоставляет непротиворечивую основанную на CDB модель доступа писателям приложения и писателям драйвера и простой инфраструктуре для особенностей корректирующего устройства.
Идентификатор пакета:
com.apple.iokit.IOStorageFamily
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/storage/
Интерфейс Device:
IOKit.framework/Headers/storage
Иерархия классов:
Интерфейс Device:
Посмотрите доступ IOMedia из приложений
Схемы фильтра 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, а также в целях соответствия драйвера схемы фильтра.
Ключ | Ввести | Описание |
---|---|---|
Булевская переменная | Действительно ли носители являются выбрасываемыми? | |
Булевская переменная | Действительно ли носители являются листом в дереве носителей? Это - ложь каждый раз, когда клиентский драйвер схемы фильтра соответствовал против мультимедийного объекта. | |
Число | Естественный размер блока носителей в байтах. | |
Число | Весь размер носителей в байтах. | |
Булевская переменная | Носители в корне дерева носителей? Это - истина для представления физических сред, представления носителей RAID и подобных представлений. | |
Булевская переменная | Действительно ли носители перезаписываемы? | |
Строка | Описание содержания носителей, как вызвано на клиентским драйвером схемы фильтра. (Это описание содержания копируется автоматически с клиентской водительской схемы фильтра | |
Строка | Описание содержания носителей, как подсказал во время создания объекта. Формат строки следует соглашению «MyCompany_MyContent». Используемый для соответствия целей в драйверах схемы фильтра. | |
| Строка | Имя узла устройства 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, устройства массового хранения или сетевые устройства), драйверы привилегированного режима требуются. Когда только один процесс имеет доступ к устройству (например, принтеры и сканеры), драйверы непривилегированного режима предпочтены.
Идентификатор пакета:
com.apple.iokit.IOUSBFamily
Заголовки в:
Резидентный объект ядра:
Kernel.framework/Headers/IOKit/usb/
Интерфейс Device:
IOKit.framework/Headers/usb
Ссылки и спецификации:
USB.org — http://www.usb.org; посмотрите особенно USB Общая Спецификация Класса, версия 1.0, доступный для скачивания в http://www .usb.org/developers/devclass_docs/usbccs10.pdf
Соединение Разработчика Apple — http://developer.apple.com/hardwaredrivers/usb/index.html
Иерархия классов:
Интерфейс Device:
Клиенты непривилегированного режима используют API, который является частью платформы Набора I/O; этот API определяется в
IOKit/usb/IOUSBLib.h
. Клиенты используют абстракции непривилегированного режима IOUSBDevice и классов IOUSBInterface, найденных в ядре для передачи с интерфейсом USB или USB-устройством.
Резидентные ядром драйверы:
Драйверы ядра для физических USB-устройств могут быть записаны или для USB-устройств или для интерфейсов USB. Физическое USB-устройство состоит из дескриптора устройства, который может описать любое число интерфейсов. При записи резидентного ядром драйвера необходимо решить, должен ли драйвер управлять целым USB-устройством или если это должно управлять только интерфейсом USB-устройства.
Семья USB для резидентных ядром драйверов состоит из трех основных классов:
IOUSBDevice: класс IOUSBDevice является абстракцией физического USB-устройства. Существует один класс IOUSBDevice, который инстанцируют для каждого USB-устройства, подключенного к шине. Провайдер для объекта IOUSBDevice является объектом IOUSBController (который является абстракцией контроллера USB).
IOUSBInterface: класс IOUSBInterface является абстракцией одного из интерфейсов USB-устройства. Существует один из этих классов, которые инстанцируют для каждого интерфейса в устройстве. Когда это создается, IOUSBInterface создает объекты IOUSBPipe для каждой конечной точки, описанной в интерфейсном дескрипторе интерфейса. Провайдер для объекта IOUSBInterface является объектом IOUSBDevice.
IOUSBPipe: класс IOUSBPipe содержит методы, использующиеся для связи с USB-устройством или интерфейсом USB. Существует один объект IOUSBPipe, создаваемый для конечной точки управления по умолчанию и еще одного для каждой конечной точки, описанной в интерфейсном дескрипторе. Провайдер для объекта IOUSBPipe является объектом IOUSBInterface.
Резидентные ядром драйверы 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 для получения текущего состояния электропитания восходящего концентратора, Вы могли бы получить устаревшую информацию о состоянии электропитания. Однако, если Ваше устройство изменяется на на состоянии, можно предположить, что восходящие концентраторы фактически включены, даже если еще не были обновлены их значения состояния электропитания.
Драйвер, соответствующий: семья USB использует USB, Общая Спецификация Класса, версия 1.0 для соответствия устройств и интерфейсов к драйверам (для ссылки к этой спецификации, видят раздел выше названных “Ссылок и спецификаций”). Драйвер должен использовать ключи, определенные в этой спецификации для создания соответствующего словаря, определяющего определенную индивидуальность драйвера. Существует две таблицы ключей в спецификации. Первая таблица содержит ключи для нахождения устройств, и вторая таблица содержит ключи для нахождения интерфейсов. Обе таблицы показывают ключи в порядке специфики: первый ключ в каждой таблице определяет самый определенный поиск, и последний ключ определяет самый широкий поиск. Каждый ключ состоит из комбинации элементов, перечисленных в левом столбце таблицы.
Для успешного соответствия необходимо добавить элементы точно одного ключа к индивидуальности. Если Ваша индивидуальность будет содержать комбинацию элементов, не определенных каким-либо ключом, то процесс соответствия не найдет Ваш драйвер. Например, при попытке соответствовать устройству и Вам добавленные стоимости, представляющие, что поставщик устройства, продукт и протокол к Вашему соответствию словаря, процесс соответствия неуспешен, даже если устройство с теми теми же значениями в его дескрипторе устройства в настоящее время представляется куском IOUSBDevice в Реестре I/O. Это вызвано тем, что нет никакого ключа, комбинирующего элементы числа поставщика, номера продуктов и протокола.
Устройства Без семей Набора I/O
Некоторые категории устройств не сделали, чтобы семья поддерживала от Набора I/O. В целом существует три причины, почему определенное устройство не может поддерживаться семьей I/O Kit.
Поддержка определенных устройств предоставлена другими платформами. Набор I/O не является самым надлежащим местом для абстракций, представляющих эти устройства. Примеры таких устройств включают принтеры, сканеры, цифровые фотоаппараты и другие устройства отображения. При разработке драйвера для этой категории устройства необходимо использовать надлежащий SDK обработки изображений.
Для некоторых устройств не возможно обеспечить ряд полезных, общих абстракций. Такие устройства могли бы включать аппаратные ключи безопасности USB, карты сбора данных и другие специфичные для поставщика устройства. Эти устройства не совместно используют достаточно большое количество характеристик для создания создания семей I/O Kit стоящим. Например, несмотря на то, что аппаратные ключи безопасности все подключение через USB, нет никакого легко определенного набора абстракций, характерных для всех таких устройств. Семья I/O Kit не оказала бы существенную помощь разработчикам. Нельзя предположить, однако, что семья обязана писать новый драйвер. Во многих случаях,
IOService
класс обеспечивает все, чего драйвер требует для записи драйвера «семьи меньше».Для многих устройств возможно определить ряд полезных абстракций; однако, Apple не принял решение создать семью по одной или более причинам. Эти устройства могут быть частью технологии, которая не является общим рынком Macintosh. Или, у инженеров Apple может не быть достаточных внутренних экспертных знаний с определенными устройствами для создания лучшего определения семьи. В этих случаях возможность существует для сторонних разработчиков для расширения модели Набора I/O путем разработки собственных семей. Кроме того, семьи, разработанные в соответствии с Исходной Лицензией Общественности Apple, можно передать обратно Apple для возможного включения в будущие выпуски OS X.
Устройства отображения
Нет никакой семьи I/O Kit для устройств отображения (камеры, принтеры и сканеры). Вместо этого поддерживайте для определенных характеристик устройства отображения, обрабатывается кодом пространства пользователя (см. Управляющие устройства Извне Ядра для дальнейшего обсуждения). Разработчики, которые должны поддерживать устройства отображения, должны использовать надлежащий SDK обработки изображений.
Цифровое видео
Для добавления возможностей цифрового видео к программному обеспечению используйте QuickTime APIs.
С последовательным доступом устройства (лентопротяжные устройства)
Нет, в настоящее время, никакой семьи I/O Kit, специально предназначенной для с последовательным доступом устройств, таких как лентопротяжные устройства. Однако сторонние разработчики могут использовать интерфейс устройства SAM для создания сменных компонентов для таких устройств.
Телефонные устройства
Нет, в настоящее время, никакой семьи I/O Kit для телефонных устройств. Apple оценивает планы относительно семьи Telephony для будущего.
Специфичные для поставщика устройства
Для некоторых устройств не возможно обеспечить ряд полезных, общих абстракций. Поскольку семьи определяют набор абстракций, совместно использованных всеми устройствами в семье, не выполнимо создать семью для этих устройств.
В большинстве случаев, однако, семья не необходима для записи драйвера для этих устройств. Разработчики должны запустить путем наследования функциональности от IOService
, тогда используйте GetProperty
и SetProperty
вызовы для передачи с их драйвером. Во многих случаях это должно быть достаточным. В некоторых случаях, однако, такие как карты сбора данных, требующие высокой пропускной способности, разработчик должен создать их собственный пользовательский клиент (для интерфейсного устройством плагина). Такие объекты могут обеспечить общую память и интерфейсы вызова процедуры к библиотеке пространства пользователя (см. IOUserClient.h
). Можно найти несколько хороших примеров в IOKitExamples на Дарвинском сайте Открытого исходного кода.