Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как написать драйвер? под различные ОС 
V
    Опции темы
Gunslinger
Дата 2.12.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Что такое драйвер - прочитал на википедии. На радио кот смотрел статьи по программированию для микроконтроллеров. Понял, что драйвер состоит из двух частей: аппаратной - ассемблерной, которая работает с регистрами девайса и программной, абстрактной - оберткой под языки программирования  в форме функций.
Если нужно создать драйвер для различных ОС, то общая часть - работа на асме, различная - в зависимости от оси:
1. В винде напрямую с девайсом работать нельзя. Что это значит и что делать?
2. Как в других осях (линукс, мак)? Они работают на тех же процах, что и винда, значит, по идее, работа организована также. Или нет?
3. Можете привести пример, как асм часть связана с функцией на языке выс. уровня (желательно с/с++)? Это функция с ассемблерными вставками, в которые передаются значения из аргусментов?
4. Как-то подступался к программированию дров под винду. В книге был жуткий список всего: сдк, ддк (да чтоб соответствовала версии винды) и прочее. Ужас! Это под винду драйвер писать так сложно? Или можно проще?

PM MAIL   Вверх
W4FhLF
Дата 2.12.2007, 13:17 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: нет
Всего: 121



Цитата(Gunslinger @  2.12.2007,  12:36 Найти цитируемый пост)
1. В винде напрямую с девайсом работать нельзя. Что это значит и что делать?


Очень кратко. Во-первых, то что ты сказал относится к NT системам, далее я буду иметь ввиду только эту линейку. В винде есть 4 уровня привелегий для кода, т.н. кольца. На самом низком уровне, нулевом кольце(aka ring0) работают драйвера, ядро ОС и прочие вещи, которым необходимы самые высокие привелегии. ring1 и ring2 не используются. На ring3 уровне работет весь пользовательсткий стаф, сервисы и службы. Он ограничен в своих привелегиях, в том числе код рабтающий на этом уровне не может обращаться напрямую к системным регистрам, портам ВВ, привелегированным инструкциям и некоторым другим вещам.


Цитата(Gunslinger @  2.12.2007,  12:36 Найти цитируемый пост)
3. Можете привести пример, как асм часть связана с функцией на языке выс. уровня (желательно с/с++)? Это функция с ассемблерными вставками, в которые передаются значения из аргусментов?


Собственно ассемблера требуется по минимуму, только для исполнения некоторых инструкций(например in/out), в остальном всё пишется на ЯВУ. Можешь организовать всё в виде __asm {}, а можешь заменить этот код макросами:

Код

#define READ_PORT_UCHAR(Port)                  (UCHAR)(inp (Port))
#define READ_PORT_USHORT(Port)                 (USHORT)(inpw (Port))
#define READ_PORT_ULONG(Port)                  (ULONG)(inpd (Port))
#define WRITE_PORT_UCHAR(Port, Value)          outp ((Port), (Value))
#define WRITE_PORT_USHORT(Port, Value)         outpw ((Port), (Value))
#define WRITE_PORT_ULONG(Port, Value)          outpd ((Port), (Value))


и т.д.

Цитата(Gunslinger @  2.12.2007,  12:36 Найти цитируемый пост)
4. Как-то подступался к программированию дров под винду. В книге был жуткий список всего: сдк, ддк (да чтоб соответствовала версии винды) и прочее. Ужас! Это под винду драйвер писать так сложно? Или можно проще?


Всё, что тебе надо это:
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


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Frolls
Дата 2.12.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 27.10.2006

Репутация: нет
Всего: нет



А если уж совсем сложно с DDK и DS+VS, то попробуй WinDriver. 
Сгенеренный пример программы можно подправить. По своему опыту, если будешь юзать WinDriver, то лучше работай в VS, тк у меня только для него получилось сгенерить нормальный код, который можно было спокойно править
PM MAIL ICQ   Вверх
Gunslinger
Дата 3.12.2007, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



W4FhLF, только к нт? Интеловские процы поддерживают 2 режима: защищенный и пользовательский. Винда их использует, а линукс/юникс? Они не пользуются аппаратными механизмами защиты и там можно напрямую работать с девайсом? 
И как быть, если девайс может быть использован под линукс? Что переписывать (ясно, что не асм часть)?

PM MAIL   Вверх
xvr
Дата 3.12.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Gunslinger @ 3.12.2007,  10:43)
W4FhLF, только к нт? Интеловские процы поддерживают 2 режима: защищенный и пользовательский. Винда их использует, а линукс/юникс? 

Тоже

Цитата

Они не пользуются аппаратными механизмами защиты и там можно напрямую работать с девайсом? 

Нельзя.

Цитата

И как быть, если девайс может быть использован под линукс? Что переписывать (ясно, что не асм часть)?

Переписывать придется все. Модели драйверов у Linux и Windows весьма различаются. Части, связанные непосредственно с железом притерпят минимальные изменения (в частности обработка прерываний может изменится), интерфейс с OS будет у каждой OS свой.

PM MAIL   Вверх
Gunslinger
Дата 6.12.2007, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Цитата(xvr @ 3.12.2007,  17:21)
Переписывать придется все. Модели драйверов у Linux и Windows весьма различаются.

Для винды инфы будет много, а под линукс что почитать?
PM MAIL   Вверх
onsql
Дата 6.12.2007, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 3.12.2007

Репутация: нет
Всего: 3



Цитата(Gunslinger @ 6.12.2007,  13:42)
Для винды инфы будет много, а под линукс что почитать?

Классика: Linux Device Drivers, Third Edition

А из нашего можно вот это почитать (её на этом же форуме и обсуждают): Разработка ядра Linux
PM MAIL   Вверх
Gunslinger
Дата 7.12.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



onsql, спасибо скачал.

Спасибо за ссылы на софт.
PM MAIL   Вверх
W4FhLF
Дата 7.12.2007, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: нет
Всего: 121



Цитата(Gunslinger @  3.12.2007,  10:43 Найти цитируемый пост)
Интеловские процы поддерживают 2 режима: защищенный и пользовательский.


Только реальный и защищённый ;)


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0788 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.