![]() |
Модераторы: PILOT, ManiaK, Mazzi |
![]() ![]() ![]() |
|
Gunslinger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: нет Всего: 3 |
Что такое драйвер - прочитал на википедии. На радио кот смотрел статьи по программированию для микроконтроллеров. Понял, что драйвер состоит из двух частей: аппаратной - ассемблерной, которая работает с регистрами девайса и программной, абстрактной - оберткой под языки программирования в форме функций.
Если нужно создать драйвер для различных ОС, то общая часть - работа на асме, различная - в зависимости от оси: 1. В винде напрямую с девайсом работать нельзя. Что это значит и что делать? 2. Как в других осях (линукс, мак)? Они работают на тех же процах, что и винда, значит, по идее, работа организована также. Или нет? 3. Можете привести пример, как асм часть связана с функцией на языке выс. уровня (желательно с/с++)? Это функция с ассемблерными вставками, в которые передаются значения из аргусментов? 4. Как-то подступался к программированию дров под винду. В книге был жуткий список всего: сдк, ддк (да чтоб соответствовала версии винды) и прочее. Ужас! Это под винду драйвер писать так сложно? Или можно проще? |
|||
|
||||
W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: нет Всего: 121 |
Очень кратко. Во-первых, то что ты сказал относится к NT системам, далее я буду иметь ввиду только эту линейку. В винде есть 4 уровня привелегий для кода, т.н. кольца. На самом низком уровне, нулевом кольце(aka ring0) работают драйвера, ядро ОС и прочие вещи, которым необходимы самые высокие привелегии. ring1 и ring2 не используются. На ring3 уровне работет весь пользовательсткий стаф, сервисы и службы. Он ограничен в своих привелегиях, в том числе код рабтающий на этом уровне не может обращаться напрямую к системным регистрам, портам ВВ, привелегированным инструкциям и некоторым другим вещам. Собственно ассемблера требуется по минимуму, только для исполнения некоторых инструкций(например in/out), в остальном всё пишется на ЯВУ. Можешь организовать всё в виде __asm {}, а можешь заменить этот код макросами:
и т.д. Всё, что тебе надо это: Windows Driver Kit (WDK) - набор примеров, библиотек, заголовочных файлов, вспомогательных тулз, компилятор, линкер. Ну в общем без этого никуда. VS - я настраиваю сборку через компилятор студии и разработку веду в студии. Debugging Tools for Windows - для отладки. Так же для отладки удобно использовать связку VMWare + WinDBG. Как настроить читай в статье Driver Debugging with WinDbg and VMWare. Ну и багаж знаний. Начать можешь с прочтения серии статей от Fouf-F про разработку драйверов, искать на wasm.ru. Почаще заглядывай в сам WDK Help и примеры из него. В качестве базы можно почитать Внутреннее устройство Microsoft Windows Соломона и Руссиновича, Рихтера (Создание эффективных WIN32-приложений. Его лучше прочесть перед Руссиновичем). Это сообщение отредактировал(а) W4FhLF - 2.12.2007, 13:18 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
Frolls |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 27.10.2006 Репутация: нет Всего: нет |
А если уж совсем сложно с DDK и DS+VS, то попробуй WinDriver.
Сгенеренный пример программы можно подправить. По своему опыту, если будешь юзать WinDriver, то лучше работай в VS, тк у меня только для него получилось сгенерить нормальный код, который можно было спокойно править |
|||
|
||||
Gunslinger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: нет Всего: 3 |
W4FhLF, только к нт? Интеловские процы поддерживают 2 режима: защищенный и пользовательский. Винда их использует, а линукс/юникс? Они не пользуются аппаратными механизмами защиты и там можно напрямую работать с девайсом?
И как быть, если девайс может быть использован под линукс? Что переписывать (ясно, что не асм часть)? |
|||
|
||||
xvr |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Тоже
Нельзя.
Переписывать придется все. Модели драйверов у Linux и Windows весьма различаются. Части, связанные непосредственно с железом притерпят минимальные изменения (в частности обработка прерываний может изменится), интерфейс с OS будет у каждой OS свой. |
||||||
|
|||||||
Gunslinger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: нет Всего: 3 |
Для винды инфы будет много, а под линукс что почитать? |
|||
|
||||
onsql |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 3.12.2007 Репутация: нет Всего: 3 |
Классика: Linux Device Drivers, Third Edition А из нашего можно вот это почитать (её на этом же форуме и обсуждают): Разработка ядра Linux |
|||
|
||||
Gunslinger |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: нет Всего: 3 |
onsql, спасибо скачал.
Спасибо за ссылы на софт. |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: нет Всего: 121 |
Только реальный и защищённый ;) -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |