АстроСофт разрабатывает драйверы и микропрограммы для различных аппаратных устройств, позволяющие оптимизировать их функциональность и быстродействие.
Микропрограммы и драйверы могут создаваться «с нуля» (например, при разработке устройств нового типа) или на основе готовых операционных систем (в том числе с открытым исходным кодом).
Мы сотрудничаем с производителями устройств и программного обеспечения к ним, а также разрабатываем драйверы и микропрограммы для редких моделей, промышленное производство которых прекращено, но клиенты продолжают их использование.
АстроСофт занимается разработкой драйверов уже более пятнадцати лет. За это время в мире Windows концепция разработки драйверов успела несколько раз измениться — от частично ассемблерного кода для Windows 95 до современной среды WDF, позволяющей разрабатывать некоторые виды драйверов, ничем не отличимых которые ничем не отличаются от обычных пользовательских приложений.
Windows Driver Model (WDM)
Данная концепция разработки драйверов сформировалась в начале тысячелетия. Главный её недостаток для разработчика — отсутствие целостной архитектуры. Наименования функций, подходы к разработке и другие признаки говорят, что она разрабатывалась в разное время разными группами специалистов. Как следствие, порог вхождения в данную область довольно высок и создавать такие драйверы способен только очень опытный и глубоко погрузившийся в эту среду программист.
Примеры WDM-драйверов, созданных АстроСофт:
Windows Driver Framework
Концепция WDM, несмотря на всю свою неоднородность и сложность, до сих пор пользуется популярностью. Однако, уже достаточно давно Microsoft разработал принципиально новую среду WDF. Она базируется на том же самом фундаменте WDM, но для программиста предлагается единообразная, хорошо продуманная архитектура. Это позволяет снизить трудозатраты на разработку драйверов (а значит, и стоимость), а также уменьшить вероятность ошибок.
Кроме сложных драйверов уровня ядра, инфраструктура WDF позволяет разрабатывать для ряда устройств драйверы, работающие на пользовательском уровне защиты. Это существенно облегчает процесс разработки и отладки. Специалистами АстроСофт разработано множество драйверов для разнообразных устройств PCIe. Имеется опыт модернизации устаревших WDM-драйверов PCIe, включающей реинжиниринг и восстановление/наращивание прежнего функционала уже в архитектуре WDF. Кроме того, нами создано несколько драйверов для USB-устройств на уровне UMDF.
Драйверы без разработки драйверов
Мало кто знает (хоть это и описано в документации MSDN), что существует универсальный драйвер USB-устройств, который может применяться даже в ОС Windows XP. Его использование в обычных программах позволяет обойтись без разработки специализированных USB-драйверов. АстроСофт владеет данной технологией, и все разрабатываемые USB-устройства с нестандартными протоколами мы обслуживаем через такой драйвер.
Также Microsoft имеет стандартные драйверы USBSER для обслуживания виртуального COM-порта и USBSTOR для обслуживания USB-накопителей. Здесь используется обратный подход: чтобы не писать свои драйверы, а обслуживаться через штатные, при разработке USB-устройств, именно они производятся совместимыми со стандартным протоколом. USBSER.SYS обслуживает не только переходники USB-COM, но и все устройства, в которые подаются терминальные команды. Это могут быть системы управления двигателем, система связи, и даже промышленные SCADA-системы на базе шины MODBUS. При создании всех этих систем, для упрощения разработки, мы выполняем адаптацию существующего протокола под штатные драйверы, поставляющиеся в комплекте с Windows.
Файловая система для устройств мультимедиа
(цифровые видеомагнитофоны (PVR) или телевизоры, поддерживающие функцию Time/Shift).
В АстроСофт создана файловая система, сочетающая свойства общецелевой файловой системы и одновременно удовлетворяющая особым требованиям производительности: поддержка нескольких одновременных потоков чтения и записи с суммарным объемом, сопоставимым с физически возможной скоростью передачи данных на физическом диске. Дополнительно обеспечена поддержка файлов с «дырками», в основном образующимися в начале файла при устаревании архива. Решение основано на поддержке «обычных» файлов, специальной поддержке «больших и быстрых» файлов и управлении свободным местом (особенно, образующимся из «дырок» «больших» файлов).
Для реализации задачи был написан модуль ядра, реализующий интерфейс VFS.
Драйверы контроллера и сканера МФУ
При разработке прошивки для многофункционального печатающего устройства возникла задача передачи данных по USB между сканирующим и головным модулем на базе процессора ARM под управлением VxWorks. Штатные средства системы позволяли работать только со встроенным контроллером USB1.1, скорости которого было недостаточно, поэтому USB-контроллер подключался по шине PCI. Было необходимо разработать драйвер контроллера и драйвер сканера. Драйвер контроллера бал создан на основе Linux-драйвера, адаптированного нами к среде VxWorks: были созданы прослойки для управления процессом запуска, прерываниями, доступа к физической памяти, DMA и свой менеджер памяти (при использовании стандартного для VxWorks скорость работы была недопустимо низкой).
Драйвер для чипа GPS- навигации
Снижение стоимости чипа GPS-навигации возможно за счет переноса вычислений в общецелевой процессор, что поставило задачу быстрой и синхронной передачи больших объемов данных с приёмника GPS в системную память. Нами был создан соответствующий драйвер, а поскольку работать решение должно было с разными операционными системами, то для драйвера получения данных использовался кросс-платформенный механизм libusb. В зависимости от способа передачи (сырой/bulk или изохронный) были решены проблемы производительности или контроля целостности потока.
Fuse drivers
При разработке медицинского прибора встала задача переноса файлов из внутренней памяти прибора в обычный компьютер. Проблема: при подключении флеш-накопителя на компьютере запускается драйвер файловой системы и единолично управляет распределением данных на флеш-карте — при подключении прибора его диском уже управляет операционная система прибора. Первоначальное решение с выделением «сырой» памяти для копирования данных перед подключением к компьютеру было неудобно: передача этой памяти в исключительное управление компьютеру и обратные операции после отключения требовали неочевидных действий пользователя и могли вызывать ошибки синхронизации данных.
Был создан драйвер блочного устройства, выдававший себя за диск, отформатированный в систему FAT, который, однако, предоставлял данные из выделенного каталога родной файловой системы устройства.
Микроконтроллеры — это тоже компьютеры, поэтому для них также необходимы драйверы. В нашем случае все еще сложнее и интереснее: АстроСофт создал и продолжает совершенствовать собственный продукт — операционную систему реального времени МАКС для микроконтроллеров. Разработка драйверов для этой системы — наша ежедневная работа.
Одно из преимуществ нашей ОС — удобство использования, поэтому драйверы не «просто работают», а максимально удобны. Принципы организации драйверов для МАКС вырабатываются создателями, что достаточно нетипично для разработок в данной области, где большинство следуют уже готовым сторонним принципам (например, от Microsoft).
Нами сформулированы требования к драйверам, произведён выбор модели, которая этим требованиям удовлетворяет, а затем, на основе выбранной модели, создана система драйверов, позволяющих писать прикладное ПО максимально эффективно и наглядно.