Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вс май 28, 2017 9:36 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 17 сообщений ]  На страницу 1 2 След.
Автор Сообщение
 Заголовок сообщения: Драйвер на Си/С++ ?
СообщениеДобавлено: Вс июн 12, 2011 10:38 am 
Не в сети

Зарегистрирован: Вс июн 12, 2011 10:34 am
Сообщения: 11
Как написать дров на асме понятно. Есть описание.

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

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


Вернуться к началу
 Заголовок сообщения: Re: Драйвер на Си/С++ ?
СообщениеДобавлено: Вс июн 12, 2011 11:01 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Шаблона нет, есть исходники для примера 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. точка входа драйвера объявлена как
Код:
uint32_t drvEntry int action, char *cmdline)

2. для драйвера требуется специальный загрузчик. Примерно такой
Код:
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: Драйвер на Си/С++ ?
СообщениеДобавлено: Вс июн 12, 2011 11:48 am 
Не в сети
Public Relations
Аватара пользователя

Зарегистрирован: Пн июн 07, 2010 12:01 pm
Сообщения: 1879
Проблема с драйвером USB на C/C++ в том, что нам его будет сложнее поддерживать после окончания Вами работы, и скорость его, наверное, будет меньше.
Хотя это только моё личное мнение - может быть, я и ошибаюсь.


Вернуться к началу
 Заголовок сообщения: Re: Драйвер на Си/С++ ?
СообщениеДобавлено: Вс июн 12, 2011 11:57 am 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 25, 2009 4:45 pm
Сообщения: 788
Да и несколько не соответствует "духу" системы.


Вернуться к началу
 Заголовок сообщения: Re: Драйвер на Си/С++ ?
СообщениеДобавлено: Вс июн 12, 2011 12:03 pm 
Не в сети
Public Relations
Аватара пользователя

Зарегистрирован: Пн июн 07, 2010 12:01 pm
Сообщения: 1879
XVilka писал(а):
Да и несколько не соответствует "духу" системы.
Дух фтопку, у меня мышка не работает :lol:

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


Вернуться к началу
 Заголовок сообщения: Re: Драйвер на Си/С++ ?
СообщениеДобавлено: Вс июн 12, 2011 12:12 pm 
Если размер не большой, то можно и дизассемблировать потом.


Вернуться к началу
   
 Заголовок сообщения: Re: Драйвер на Си/С++ ?
СообщениеДобавлено: Вс июн 12, 2011 12:15 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 25, 2009 4:45 pm
Сообщения: 788
Дизассемблировать я могу.


Вернуться к началу
 Заголовок сообщения: Re: Драйвер на Си/С++ ?
СообщениеДобавлено: Вс июн 12, 2011 12:35 pm 
Не в сети

Зарегистрирован: Вс июн 12, 2011 10:34 am
Сообщения: 11
Спасибо за ответы. Буду пробывать.

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

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


Вернуться к началу
 Заголовок сообщения: Re: Драйвер на Си/С++ ?
СообщениеДобавлено: Вс июн 12, 2011 12:51 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
a9d писал(а):
Такие вещи лучше писать на Си.
Родная душа :D Если чего надо, обращайся.
Там засада есть, usb клавиатура не генерирует кодов повторения, это должен делать драйвер. А в ядре нет таймеров :cry: .

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


Вернуться к началу
 Заголовок сообщения: Re: Драйвер на Си/С++ ?
СообщениеДобавлено: Вс июн 12, 2011 1:03 pm 
Не в сети
Public Relations
Аватара пользователя

Зарегистрирован: Пн июн 07, 2010 12:01 pm
Сообщения: 1879
a9d писал(а):
В этом дрове через три месяца нашли ошибку. Эту ошибку я испровлял почти пять дней. Т.к. к тому времени вообще забыл исходник.
В нашем случае Вам не придётся его поддерживать после сдачи проекта и получения оплаты. Мы будем поддерживать его сами.


Вернуться к началу
 Заголовок сообщения: Re: Драйвер на Си/С++ ?
СообщениеДобавлено: Вс июн 12, 2011 1:04 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн апр 16, 2007 6:38 pm
Сообщения: 1222
Serge: "никсовая модель "всё - это файл" для нас не очень." - а я предлагал, частично =)

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Вернуться к началу
 Заголовок сообщения: Re: Драйвер на Си/С++ ?
СообщениеДобавлено: Вс июн 12, 2011 2:27 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Gluk

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


Вернуться к началу
 Заголовок сообщения: Re: Драйвер на Си/С++ ?
СообщениеДобавлено: Ср июн 15, 2011 12:04 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1593
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: Драйвер на Си/С++ ?
СообщениеДобавлено: Ср июн 15, 2011 12:49 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
А нерабочесть флешки, картридера, вебкамеры, колонок ?


Вернуться к началу
 Заголовок сообщения: Re: Драйвер на Си/С++ ?
СообщениеДобавлено: Ср июн 15, 2011 12:52 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1593
Serge, тоже можно починить на ассемблере.

_________________
Сделаем мир лучше!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 17 сообщений ]  На страницу 1 2 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB