Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: gcc. Компиляция драйвера Windows.  (Прочитано 29603 раз)
0 Пользователей и 1 Гость смотрят эту тему.
alexey
Участник

ua
Offline Offline
Пол: Мужской

« : 13-03-2010 21:13 » 

Доброе вечер.

Хочу собрать драйвер Windows компилятором gcc.
Знаю что можно использовать wdk от Microsoft, но хотелось бы это научится делать из под gcc.
Ошибки начинаются на этапе линовки. Очевидно что надо указывать другие параметры для компиляции.

Воод:
gcc driver.c -I C:\MinGW\include\ddk -o driver.sys

sraka.c:6:2: warning: no newline at end of file
/mingw/lib/libmingw32.a(main.o):main.c:(.text+0xd2): undefined reference to `Win
Main@16'
collect2: ld returned 1 exit status

Чего не хватает?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 13-03-2010 21:20 » 

Точки входа. Вернее линковшик не видит ее Улыбаюсь А первое предупреждение говорит о том. Что в каждом файле, нужно оставлять пустую строку в конце файла.
Я насколько знаю, Под Linux, чтоб собирать модули, нужно ставить специальные опции компиляции. Как это будет выглядить в виндовс, не знаю.
« Последнее редактирование: 13-03-2010 21:23 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 13-03-2010 21:25 » 

Формат выходного файла надо определить. Это как минимум.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #3 : 13-03-2010 21:59 » 

Понял. Добавил параметр -shared для компиляции динамической библиотеки.
Теперь, я так подозреваю, не хватает *.lib файлов при линковке.

gcc driver.c -I C:\MinGW\include\ddk -o driver.sys -shared

sraka.c:7:2: warning: no newline at end of file
C:\DOCUME~1\Admin\LOCALS~1\Temp/cc4WQmj9.o:driver.c:(.text+0xe): undefined reference to `_imp__DbgPrint'
collect2: ld returned 1 exit status
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 13-03-2010 22:10 » 

Копмилировать и собирать драйвер при помощи gcc это всё равно, что в бане париться лопатой вместо веника (думаю подробности этого процесса можно опустить). Непонятно, что какие либы там у тебя используются, какие хедеры. Интересно, что вообще за код ты пытаешься скомпилировать (чувствую что-то интересное). DDK хотя бы есть?
Если серьезно, брось ты лучше это дело. По крайней мере поддержки ты в этом случае вряд ли дождешься. В том смысле, что оффициально всё это не поддерживается.
И самый главный вопрос - ЗАЧЕМ тебе это?
Записан
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #5 : 13-03-2010 22:16 » 

Ну сам драйвер простой Улыбаюсь
Там просто Hello world.
А причин изучать это много. Одни из них тонкости gnu линковщика и кросскомпиляция.
Вообще полезно знать какие есть альтернативы на всяк случай Ага
Записан
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #6 : 13-03-2010 22:24 » 

Либы и хедеры я беру из ddk что идёт в комплекте с mingw - порт gcc под windows.
http://www.mingw.org/
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 13-03-2010 22:32 » 

Цитата: lyoha
Ну сам драйвер простой Улыбаюсь
Там просто Hello world.
Приведи код. Точно будет интересно.

Цитата: lyoha
А причин изучать это много. Одни из них тонкости gnu линковщика и кросскомпиляция
Ну знаешь, драйвера не самый удачный плацдарм для изучения тонкостей линковщика. И о какой кросскомпиляции тут вообще может идти речь если драйвер под винду.

Цитата: lyoha
Вообще полезно знать какие есть альтернативы на всяк случай
Даже не буду спрашивать какой такой "всякий" случай  Улыбаюсь

На http://www.mingw.org/ вижу про "C-Runtime and Windows API". Про ddk ничего не вижу. Вообще не видел ниразу портированного DDK
Записан
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #8 : 13-03-2010 22:40 » 

Ну собирать драйвер для windows я могу и под linux'ом. А тонкости линовки как раз очень уместны Улыбаюсь Это научит собирать исполняемый файл даже для очень редкой ОС на любой другой платформе.

DDK там есть. Чтоб мои слова не были голословны, вот я брал это инсталлятор и ставил обсолютно все пакеты:
http://sourceforge.net/projects/mingw/files/
Всё удовольстви у меня на винте заняло ~160 мб. В папке include есть папка ddk. Это именно оно!
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 13-03-2010 22:59 » 

Цитата: lyoha
Ну собирать драйвер для windows я могу и под linux'ом
Это напоминает действия нетрезвого человека, который дерется с морем (имеется ввиду какой-то вымышленный персонаж).

Цитата: lyoha
Всё удовольстви у меня на винте заняло ~160 мб
Уж не знаю чего ты там накачал. У меня только папка с либами Crt  ~160 метров весит. Либы для win7, wlh, wnet и wxp ~890 метров

Покажи исходник драййверного "хэллоу ворлд"  Улыбаюсь
Записан
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #10 : 13-03-2010 23:05 » 

Ну раз так уже хочетсмя на него посмотреть...
Исходник:
#include <ddk/ntddk.h>

NTSTATUS DriverEntry(IN              PDRIVER_OBJECT          DriverObject,    IN              PUNICODE_STRING         RegistryPath)
{
   DbgPrint("Except detected in Primer driver.");
   return STATUS_SUCCESS;
}

Цитата: lyoha
Всё удовольстви у меня на винте заняло ~160 мб
Уж не знаю чего ты там накачал. У меня только папка с либами Crt  ~160 метров весит. Либы для win7, wlh, wnet и wxp ~890 метров

От куда там ещё и Либы для win7, wlh, wnet и wxp?Не понялНе понял
Ты не то скачал.
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 13-03-2010 23:18 » 

Цитата: lyoha
От куда там ещё и Либы для win7, wlh, wnet и wxp?Не понялНе понял
Ты не то скачал.

Да это я по глупости наверное wdk скачал. Действительно зачем там все эти либы. И так всё будет работать  Мир, дружба, жвачка!
« Последнее редактирование: 13-03-2010 23:20 от resource » Записан
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #12 : 13-03-2010 23:25 » 

Microsoft WDK не надо качать.
У них своя сборка, а у mingw своя.
Там вообще другой тип обьектных файлов и линкер иначе всё компонует.

Ты чуть-чуть от курса отклонился Улыбаюсь
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 13-03-2010 23:36 » 

Интересно посмотреть как mingw будет линковать, например ndis

Этот топик правильнее было бы назвать "Один против ветра" ну или типа того
Записан
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #14 : 13-03-2010 23:42 » 

Ну это уже другая история...
По идеи он может всё. Только надо знать как.

А ещё говорят:
Цитата
НЕ можешь помочь не мешай.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 14-03-2010 19:18 » 

собстно... а чего тут думать? смотрите ключи линковщика и компилятора для винды, читаете их описание а затем  ищите аналоги в gcc, разве не так?)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 14-03-2010 20:57 » 

lyoha, Ochkarik тебе правильно сказал, смотри ключи компилятора и линковщика.

От себя еще добавлю. Напиши еще для линковщика свою карту памяти для драйвера. У меня есть подозрения что ядро Windows использует свою карту памяти, отличную от тех которые есть в наборе линковщика от GCC.
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 14-03-2010 21:30 » 

Вот, почитай про тяготы и лишения http://strdup.livejournal.com/34596.html

Как минимум без нормальной отладки останешься (без .pdb)
Записан
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #18 : 14-03-2010 22:28 » 

мне кажется что gcc по умолчанию догадался что я хочу, так как всё вроде работает пока.... Улыбаюсь

стало всё компилится когда я в коде заменил DbgPrint на KdPrint, и всё вроде сработало.
Драйвер скомпилировался, проходит успешно загрузку в память и выгружается из памяти ядра.
Не знаю на сколько корректно я сделал это. Вот такие у меня параметры:

gcc driver.c -shared -o driver.sys
Записан
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #19 : 14-03-2010 23:20 » 

resource, согласен, потеря отладки серьёздный минус.  Здесь была моя ладья...
так же нельзя писать драйвера с моделью KMDF/WDF.
остальное терпимо.
но есть и мелкие преимущества в виде функций и макросов которых нет в комплектации WDK, например sprintf и др.

DDK в mingw ещё сырая конечно, и не такая мощная как у Microsoft, но по тихоньку развивается и может быть хорошей альтернативой Улыбаюсь
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #20 : 15-03-2010 00:02 » 

Цитата: lyoha
но есть и мелкие преимущества в виде функций и макросов которых нет в комплектации WDK, например sprintf и др

Зачем они нужны в WDK/DDK, когда они есть в самой системе  Не понял Касаемо sprintf и иже с ним - есть Safe String Functions. Еще интересно посмотреть, что там за sprintf, не CRTшный ли. В любом случае в WDK есть всё, что надо.

Я вот всё перечитываю этот топик и не пойму никак основную мысль такой затеи. Вот зачем человеку, сидя под линуксом, собирать виндовый драйвер? По-моему бессмыслено. Равно как и в винде для сборки драйверов использовать gcc
Записан
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #21 : 15-03-2010 00:43 » 

Цитата
Зачем они нужны в WDK/DDK, когда они есть в самой системе  Не понял Касаемо sprintf и иже с ним - есть Safe String Functions. Еще интересно посмотреть, что там за sprintf, не CRTшный ли. В любом случае в WDK есть всё, что надо.

Будь спокоен, не CRTшный, а вытянутый из ядра Linux'а. Ага
Цитата
Я вот всё перечитываю этот топик и не пойму никак основную мысль такой затеи. Вот зачем человеку, сидя под линуксом, собирать виндовый драйвер? По-моему бессмыслено. Равно как и в винде для сборки драйверов использовать gcc

Ну не так уж и бессмысленно. Для embedded систем это привычное дело. К ОС QNX все дрова пишутся в основном из под других ОС а не из под родной.
О том что Microsoft частенько любит подтянуть под себя делая других более зависимыми многие уже давно заметили. Да-да
Хороший программист не должен зависить от средств разроботки ПО, уметь работать с любыми компиляторами и средами разработки для разных ОС.

В дальнейшем не вижу смысла пояснять зачсем это делать через gcc,
так как это похоже на спор в котором я хочу доказать что земля круглая   Жжешь
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 15-03-2010 07:42 » 

Цитата: lyoha
так как это похоже на спор в котором я хочу доказать что земля круглая

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

Цитата: lyoha
Microsoft частенько любит подтянуть под себя делая других более зависимыми многие уже давно заметили


Вцелом конечно согласен. Это всем видно и понятно. Но, что касается разработки обычного софта, то тут это не так уж сильно проявляется. Пиши на чем хочешь, юзай любой компилятор, никто не мешает. Драйвера конечно другое дело. Но такова реальность. А реально gcc не избавит тебя от этой зависимости (от Microsoft), т.к. ты начинаешь зависить от них еще в тот момент, когда начинаешь писать драйвер под их ОСь.

Когда я говорил, что не вижу смысла в том, чтоб компилировать под линуксом (как и под любым другим никсом) драйвера для винды, я имел ввиду вполне конкретные вещи. Так скомпилируешь ты виндовые драйвера под никсом, и что дальше? Что в линуксе с ними делать? Какая должна возникнуть ситуация, чтоб этим заниматься?

Друзья, кто компилировал драйвера для винды под никс, отзовитесь. Расскажите, зачем вы это делали.
« Последнее редактирование: 15-03-2010 07:46 от resource » Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #23 : 15-03-2010 08:33 » 

resource, еще не факт что lyoha удалось собрать драйвер для Винды средствами GCC и что он нормально загружается и выгружается. Вполне возможно что он просто пыль в глаза здесь пускает и тролит потихоньку.
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #24 : 15-03-2010 08:42 » 

Serg79 ну я просто боюсь, что меня обвинят во враждебном настрое по отношению к "иным". Поэтому и не высказываю прямые мысли по этому поводу
Записан
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #25 : 15-03-2010 14:52 » 

а вы попробуйте повторите мои действия. делов то на 5 минут!
Записан
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #26 : 15-03-2010 14:56 » 

драйвер мой не чего не обрабатывал и имел только одну точку входа.
если бы были бы ещё какие то функции и собирал бы я его под linux'ом - было бы намного больше ключей при компиляции,
что сейчас я юзаю.
Записан
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #27 : 15-03-2010 15:03 » 

для регистрации драйвера использовал утилиту KmdManager.exe

Вот скрин чтоб не кто не говорил что лапшу вешаю:


Или еще видео выложить?  Улыбаюсь
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 15-03-2010 15:33 » 

Тут видно только, что запущен некий драйвер. Как и чем он скомпилирован, неясно. Выкладый видео   Отлично
Записан
alexey
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #29 : 15-03-2010 15:39 » 

о ух эти мне эти не доверчивые собеседники... С ума сойти...

сейчас очень занят, вечером выложу  Внимание! Говорит и показывает...
Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines