alexey
|
|
« : 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
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #1 : 13-03-2010 21:20 » |
|
Точки входа. Вернее линковшик не видит ее А первое предупреждение говорит о том. Что в каждом файле, нужно оставлять пустую строку в конце файла. Я насколько знаю, Под Linux, чтоб собирать модули, нужно ставить специальные опции компиляции. Как это будет выглядить в виндовс, не знаю.
|
|
« Последнее редактирование: 13-03-2010 21:23 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
RXL
|
|
« Ответ #2 : 13-03-2010 21:25 » |
|
Формат выходного файла надо определить. Это как минимум.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
alexey
|
|
« Ответ #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
Молодой специалист
Offline
Пол:
|
|
« Ответ #4 : 13-03-2010 22:10 » |
|
Копмилировать и собирать драйвер при помощи gcc это всё равно, что в бане париться лопатой вместо веника (думаю подробности этого процесса можно опустить). Непонятно, что какие либы там у тебя используются, какие хедеры. Интересно, что вообще за код ты пытаешься скомпилировать (чувствую что-то интересное). DDK хотя бы есть? Если серьезно, брось ты лучше это дело. По крайней мере поддержки ты в этом случае вряд ли дождешься. В том смысле, что оффициально всё это не поддерживается. И самый главный вопрос - ЗАЧЕМ тебе это?
|
|
|
Записан
|
|
|
|
alexey
|
|
« Ответ #5 : 13-03-2010 22:16 » |
|
Ну сам драйвер простой Там просто Hello world. А причин изучать это много. Одни из них тонкости gnu линковщика и кросскомпиляция. Вообще полезно знать какие есть альтернативы на всяк случай
|
|
|
Записан
|
|
|
|
alexey
|
|
« Ответ #6 : 13-03-2010 22:24 » |
|
Либы и хедеры я беру из ddk что идёт в комплекте с mingw - порт gcc под windows. http://www.mingw.org/
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #7 : 13-03-2010 22:32 » |
|
Ну сам драйвер простой Там просто Hello world. Приведи код. Точно будет интересно. А причин изучать это много. Одни из них тонкости gnu линковщика и кросскомпиляция Ну знаешь, драйвера не самый удачный плацдарм для изучения тонкостей линковщика. И о какой кросскомпиляции тут вообще может идти речь если драйвер под винду. Вообще полезно знать какие есть альтернативы на всяк случай Даже не буду спрашивать какой такой "всякий" случай На http://www.mingw.org/ вижу про "C-Runtime and Windows API". Про ddk ничего не вижу. Вообще не видел ниразу портированного DDK
|
|
|
Записан
|
|
|
|
alexey
|
|
« Ответ #8 : 13-03-2010 22:40 » |
|
Ну собирать драйвер для windows я могу и под linux'ом. А тонкости линовки как раз очень уместны Это научит собирать исполняемый файл даже для очень редкой ОС на любой другой платформе. DDK там есть. Чтоб мои слова не были голословны, вот я брал это инсталлятор и ставил обсолютно все пакеты: http://sourceforge.net/projects/mingw/files/Всё удовольстви у меня на винте заняло ~160 мб. В папке include есть папка ddk. Это именно оно!
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #9 : 13-03-2010 22:59 » |
|
Ну собирать драйвер для windows я могу и под linux'ом Это напоминает действия нетрезвого человека, который дерется с морем (имеется ввиду какой-то вымышленный персонаж). Всё удовольстви у меня на винте заняло ~160 мб
Уж не знаю чего ты там накачал. У меня только папка с либами Crt ~160 метров весит. Либы для win7, wlh, wnet и wxp ~890 метров Покажи исходник драййверного "хэллоу ворлд"
|
|
|
Записан
|
|
|
|
alexey
|
|
« Ответ #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
Молодой специалист
Offline
Пол:
|
|
« Ответ #11 : 13-03-2010 23:18 » |
|
От куда там ещё и Либы для win7, wlh, wnet и wxp? Ты не то скачал. Да это я по глупости наверное wdk скачал. Действительно зачем там все эти либы. И так всё будет работать
|
|
« Последнее редактирование: 13-03-2010 23:20 от resource »
|
Записан
|
|
|
|
alexey
|
|
« Ответ #12 : 13-03-2010 23:25 » |
|
Microsoft WDK не надо качать. У них своя сборка, а у mingw своя. Там вообще другой тип обьектных файлов и линкер иначе всё компонует. Ты чуть-чуть от курса отклонился
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #13 : 13-03-2010 23:36 » |
|
Интересно посмотреть как mingw будет линковать, например ndis
Этот топик правильнее было бы назвать "Один против ветра" ну или типа того
|
|
|
Записан
|
|
|
|
alexey
|
|
« Ответ #14 : 13-03-2010 23:42 » |
|
Ну это уже другая история... По идеи он может всё. Только надо знать как. А ещё говорят:НЕ можешь помочь не мешай.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #15 : 14-03-2010 19:18 » |
|
собстно... а чего тут думать? смотрите ключи линковщика и компилятора для винды, читаете их описание а затем ищите аналоги в gcc, разве не так?)
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Serg79
|
|
« Ответ #16 : 14-03-2010 20:57 » |
|
lyoha, Ochkarik тебе правильно сказал, смотри ключи компилятора и линковщика.
От себя еще добавлю. Напиши еще для линковщика свою карту памяти для драйвера. У меня есть подозрения что ядро Windows использует свою карту памяти, отличную от тех которые есть в наборе линковщика от GCC.
|
|
|
Записан
|
|
|
|
|
alexey
|
|
« Ответ #18 : 14-03-2010 22:28 » |
|
мне кажется что gcc по умолчанию догадался что я хочу, так как всё вроде работает пока.... стало всё компилится когда я в коде заменил DbgPrint на KdPrint, и всё вроде сработало. Драйвер скомпилировался, проходит успешно загрузку в память и выгружается из памяти ядра. Не знаю на сколько корректно я сделал это. Вот такие у меня параметры: gcc driver.c -shared -o driver.sys
|
|
|
Записан
|
|
|
|
alexey
|
|
« Ответ #19 : 14-03-2010 23:20 » |
|
resource, согласен, потеря отладки серьёздный минус. так же нельзя писать драйвера с моделью KMDF/WDF. остальное терпимо. но есть и мелкие преимущества в виде функций и макросов которых нет в комплектации WDK, например sprintf и др. DDK в mingw ещё сырая конечно, и не такая мощная как у Microsoft, но по тихоньку развивается и может быть хорошей альтернативой
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #20 : 15-03-2010 00:02 » |
|
но есть и мелкие преимущества в виде функций и макросов которых нет в комплектации WDK, например sprintf и др Зачем они нужны в WDK/DDK, когда они есть в самой системе Касаемо sprintf и иже с ним - есть Safe String Functions. Еще интересно посмотреть, что там за sprintf, не CRTшный ли. В любом случае в WDK есть всё, что надо. Я вот всё перечитываю этот топик и не пойму никак основную мысль такой затеи. Вот зачем человеку, сидя под линуксом, собирать виндовый драйвер? По-моему бессмыслено. Равно как и в винде для сборки драйверов использовать gcc
|
|
|
Записан
|
|
|
|
alexey
|
|
« Ответ #21 : 15-03-2010 00:43 » |
|
Зачем они нужны в WDK/DDK, когда они есть в самой системе Не понял Касаемо sprintf и иже с ним - есть Safe String Functions. Еще интересно посмотреть, что там за sprintf, не CRTшный ли. В любом случае в WDK есть всё, что надо. Будь спокоен, не CRTшный, а вытянутый из ядра Linux'а. Я вот всё перечитываю этот топик и не пойму никак основную мысль такой затеи. Вот зачем человеку, сидя под линуксом, собирать виндовый драйвер? По-моему бессмыслено. Равно как и в винде для сборки драйверов использовать gcc Ну не так уж и бессмысленно. Для embedded систем это привычное дело. К ОС QNX все дрова пишутся в основном из под других ОС а не из под родной. О том что Microsoft частенько любит подтянуть под себя делая других более зависимыми многие уже давно заметили. Хороший программист не должен зависить от средств разроботки ПО, уметь работать с любыми компиляторами и средами разработки для разных ОС. В дальнейшем не вижу смысла пояснять зачсем это делать через gcc, так как это похоже на спор в котором я хочу доказать что земля круглая
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #22 : 15-03-2010 07:42 » |
|
так как это похоже на спор в котором я хочу доказать что земля круглая Ну если выражаться образно, то я пытаюсь тебе сказать, что паспорт гражданина Бангладеша имеет смысл только в самом Бангладеше. В других странах все конечно поймут, что ты от туда, но этим всё и ограничится. Microsoft частенько любит подтянуть под себя делая других более зависимыми многие уже давно заметили Вцелом конечно согласен. Это всем видно и понятно. Но, что касается разработки обычного софта, то тут это не так уж сильно проявляется. Пиши на чем хочешь, юзай любой компилятор, никто не мешает. Драйвера конечно другое дело. Но такова реальность. А реально gcc не избавит тебя от этой зависимости (от Microsoft), т.к. ты начинаешь зависить от них еще в тот момент, когда начинаешь писать драйвер под их ОСь. Когда я говорил, что не вижу смысла в том, чтоб компилировать под линуксом (как и под любым другим никсом) драйвера для винды, я имел ввиду вполне конкретные вещи. Так скомпилируешь ты виндовые драйвера под никсом, и что дальше? Что в линуксе с ними делать? Какая должна возникнуть ситуация, чтоб этим заниматься? Друзья, кто компилировал драйвера для винды под никс, отзовитесь. Расскажите, зачем вы это делали.
|
|
« Последнее редактирование: 15-03-2010 07:46 от resource »
|
Записан
|
|
|
|
Serg79
|
|
« Ответ #23 : 15-03-2010 08:33 » |
|
resource, еще не факт что lyoha удалось собрать драйвер для Винды средствами GCC и что он нормально загружается и выгружается. Вполне возможно что он просто пыль в глаза здесь пускает и тролит потихоньку.
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #24 : 15-03-2010 08:42 » |
|
Serg79 ну я просто боюсь, что меня обвинят во враждебном настрое по отношению к "иным". Поэтому и не высказываю прямые мысли по этому поводу
|
|
|
Записан
|
|
|
|
alexey
|
|
« Ответ #25 : 15-03-2010 14:52 » |
|
а вы попробуйте повторите мои действия. делов то на 5 минут!
|
|
|
Записан
|
|
|
|
alexey
|
|
« Ответ #26 : 15-03-2010 14:56 » |
|
драйвер мой не чего не обрабатывал и имел только одну точку входа. если бы были бы ещё какие то функции и собирал бы я его под linux'ом - было бы намного больше ключей при компиляции, что сейчас я юзаю.
|
|
|
Записан
|
|
|
|
alexey
|
|
« Ответ #27 : 15-03-2010 15:03 » |
|
для регистрации драйвера использовал утилиту KmdManager.exe Вот скрин чтоб не кто не говорил что лапшу вешаю: Или еще видео выложить?
|
|
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #28 : 15-03-2010 15:33 » |
|
Тут видно только, что запущен некий драйвер. Как и чем он скомпилирован, неясно. Выкладый видео
|
|
|
Записан
|
|
|
|
alexey
|
|
« Ответ #29 : 15-03-2010 15:39 » |
|
о ух эти мне эти не доверчивые собеседники... сейчас очень занят, вечером выложу
|
|
|
Записан
|
|
|
|
|