Мегаобучалка Главная | О нас | Обратная связь


Разработка шаблона драйвера устройства



2020-03-17 243 Обсуждений (0)
Разработка шаблона драйвера устройства 0.00 из 5.00 0 оценок




 

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

Интуитивно ясно, что должна существовать какая-то программная прослойка между аппаратным и программным обеспечением, выполняющая “согласующие” и “унифицирующие” действия. Эта прослойка работает напрямую с аппаратурой, а прикладное и системное программное обеспечение имеет дело только с этой интерфейсной прослойкой. Этой программной прослойкой являются драйвера устройств.

Рассмотрим внутреннюю организацию шины USB.

Система USB подразделяется на три логических уровня с определенными правилами взаимодействия. Устройство содержит интерфейсную, логическую и функциональную части. Все передачи инициируются хостом, а периферийные устройства могут лишь реагировать на его запросы. Хост также делится на три части – интерфейсную, системную и программное обеспечение.

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

Уровень клиентского программного обеспечения в хосте обычно представляется драйвером устройства.

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

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

Хост контроллер передает данные периферийному устройству в виде кадров. Каждая передача состоит из одной или нескольких транзакций. Каждая транзакция состоит из пакетов. Каждый пакет состоит из идентификатора пакета, данных и контрольной суммы.

Существует четыре различных типа передачи:

управляющие передачи – для конфигурирования устройства во время подключения, для управления устройство и получения статусной информации в процессе работы;

передачи массивов данных – для обеспечения гарантированной доставки данных, однако время доставки неограниченно;

передачи по прерываниям – передача одиночных пакетов данных небольшого размера за ограниченное время;

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

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

Запрос к устройству и его параметры передаются в виде конфигурационного пакета. Стандартные запросы к устройству – это:

получение состояния (GET_STATUS) – позволяет определить состояние устройства, интерфейса или конечной точки;

сброс свойства (CLEAR_FEATURE) – для запрета свойства или состояния;

разрешение свойства (SET_FEATURE);

задание адреса на шине (SET_ADDRESS) – для присвоения устройству адреса;

получение дескриптора (GET_DESCRIPTOR) – для получения дескриптора устройства, конфигурации или точки;

передача дескриптора (SET_DESCRIPTOR) – позволяет дополнить существующий дескриптор или добавить новый дескриптор устройства, конфигурации или строки;

получение кода конфигурации (GET_CONFIGURATION) - устройство выдает код своей текущей конфигурации;

задание кода конфигурации (SET_CONFIGURATION) – позволяет задать устройству новую конфигурацию.

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

Стандартный дескриптор устройства содержит основную информацию об USB-устройстве и его конфигурациях. Устройство должно иметь только один такой дескриптор, однако если устройство может работать в нескольких режимах (на разных скоростях), то оно должно иметь еще и уточняющий дескриптор.

Дескриптор конфигурации содержит информацию об одной из возможных конфигураций устройства.

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

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

Дескриптор строки (необязателен) содержит текст в формате UNICODE.

Также могут быть использованы специфические дескрипторы.

В Windows 2000/XP драйверная поддержка реализуется на основе WDM. С точки зрения WDM существует три типа драйверов:

драйвер шины – для обслуживания шины;

функциональный драйвер – основной драйвер устройства;

драйвер фильтра – для поддержания дополнительной функциональности устройства.

Основные процедуры драйвера WDM – это:

DriverEntry – точка входа драйвера;

AddDevice – создание объекта драйвера;

UnLoad – для возможности выгрузки драйвера без перезагрузки системы;

Модель WDM предоставляет следующие типы устройств:

Hub Device (hubclass.sys) – хабы (устройство, обеспечивающее дополнительные порты на шине USB) ;

HID (Human Interface Device) Device (hidclass.sys) – мыши, клавиатуры, джойстики;

Audio Device (sysaudio.sys) – звуковые колонки, виртуальные MIDI-устройства;

Mass Storage Device (usbstor.sys) – устройства хранения данных, флеш-диски;

Printer (usbprinter.sys) – принтеры;

Communication Device (usb8023.sys, mdismp.sys) – устройства коммуникации (модемы, сетевые карты).

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

При разработке драйвера устройства использовалась программная среда NuMega Driver Studio 2.0, а также классы драйверов устройств и библиотеки в составе Windows 2000 DDK.

После установки Visual Studio появляется дополнительное окно с возможностями запуска помощника создания драйвера, запуска помощника создания сетевого драйвера, изменения переменных окружения и компиляции с помощью утилиты Build из DDK.

Библиотека классов Driver Studio представляет собой надстройку над чистым WDM API, что избавляет программиста от использования довольно запутанных низкоуровневых функций и позволяет выполнять все необходимые операции. Базовым классом устройства является класс KDriver, который предоставляет базовые функции драйвера. Для управления оборудованием используется класс KDevice, который обрабатывает запросы на чтение/запись к устройству. Класс KIrp представляет собой оболочку для структуры пакета запроса. Класс KRegistryKey позволяет обращаться к данным драйвера, сохраненным в реестре.

Собственно для работы с USB-устройствами предназначены следующие классы:

KUsbInterface – предоставляет функции для работы с USB-интерфейсами, драйвер может создавать столько интерфейсов, сколько их описано в дескрипторе устройства;

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

Принцип работы с этими классами следующий:

в конструкторе экземпляра KDriver создается экземпляр класса KPnpDevice (для поддержки Plug-n-Play);

в конструкторе экземпляра KPnpDevice создаются экземпляры классов – KUsbLowerDevice (базовый класс для устройств нижнего уровня), KUsbInterface, KUsbPipe;

в функции драйвера OnStartDevice выполняется активизация одной из точек конфигурации при помощи вызова функции m_Lower.ActivateConfiguration();

при получении запроса ввода/вывода производятся следующие действия – создание и инициализация пакетов, передача запросу драйверу нижнего уровня, передача данных программе-инициатору запроса.

Для создания шаблона драйвера нужно создать проект и выбрать архитектуру создаваемого драйвера (WDM или Windows NT 4.0). Выбираем модель WDM. Теперь необходимо выбрать шину, на которой будет располагаться устройство. Выбираем шину USB. Для USB-устройства необходимо указать идентификатор производителя (USB Vendor ID) и идентификатор продукта (USB Product ID), они должны соответствовать значениям в дескрипторе устройства.

Указанные значения идентификаторов будут записаны в inf-файл.

Следующий шаг – задание набора конечных точек. У управляющего микроконтроллера 8 конечных точек.

Теперь необходимо выбрать функции драйвера. Возможные варианты – Read (обработка запросов на чтение), Write (обработка запросов на запись), Flush (поддержка функции сброса буферов), Device Control (поддержка пользовательских запросов), Internal Device Control (обработка запросов от других драйверов) и Cleanup (обработка запросов на очистку буферов обмена).

Драйвер для режима звуковой карты должен иметь только функцию Write. А драйвер для режима флеш-диска должен иметь функции Read и Write.

Следующий шаг – выбор способа обработки запросов:

None – запросы не буферизуются в очереди;

Driver Managed – драйвер содержит одну или более очередей, в которых хранятся запросы ввода/вывода;

System Managed – драйвер использует только одну очередь сообщений.

Выберем для обоих драйверов – System Managed.

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

Последний шаг – задание кодов функции Device Control и задание дополнительных настроек – создание тестового приложения для драйвера (необязательно), настройки отладки и создания лога событий.

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

Для доработки шаблона драйвера требуется дописать функции ввода/вывода и по необходимости расширить список интерфейсов каждого драйвера.

Рассмотрим процесс установки драйвера.

Скомпилировав проекты получим два драйвера – AT91UsbSounCard и AT91UsbMassStorage.

Теперь подключив устройство в режиме звуковой карты, нужно установить драйвер AT91UsbSounCard, указав путь к файлу AT91UsbSounCard.inf и файлу самого драйвера. Система обнаружит драйвер и установит его.

Аналогично в режиме флеш-диска нужно установить драйвер AT91UsbMassStorage.

Теперь необходимо доработать оба драйвера согласно вышеуказанным требованиям.

Тексты проекты шаблонов драйверов приведены в приложении.

 



2020-03-17 243 Обсуждений (0)
Разработка шаблона драйвера устройства 0.00 из 5.00 0 оценок









Обсуждение в статье: Разработка шаблона драйвера устройства

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (243)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)