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

Devices programming
  • Шаблона нет, есть исходники для примера 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:
    
  • Проблема с драйвером USB на C/C++ в том, что нам его будет сложнее поддерживать после окончания Вами работы, и скорость его, наверное, будет меньше.
    Хотя это только моё личное мнение - может быть, я и ошибаюсь.
  • Да и несколько не соответствует "духу" системы.
  • XVilka wrote:Да и несколько не соответствует "духу" системы.
    Дух фтопку, у меня мышка не работает :lol:

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

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

    Такие вещи лучше писать на Си.
  • a9d wrote:Такие вещи лучше писать на Си.
    Родная душа :D Если чего надо, обращайся.
    Там засада есть, usb клавиатура не генерирует кодов повторения, это должен делать драйвер. А в ядре нет таймеров :cry: .

    А по-хорошему нужен стек драйверов, чтобы добавлять отдельные драйверы новых устройств. Я смотрел на линуксовый, но он толстоват для Колибри и никсовая модель "всё - это файл" для нас не очень.
  • a9d wrote:В этом дрове через три месяца нашли ошибку. Эту ошибку я испровлял почти пять дней. Т.к. к тому времени вообще забыл исходник.
    В нашем случае Вам не придётся его поддерживать после сдачи проекта и получения оплаты. Мы будем поддерживать его сами.
  • Serge: "никсовая модель "всё - это файл" для нас не очень." - а я предлагал, частично =)
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Gluk

    Сама абстракция вызывает обоснованные сомнения. Очень немногие устройства укладываются в набор open() read() write() seek() close(), иначе не было бы разных вариантов ioctl().
  • 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 для драйверов и самих драйверов, но раз уж пошли такие мысли, их надо в корне пресекать.
    Сделаем мир лучше!
  • А нерабочесть флешки, картридера, вебкамеры, колонок ?
  • Serge, тоже можно починить на ассемблере.
    Сделаем мир лучше!
  • Who is online

    Users browsing this forum: No registered users and 3 guests