Как писать драйвера

Devices programming
  • Mihail

    Значит твоя видеокарта не поддерживается. Драйвер работает на ATI 7500 - x800
  • Драйвер должен зарегистрировать себя RegService и вернуть хэндл ядру в еах. Если еах=0 то ядро считает что усторойство не поддерживается или его не удаётся настроить и освобождает память которую драйвер занимает. Никаких дополнительных проверок хэндла не производится хотя надо их добавить.
  • k@sTIg@r wrote:Правильно.
    Внимательней читай статью. Ты должен зарегистрировать сервис (в статье stdcall RegService, my_service, service_proc)
    Я полагаю что START вообще не запускается.
    version dd 0x00030003
    текущая 0x00050005!!!!!
    В http://fpauk.narod.ru/k_svn.605_src_f.rar
    k_0.6.5.0_src\kernel\drivers
    везде 00030003
    и еще:
    jmp $
    Как я понимаю, возвав load_driver до
    ; START MULTITASKING
    с jmp $ после START система должна зависнуть.
    Но этого не происходит, работает как ни в чем не бывало.

    Если не трудно пришли мне образ загрузочной дискеты
    и исходники драйвера. fpauk@mail.ru
    Last edited by KPG on Fri Dec 11, 2020 11:21 pm, edited 1 time in total.
  • Serge wrote:Mihail

    Значит твоя видеокарта не поддерживается. Драйвер работает на ATI 7500 - x800
    Я запускаю под Bochs-2.3

    После
    proc START stdcall, state:dword
    в kernel\drivers\ati2d.asm
    я вствил
    jmp $
    но система не зависла.

    Похоже, что драйвер вообще не загружается.
  • Mihail

    Проверил в Боше, зависла как и положено. Посмотри образ, может скопировал патченный драйвер в другую папку.
  • Serge wrote:Mihail

    Посмотри образ, может скопировал патченный драйвер в другую папку.
    Это я могу. Но тем-же JMP $ я это проверил.
    Или в другую в смылсле не в /rd/1/DRIVERS ?
    Я использовал образ из http://kolibrios.org/files/download/k_0.6.5.0_ru.7z
    и заменил в нем старый ati2d.obj на мой с jmp $
    после
    proc START stdcall, state:dword
    работает.
  • Mihail

    Драйвер должен быть в папке /rd/1/DRIVERS. Если ты заменил драйвер то у тебя не запускается START. Вариантов три: ядро не может найти драйвер в /rd/1/DRIVERS, драйвер пытается импортировать несуществующие функции, версии драйверной модели не совпадают. Если ты брал оригинальный образ дистрибутива то исходники драйвера должны быть из дистриба или скачай последние версии исходников с SVN и замени ядро и все драйверы, а потом эксперементируй. Или протрассируй вызов load_driver в отладочном Боше.
  • Mihail

    Что значит "работает" ?
  • Serge wrote:Mihail

    Что значит "работает" ?
    На данном этапе, я вывожу сообщение из своего драйвера на экран
    (с помощью boot_log).
  • Драйвер FORTH исполняет исходный форт-текст в файле /sys/drivers/AUTOEXEC.F
    Теперь драйвера могут быть представлены в виде исходных текстов Форта.
    Т.е. модифицироваться под Колибри.

    Почемуто зависает srv_handler при том, что service_proc ничего не делает.
  • diamond wrote:Вот, написал статью, демонстрирующую программирование драйвера.
    http://diamondz.land.ru/writedrv.htm
    Приведённый там пример может быть полезен и безотносительно к обучению - написан фильтр, показывающий все обращения программ к файловой системе.
    Вопрос возник (fmon.asm#371):

    Code: Select all

            jz      @f
            push    str_skipped
            call    [con_printf]
    @@:
    
    Это я чего-то недопонял, или просто опечатка :?:
  • Galkov wrote:Вопрос возник (fmon.asm#371):
    В смысле, стек разбалансируется? Угу, ошибся, нужно дописать, к примеру, "pop ecx" после con_printf. (Правда, на практике это не сказывается - во-первых, на практике эта ситуация может возникнуть в совершенно исключительных случаях, во-вторых, небольшая разбалансированность стека в данной конкретной программе не мешает.)
    Ушёл к умным, знающим и культурным людям.
  • Да без проблем :)

    Это я так: копаюсь, разбираюсь потихоньку, пытаюсь понять происходящее, уловить идеологию....
    Не все пока понятно, конечно :(

    В общем, в большей степени-то, я свое понимание пытаюсь контролировать
  • Diamond, сообщи пожалуйста какой прогой ты создаёшь образы дистрибутивов. Как я уже сообщал Сержу мне тут пришлось переупаковать ваш исходный ISO-шник, и он после этого перестал грузиться. Работал обычной UltraISO и Bootise для загрузки на флешку так после этого даже Grub стал ругаться, он перестал понимать инструкцию: configure Grab4dos.log || chainloader (0xff), хотя с вашим исходным образом он её прекрасно понимал. Сообщи пожалуйста свои мысли по этому поводу
  • Who is online

    Users browsing this forum: No registered users and 3 guests