Page 1 of 2

Драйвер на Си/С++ ?

Posted: Sun Jun 12, 2011 10:38 am
by a9d
Как написать дров на асме понятно. Есть описание.

Но на асме писать очень долго. К томуже код на асме отлаживать на порядок сложнее.

Есть шаблон драйвера на Си/С++? И рекомендации по компиляции.

Re: Драйвер на Си/С++ ?

Posted: Sun Jun 12, 2011 11:01 am
by Serge
Шаблона нет, есть исходники для примера svn://kolibrios.org/drivers/audio/a5536 svn://kolibrios.org/drivers/usb

Для компиляции требуется mingw32. Сначала надо собрать drivers/ddk или скачать отсюда http://kolibri-pe.googlecode.com/files/ ... 02_2011.7z В качестве шаблона лучше всего подойдёт a5536/geode.c Принципиальных отличий от asm-coff драйвера два:

1. точка входа драйвера объявлена как

Code: Select all

uint32_t drvEntry int action, char *cmdline)

2. для драйвера требуется специальный загрузчик. Примерно такой

Code: Select all

use32

db 'MENUET01'
dd 1
dd start
dd i_end
dd mem
dd mem
dd cmdline
dd 0

start:
       mov eax, 68
       mov ebx, 16
       mov ecx, sz_service
       int 0x40
       test eax, eax
       jnz .done             

       mov eax, 68
       mov ebx, 21
       mov ecx, path
       mov edx, cmdline
       int 0x40
.done:
       mov eax, -1
       int 0x40

sz_service db 'МОЙ СЕРВИС',0

path: db '/sys/drivers/МОЙ СЕРВИС.ДЛЛ

align 4
i_end:
cmdline  rb 256
        rb 16	   ; stack
mem:

Re: Драйвер на Си/С++ ?

Posted: Sun Jun 12, 2011 11:48 am
by yogev_ezra
Проблема с драйвером USB на C/C++ в том, что нам его будет сложнее поддерживать после окончания Вами работы, и скорость его, наверное, будет меньше.
Хотя это только моё личное мнение - может быть, я и ошибаюсь.

Re: Драйвер на Си/С++ ?

Posted: Sun Jun 12, 2011 11:57 am
by XVilka
Да и несколько не соответствует "духу" системы.

Re: Драйвер на Си/С++ ?

Posted: Sun Jun 12, 2011 12:03 pm
by yogev_ezra
XVilka wrote:Да и несколько не соответствует "духу" системы.
Дух фтопку, у меня мышка не работает :lol:

Предлагаю в выборе языка программирования для этого драйвера руководствоваться исключительно практическими соображениями:
1) Как сложно написать?
2) Сколько времени займёт?
3) После сдачи проекта нам, как легко его будет поддерживать? (баг фиксы нашими силами)
4) Скорость работы

Re: Драйвер на Си/С++ ?

Posted: Sun Jun 12, 2011 12:12 pm
by Mario
Если размер не большой, то можно и дизассемблировать потом.

Re: Драйвер на Си/С++ ?

Posted: Sun Jun 12, 2011 12:15 pm
by XVilka
Дизассемблировать я могу.

Re: Драйвер на Си/С++ ?

Posted: Sun Jun 12, 2011 12:35 pm
by a9d
Спасибо за ответы. Буду пробывать.

Я уже один раз написал дров эмулирующий жесткий диск. Ну его нафиг на асме писать дрова.
В этом дрове через три месяца нашли ошибку. Эту ошибку я испровлял почти пять дней. Т.к. к тому времени вообще забыл исходник.

Такие вещи лучше писать на Си.

Re: Драйвер на Си/С++ ?

Posted: Sun Jun 12, 2011 12:51 pm
by Serge
a9d wrote:Такие вещи лучше писать на Си.
Родная душа :D Если чего надо, обращайся.
Там засада есть, usb клавиатура не генерирует кодов повторения, это должен делать драйвер. А в ядре нет таймеров :cry: .

А по-хорошему нужен стек драйверов, чтобы добавлять отдельные драйверы новых устройств. Я смотрел на линуксовый, но он толстоват для Колибри и никсовая модель "всё - это файл" для нас не очень.

Re: Драйвер на Си/С++ ?

Posted: Sun Jun 12, 2011 1:03 pm
by yogev_ezra
a9d wrote:В этом дрове через три месяца нашли ошибку. Эту ошибку я испровлял почти пять дней. Т.к. к тому времени вообще забыл исходник.
В нашем случае Вам не придётся его поддерживать после сдачи проекта и получения оплаты. Мы будем поддерживать его сами.

Re: Драйвер на Си/С++ ?

Posted: Sun Jun 12, 2011 1:04 pm
by Gluk
Serge: "никсовая модель "всё - это файл" для нас не очень." - а я предлагал, частично =)

Re: Драйвер на Си/С++ ?

Posted: Sun Jun 12, 2011 2:27 pm
by Serge
Gluk

Сама абстракция вызывает обоснованные сомнения. Очень немногие устройства укладываются в набор open() read() write() seek() close(), иначе не было бы разных вариантов ioctl().

Re: Драйвер на Си/С++ ?

Posted: Wed Jun 15, 2011 12:04 pm
by CleverMouse
yogev_ezra, за слова "Дух фтопку, у меня мышка не работает" лично я могу и послать "фтопку". Нерабочесть мышки можно починить более простыми средствами. USB - не такая уж сложная вещь, чтобы для её написания был абсолютно необходим Си. Хотя головной боли там хватает.

Например, ядро с http://ftp.kolibrios.org/users/CleverMo ... kernel.mnt определяет и инициализирует OHCI-контроллеры и ищет подключённые устройства, определяя VendorID:DeviceID и класс/подкласс/интерфейс. Для мышек это 3/1/2, список вариантов для первого числа можно посмотреть на http://www.usb.org/developers/defined_class . Информация выводится на доску отладки при загрузке, так что если включён atikms, выводящий туда же тонны мусора, то его стоит отключить. Я, собственно, не собиралась выкладывать то, что есть, поскольку пока нет динамического подключения/отключения устройств, хабов, API для драйверов и самих драйверов, но раз уж пошли такие мысли, их надо в корне пресекать.

Re: Драйвер на Си/С++ ?

Posted: Wed Jun 15, 2011 12:49 pm
by Serge
А нерабочесть флешки, картридера, вебкамеры, колонок ?

Re: Драйвер на Си/С++ ?

Posted: Wed Jun 15, 2011 12:52 pm
by CleverMouse
Serge, тоже можно починить на ассемблере.