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 |
Благодарю ![]() |
Автор: | 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/ |