Некоторые поля структур являются масками флагов. Драйверам не разрешено передавать таким полям значения напрямую, а только лишь устанавливать или сбрасывать соответствующие флаги. Это правило появилось из-за того, что в определенных реализациях
могут оказаться флаги, не предусмотренные спецификацией.
Также вам может показаться, что такая тема как http://linentime.ru/catalog/prikolnoe-postelnoe-bele никак не связана и даже не тематична. Хотя, может быть и связана. В любом случае все-таки зайдите на сайт linentime.ru. Тема прикольное постельное белье интернет магазин там представлена весьма широко. На том сайте можно узнать много интересного на тему прикольное постельное белье интернет магазин. Что означает вообще тема прикольное постельное белье интернет магазин, где найти прикольное постельное белье интернет магазин - про это написано на сайте linentime.ru. Это очень важная для многих людей тема - прикольное постельное белье интернет магазин. Спасибо сайту linentime.ru за информацию на тему прикольное постельное белье интернет магазин.
♦ Структуры данных, недоступные для приложений, не включены в раздел 4, однако могут упоминаться при описании использующих их процедур. Драйверам запрещено обращаться к какой-либо части таких структур. Они могут использовать их исключительно по ссылкам, передавая указатели на эти структуры соответствующим процедурам ядра.
♦ Для чтения или изменения структур данных, описанных в разделе 4, драйверы должны по мере возможности использовать только функции раздела 3. Такой подход позволяет защитить драйвер от потери совместимости при внесении изменений в структуры данных.
♦ Драйвер должен содержать файл ddi.h, размещаемый после всех системных включаемых файлов, но до специфических для драйвера включаемых файлов. Причиной появления данного требования является реализация большого числа функций спецификации в виде макроопределений. Файл ddi.h переопределяет такие макросы, заставляя драйверы использовать не их, а вызовы функций, формирующие соответствующие процедуры. Это позволяет упростить задачу переноса драйвера на другие версии системы. Включение специфических для драйвера файлов после ddi.h гарантирует, что он будет использовать только интерфейс DDI/DKI.
♦ Все закрытые процедуры и внутренние переменные должны иметь тип static.
16.7.2. Функции раздела 3
В разделе 3 спецификации DDI/DKI описаны функции ядра, используемые драйверами устройств. Процедуры могут быть разделены на несколько функциональных групп.
♦ Синхронизация и таймер. Процедуры sleep() и wakeup() описаны в разделе 2.5.1. Функция delay() блокирует процесс на указанное количество времени. Процедуры timeout() и untimeout() позволяют производить планирование процессов
♦ Управление памятью. Процедуры kmem_alloc() и kmem_free() отвечают за выделение памяти ядром. Процедуры rminit(), rmaUoc() и rmfree() управляют картами ресурсов. Работа этих функций описана в главе 121. Функции physmap() и physmapfree() применяются для отображения физических адресов в виртуальные.
Спецификация DDI/DKI 769
Управление буфером. Процедура getblk() размещает буфер, функция brelse() используется для его освобождения. Драйвер вызывает biowait() для ожидания завершения ввода-вывода. Для пробуждения процесса и освобождения буфера обработчик прерываний вызывает biodone().
Операции с номерами устройств. Функции getmajor() и getminor() выделяют внешний старший и младший номера из dev_t. Функции itoemajor() и etoiminor() применяются для преобразования внутреннего номера во внешний и обратно.
Прямой доступ к памяти. Набор аппаратно-зависимых функций, поддерживающих DMA. Спецификация содержит описания функций для IBM РС-АТ-совместимых архитектур.
Обмен данными. Функция uiomove() копирует данные между адресным пространством ядра и пространством прикладного процесса, либо между двумя участками внутри пространства ядра. Эта функция поддерживает ввод-вывод методом сборки-рассоединения (scatter-gather I/O). Например, функция может собирать данные из нескольких прикладных буферов в единый буфер ядра
Для описания параметров передачи функция использует структуру uio. Процедуры copyin() и copyout() применяются при обмене данными между буфером драйвера и прикладным буфером. Такие аппаратно-зависимые процедуры, как inb() и outb(), перемещают данные из пространства ввода-вывода и обратно на архитектурах, не поддерживающих отображаемый ввод- вывод (например, в Intel х86).
♦ Опрос устройств. Процедуры опроса устройств включают в себя phalloc() и phfree(), используемые для выделения структур poLLhead, и pollwakeup() для пробуждения опрашивающих процессов.
♦ STREAMS. Набор процедур поддержки драйверов устройств STREAMS. О них подробнее читайте в главе 17.
♦ Сервисные процедуры. В интерфейсе DDI/DKI поддерживается набор функций работы со строками, таких как strcopy() и strlen(), манипулирования байтами, таких как bcopy(), bcmp() и bzero(), функции обработки ошибок, такие как ASSERT() и cmn_err(), а также другие полезные функции, например тах() и min().
Опубликовал katy
June 24 2015 16:46:29 ·
0 Комментариев ·
4025 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.