ДДК и наболевшее

Jun 07, 2009 17:38


Во-первых, дисклеймер - всё, что я пишу сюда, я пишу для себя, чтобы не забыть. В сеть - потому что мне так удобнее. Поэтому никаких катов и тд нету. Спасибо.

Собственно, сабж. Разработка драйверов под Windows (а драйверы - это то единственное, что позволяет нам «влезть» в kernel mode маздаевой ОС) - штука довольно-таки неприятная и вязкая. WinAPI и на пользовательском уровне-то радости никакой не вызывает, а на уровне ядра он и вовсе не даёт спать ночами.

А использовать его нужно. Даже необходимо. Можно, конечно, поддаться новомодным веяниям и писать на других языках, но это чревато (см. гугль «С++ windows drivers»).

Посему всенепременнейше встаёт задача как-нибудь это дело упростить или хотя бы сделать более комфортабельным. Написание кода на Си в блокноте с дальнейшей консольной компиляцией - это, конечно, весело, и настоящие программисты оценят, но:
  • Документация по апи уровня ядра никакая совершенно. Смотрите в хидеры и обрящете.
  • Хидеры большие и запутанные, в традициях целевой платформы.
  • Примеров много, но они ещё более большие и запутанные, охватывают далеко не всё, комменты местами писаны на китайском или немецком, а средний файл занимает около 1000 строк ниочём (это всё имхо, конечно).


Вариантов здесь немного, и все они довольно очевидны:
  • Использовать нормальный текстовый редактор (да, они есть под windows). Notepad++ например сгодится.
  • Использовать то, что предлагает сам микрософт, т.е. Вижуал Студио с определёнными настройками. Скажу честно, глубокие настройки студии местами вводят в ступор, поэтому этот способ даже не опробован.
  • Использовать какую-нибудь боле-мене универсальную IDE.


Поскольку этот текст написан не настоящим программистом, а настоящим непингованным ламером, был выбран третий вариант, а в качестве IDE использована Eclipse CDT Ganymede.

Процесс настройки данной проги для работы с DDK я и попытаюсь далее описать.

Итак, первое, что нужно сделать - это создать проект драйвера где-нибудь в дебрях папки src дистрибутива DDK (установка DDK является пунктом номер 0, ага). Создание проекта выглядит так:
  • Создаём некую папочку, неким образом её называем.
  • Открываем любой драйвер из примеров, копируем оттуда файлы makefile и sources.
  • Редактируем файл sources в процессе работы для добавления новых сишных файлов (makefile больше никогда не трогаем).


Второе, что нужно сделать - установить Эклипс. Теперь нам нужно запустить его в контектсте окружения DDK. Самый простой способ сделать это - открыть любую из сред DDK (вероятно, ту, под которую мы пишем драйвер) и ввести туда полный пусть к экзешнику нашей IDE. Более запутанный вариант - пойти в папку /bin/ в директории DDK, найти там файл setenv.bat и поменять в нём строку, отвечающую за назначение переменной PATH, добавив в ней пусть к директории с Эклипсом, в нашем случае это выглядело так:

Было:
set Path=%BASEDIR%\bin;%path%

Стало:
set Path=%BASEDIR%\bin;%path%;G:\eclipse-cpp-ganymede-SR1-win32\eclipse

После сих нехитрых действий мы можем открывать любую среду из меню системы и запускать из неё эклипс простым набором
eclipse

Далее в открытой таким образом среде создаём новый сишный проект (New C Project). На вкладке Select Configurations тыкаем Advanced Settings. Получаем окошко со свойствами проекта. Первым делом идём в раздел C/C++ Build и снимаем галочку у Use default build command. Поле ввода команды становится активным и мы можем вписать туда
build
Так как переменные окружения стоят, эта команда вызовет билдер DDK, причём в уже нужной нам конфигурации.

Далее - раздел C/C++ Generals, подраздел Paths and Symbols. Тыкаем вкладку include и аккуратно перебирая слева все языки, удаляем все имеющиеся папки кнопкой Delete. Потом жмём Add, Variables и находим там переменную DDK_INC_PATH, выбираем галочки для добавления для всех языков и конфигураций. Повторяем всю процедуру для переменной WDM_INC_PATH.

Не выходя из подраздела, тыкаем вкладку Source Location. Нам нужна кнопочка Link Folder. В появившемся окошке щёлкаем галочку, жмём Browse и находим нашу папку с проектом для DDK, созданную несколькими абзацами выше. Теперь везде жмём Apply и Ok. Итак, если всё проделано правильно, имеем проект Eclipse, полностью готовый для написания драйверов под Windows.

Что это даёт:
  • Подсказки по коду, code completion, быстрый рефакторинг.
  • Вызов компилятора ддк при нажатии build в Эклипсе.
  • Ошибки компилятора с номерами строк прекрасно воспринимаются эклипсом и аккуратно подсвечиваются прямо в IDE.


Чего это не даёт:
  • «Запустить» драйвер нельзя, что очевидно. Средств отладки тоже не предусмотрено.
  • Средства установки вроде INF-файлов всё равно придётся писать как-то ещё (автогенерация, маньяки могут писать ручками).
  • Всё вышеуказанное будет работать только при вышеуказанном же способе запуска.
  • Добавляя файлы с исходниками в проект через меню Eclipse, их всё равно необходимо руками вписывать в файл sources.


Все недостатки можно было бы побороть разом, написав для CDT достаточно простой плагин. Но, видимо, далеки у нас господа Java-девелоперы от простых системных программистов. Жаль.

programming, drivers, eclipse, windows

Next post
Up