OSDev
http://osdev.su/

драйвер для CD-ROM
http://osdev.su/viewtopic.php?f=7&t=759
Страница 1 из 3

Автор:  Fatal_Error [ 03 июл 2013, 06:10 ]
Заголовок сообщения:  драйвер для CD-ROM

Пишу драйвер для сидюка. пока что работаю только с ATAPI, но это прошлый век. у меня на компе сидюк сидит на SCSI, соответственно на моем компе я не смогу тестировать ось, ибо нужно где-то раздобыть IDE. только виртуалка. поэтому как-то нужно включать поддржку нескольких интерфейсов (ATA\ATAPI\SATA\SCSI). только как я понятия не имею... хотелось бы инкапсулировать в драйвере контроллер сидюка (т.е. ядро дает запрос на чтение и номер сидюка, а драйвер сам определяет какой контроллер и, соответственно, читает именно с него). первая мысль, пришедшая в голову - искать сидюк на всех контроллерах, складывать о них информацию в некую таблицу,а при операциях чтение\записи брать от туда инфу и работать с ним. тогда нужно будет пихать функции для работы с каждым контроллером в один файл (процедуры вида ReadCDATAPI\ReadCDSCSI... будут в одном файле и будут вызываться в зависимости от контроллера). может есть идеи получше? и еще вопрос: почему на борще не пашет 48h функция 13h прерывания?

Автор:  phantom-84 [ 03 июл 2013, 14:49 ]
Заголовок сообщения:  Re: драйвер для CD-ROM

Ядру по идее вообще должно быть пофиг, какой/какие там контроллеры. Оно лишь транслирует обращения к функциям драйвера. Драйверы лучше делать независимыми друг от друга. Так будет значительно проще их впихнуть в том числе и в один файл. Например, если мне нужно разместить в одном файле несколько драйверов, я просто в инициализационную/деинициализационную функцию файла включаю вызовы инициализационных/деинициализационных функций соотв. драйверов. Собираю статистику по результату инициализации каждого драйвера в битовом массиве (или в массиве адресов процедур), чтобы знать какие драйверы в файле нужно потом деинициализировать, а какие нет. Если по итогам инициализации массив оказался обнуленным, сразу сообщаю ядру, что данный файл нужно выгрузить. Логика может быть и более сложной, но это когда хочешь учесть зависимости драйверов друг от друга. Обычно до этого не доходит. В лучшем случае нужно просто указать правильный порядок запуска драйверов.

В боксе "пашет" функция 48h.

Автор:  Fatal_Error [ 03 июл 2013, 18:04 ]
Заголовок сообщения:  Re: драйвер для CD-ROM

phantom-84 писал(а):
В боксе "пашет" функция 48h.

у меня не пашет...
Заюзаю тогда таблицу со свойствами найденных устройств. от туда буду брать инфу.

Автор:  Fatal_Error [ 03 июл 2013, 19:42 ]
Заголовок сообщения:  Re: драйвер для CD-ROM

а как узнать по номеру устройства на каком контроллере оно сидит и его номер? вот к примеру хард имеет номер 80h, как по этому номеру из биоса вытащить интерфейс+номер диска? типа IDE, канал 1, диск 0

Автор:  pavia [ 03 июл 2013, 19:58 ]
Заголовок сообщения:  Re: драйвер для CD-ROM

Вариант 1.
Через функцию 48h
Подробнее.
http://docviewer.yandex.ru/?url=ya-disk ... d457e4a88a
Вариант 2.
Записываешь на диск магическое число(гуид) и ищешь его на дисках.
Вариант 2.1 Читаешь геометрические параметры диска если совпадают то читаешь по сектор но пока не найдёшь отличий. Имеется в виду читаешь через int и через порты и сравниваешь результат.

Автор:  Fatal_Error [ 03 июл 2013, 20:38 ]
Заголовок сообщения:  Re: драйвер для CD-ROM

Благодарю :) НО! как я уже говорил у меня борщ не знает про 48h...

Автор:  pavia [ 03 июл 2013, 20:48 ]
Заголовок сообщения:  Re: драйвер для CD-ROM

И в чем не работа заключается?

Автор:  Fatal_Error [ 03 июл 2013, 21:05 ]
Заголовок сообщения:  Re: драйвер для CD-ROM

ошибку дает. в структуре на выходе одни нули.

Автор:  phantom-84 [ 03 июл 2013, 23:01 ]
Заголовок сообщения:  Re: драйвер для CD-ROM

Ищи ошибку в коде. У меня все работает.

Автор:  Fatal_Error [ 04 июл 2013, 13:45 ]
Заголовок сообщения:  Re: драйвер для CD-ROM

оказыается 48h функция дает инфу только о девайсях в номерах 80h-0FFh, а у меня сидюк с номерм 0e0h

Страница 1 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/