OSDev http://osdev.su/ |
|
DMA 32 bit http://osdev.su/viewtopic.php?f=6&t=416 |
Страница 1 из 3 |
Автор: | JSON [ 17 май 2011, 23:15 ] |
Заголовок сообщения: | DMA 32 bit |
Не могу найти как работать с DMA в защищенном режиме! Как, не подскажите. |
Автор: | SII [ 18 май 2011, 09:44 ] |
Заголовок сообщения: | Re: DMA 32 bit |
Защищённый режим абсолютно никакого отношения к этому не имеет. Просто с приходом шины PCI (и, есно, её продолжателя PCI Express) наконец-то отказались от идиотского контроллера 8237, использовавшегося в древней технике (теперь его аналог в чипсете присутствует лишь "на всякий случай" и "для совместимости", и хоть какая-то польза от него может быть только при работе с гибкими дисками, которые сами уже давно, по большому счёту, умерли). Каждое устройство PCI, потенциально способное обмениваться большими порциями информации (контроллеры дисков, например), само организует прямой доступ к памяти, как то делалось на всех вменяемых машинах ещё полвека назад. Так что изучайте документацию на нужные контроллеры. |
Автор: | Himik [ 18 май 2011, 17:00 ] |
Заголовок сообщения: | Re: DMA 32 bit |
StasBaybak писал(а): Не могу найти как работать с DMA в защищенном режиме! Как, не подскажите. Практически точно так же, как и в реальном режиме. DMA работает только по физическим адресам. А что ты делаешь, если не секрет? |
Автор: | JSON [ 18 май 2011, 17:42 ] |
Заголовок сообщения: | Re: DMA 32 bit |
Немного не то. Смотрите на заголовок "32 bit". Есть ядро ОС. Пишу вторичный загрузчик. DMA работает только с 24 разрядными адресами. это кажись предел в 16МБ не ошибаюсь. Так вот, нашел исходники для флоппи, но там все реализовано через DMA и под 16-разрядный режим. Как грузить ОС с флоппи в адреса пямяти выше 64МБ? По байту вытягивать с портов? Или через шину? |
Автор: | Himik [ 18 май 2011, 18:11 ] |
Заголовок сообщения: | Re: DMA 32 bit |
Так он больше не умеет, нет ни каких 32 бит, т.к. устройство очень старое. Со времён PC/AT 286 он не модернизировался. Можно использовать промежуточный буфер в районе 16М адресов, а затем результат перекопировать в 4Г пространство простым копированием. Вроде бы у IDE контроллеров есть встроенные DMA, которые 32 битные. Но они только для IDE. |
Автор: | SII [ 18 май 2011, 22:05 ] |
Заголовок сообщения: | Re: DMA 32 bit |
Ну так эти контроллеры являются PCI-устройствами (или, как сейчас, PCI Express, но в первом приближении можно считать, что разницы между этими шинами для программиста нет). Посему у них и имеется возможность самостоятельно организовывать прямой доступ к памяти. Соответственно, если нужно читать-писать жёсткий диск или там ДВД -- изучаем документацию на дисковый контроллер. Ну а если флоп -- то только программная пересылка туда, куда нужно (благо, даже полные 2,88 Мбайт, если таковой привод кто-нибудь сможет найти, процессор перешлёт в миллион раз быстрей, чем эти мегабайты будут с флопа прочитаны). |
Автор: | JSON [ 19 май 2011, 12:59 ] |
Заголовок сообщения: | Re: DMA 32 bit |
Немного почитал про ATA и PCI. Как я понял порт DMA контролера вычисляется через контролер жесткого драйва(HDD), потом в PRD заноситься дескриптор адреса в памяти. Я верно понял? |
Автор: | iz56 [ 19 май 2011, 16:15 ] |
Заголовок сообщения: | Re: DMA 32 bit |
http://bos.asmhackers.net/- неплохой пример работы с флоппи в защ. режиме. Мне удалось разобраться примерно за месяц. Сейчас конечно не помню подробности. Если знаешь fasm ,конечно. |
Автор: | achesnokov [ 19 май 2011, 16:52 ] |
Заголовок сообщения: | Re: DMA 32 bit |
Цитата: Немного не то. Смотрите на заголовок "32 bit". Есть ядро ОС. Пишу вторичный загрузчик. Как грузить ОС с флоппи в адреса пямяти выше 64МБ? По байту вытягивать с портов? Или через шину? Вторичный загрузчик для работы с адресами за пределами 1M переходит в т.н. BIG REAL MODE (FLAT). В этом режиме CS:IP обычные 16-ти битные, а в сегментные регистры загружены селекторы, позволяющие адресовать всю память 4G. В этом режиме можно вызывать обычные функции BIOS. Загрузчик, пользуясь BIOS грузит покластерно ядро в память. Потом обычным memcpy() копирует блоки в любой адрес, какой нужно. Именно так реализована загрузка Windows. Так же работает GRUB (Linux, FreeBSD,NetBSD). По загрузке Windows: http://support.microsoft.com/kb/100323/en-us По DMA документация http://www.intel-assembler.it/PORTALE/4 ... 7A_DMA.pdf По FLAT режиму http://en.wikipedia.org/wiki/Unreal_mode , http://www.sudleyplace.com/pmtorm.html |
Автор: | phantom-84 [ 19 май 2011, 20:34 ] |
Заголовок сообщения: | Re: DMA 32 bit |
Цитата: Немного почитал про ATA и PCI. Как я понял порт DMA контролера вычисляется через контролер жесткого драйва(HDD), потом в PRD заноситься дескриптор адреса в памяти. Примерно так. Только "DMA контроллер" - это часть PCI IDE. У других видов устройств свои правила программирования прямого доступа к памяти.Я верно понял? Цитата: http://bos.asmhackers.net/- неплохой пример работы с флоппи в защ. режиме. Вообще-то речь о "DMA 32 bit". Флоппик - это пожалуй сейчас тот единственный случай, когда еще нужно использовать логику 8237.
|
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |