Драйвер для Windows-samplesspbSpbTestTool на майстрі · microsoftWindows-драйвер-зразки · GitHub

Зразок SpbTestTool має дві цілі. По-перше, це демонструє, як відкрити дескриптор контролера SPB, використовувати інтерфейс SPB з драйвера KMDF та використовувати пасивні рівні переривання GPIO. По-друге, він реалізує набір команд для обміну даними з периферійним пристроєм для допомоги в налагодженні.

драйвер

Цей зразок є неповним як драйвер і лише демонструє використання інтерфейсу запиту вводу-виводу SPB та переривань GPIO. Він не призначений для використання у виробничому середовищі.

Щоб встановити периферійний драйвер SpbTestTool, виконайте такі дії:

Переконайтеся, що драйвер збирає без помилок.

Скопіюйте файли SYS та INF в окрему папку.

Запустіть Devcon.exe. Ви можете знайти цю програму в папці tools \ devcon, де ви встановили WDK. Введіть таку команду у вікні команд:

devcon.exe оновлення SpbTestTool.inf ACPI \

Щоб запустити програму SpbTestTool, виконайте такі дії:

Перейдіть до каталогу, що містить SpbTestTool.exe.

Введіть таку команду у вікні команд:

За замовчуванням програма SpbTestTool використовує зразок драйвера SpbTestTool. Однак замість цього можна використовувати альтернативний периферійний драйвер. Щоб вказати альтернативний драйвер, використовуйте такий формат для командного рядка:

Вхідний скрипт може використовуватися замість інтерактивного підказки. Формат сценарію вимагає однієї команди на рядок. Щоб запустити сценарій, використовуйте наступний формат для командного рядка у командному вікні:

Програма SpbTestTool циклічно нескінченно очікує на одну з наступних команд. Команди перекладаються у відповідний запит вводу-виводу SPB без відстеження стану в драйвері. Статус передачі, вміст буфера та коди помилок повертаються за необхідності. Введіть довідку в будь-який час, щоб відобразити цей список команд. Натисніть Ctrl-C у будь-який час, щоб скасувати поточну команду та вийти з програми.

Опис команди
відчинено Відкрита ручка для контролера SPB.
закрити Закрийте ручку контролера SPB.
замок Заблокуйте автобус для ексклюзивного доступу.
розблокувати Розблокуйте автобус.
lockconn Заблокуйте спільне підключення для ексклюзивного доступу. Ця команда використовується для синхронізації передачі шини зразком драйвера з доступом до операційної області через прошивку ACPI.
unlockconn Розблокуйте спільне з’єднання.
напишіть <> Запишіть байтовий масив на периферійний пристрій. Приклад:> писати
читати Зчитування з периферійного пристрою. Приклад:> прочитати 5
writeread <> Атомно запишіть байтовий масив на периферійний пристрій і прочитайте назад. Приклад:> writeread 5
сигналу Повідомте драйвер SpbTestTool про обробку переривання.
допомогти Відобразити список підтримуваних команд.
Ctrl-C Натисніть Ctrl-C у будь-який час, щоб скасувати невідступну команду та вийти з програми.

Нижче наведено відповідні функції в периферійному драйвері SpbTestTool для використання інтерфейсу SPB від драйвера KMDF.

Нижче наведено відповідні функції периферійного драйвера SpbTestTool для управління пасивними перериваннями GPIO від драйвера KMDF.

Опис функції
OnPrepareHardware Переміщує стартові ресурси драйвера. Якщо для "ConnectInterrupt" у реєстрі встановлено значення 1, драйвер підключає перший знайдений ресурс переривання та реєструє процедуру обслуговування переривань.
OnInterruptIsr Процедура обслуговування переривань, яка була налаштована на роботу на пасивному рівні. Це дозволяє водієві визнати або припинити переривання за допомогою інтерфейсу SPB, який не можна викликати в DIRQL. Зазвичай драйвер очищає апаратне переривання та зберігає будь-яку нестабільну інформацію у своєму ISR, а потім поставить у чергу робочий елемент для продовження обробки. Натомість наш драйвер зразка повідомляє програму SpbTestTool про те, що сталося переривання, і викликає KeWaitForSingleObject, щоб зачекати, поки не буде оброблено переривання, перш ніж повернутися. "Справжній" драйвер ніколи не повинен зупинятися в ISR так.
SpbPeripheralWaitOnInterrupt Викликаний для очікування запиту WaitOnInterrupt у драйвері, який буде завершено, коли відбудеться наступне переривання.
SpbPeripheralInterruptNotify Виконує видатний запит WaitOnInterrupt, щоб повідомити програму SpbTestTool про те, що сталося переривання.
SpbPeripheralSignalInterrupt Повідомляє процедуру обслуговування переривань про те, що оброблено переривання, і ISR повинен повернутися.

Наступні вихідні файли знаходяться в папці \ SpbTestTool \ sys і використовуються для створення файлів SpbTestTool.sys та SpbTestTool.inf.

Опис файлу
driver.h, driver.cpp Події на об’єкті пристрою, а також читання, запис та IOCTL із програми SpbTestTool. Реалізує процедуру обслуговування переривань водія.
внутрішній.ч Загальне включає і typedefs
makefile Переспрямовує на реальний файл make, який спільно використовується усіма компонентами WDK.
периферійний.h, периферійний.cpp Відображення IOCTL SpbTestTool до API SPB, включаючи відкриття контролера через концентратор ресурсів та використання блокування, розблокування, читання, запису та послідовності.
resource.rc Файл дескриптора ресурсу, що використовується для версій
джерел Перераховує вихідні файли та параметри збірки.
джерела.деп Визначає залежності побудови.
spbtesttool.asl Зразок файлу ASL для вузла периферійного пристрою. Він оголошує ресурси переривання I2C та GPIO. Зверніть увагу, що кожен макрос визначає шлях ACPI для опису прямих залежностей.
spbtesttool.h Приватні IOCTL SpbTestTool для використання між додатком та периферійним драйвером та іменами шляхів драйверів.
spbtesttool.inx Описується установка драйвера. Процес збірки перетворює це на INF.
слід.ч Налаштування трасування WPP.

Наступні вихідні файли знаходяться в папці \ SpbTestTool \ exe і використовуються для створення файлу SpbTestTool.exe.

Опис файлу
command.h, command.cpp Класи, що представляють кожну з команд SpbTestTool. Список команд див. У розділі Виконання команд.
внутрішній.ч Загальне включає та визначення функцій
main.cpp Точка входу в програму, аналіз вводу та основний цикл виконання. Також містить потік сповіщення про переривання.
makefile Переспрямовує на реальний файл make, який спільно використовується усіма компонентами WDK.
джерел Перераховує вихідні файли та параметри збірки.
util.cpp Допоміжні функції