LINUX.ORG.RU

DMA & memory-to-memory


0

0

Люди, хелп плиз, где бы раздобыть сорцы или объяснялку на С/С++ по программированию DMA в линукс. Оччень интересует пересылка память-память!


Драйвер SCSI generic, drivers/scsi/sg.c Конечно, там не "память-память", а "память-устройство", но большой разницы нет. LDD3, глава 15 - там теория объясняется.

А что за девайс такой, что делает "память-память" через DMA?

tailgunner ★★★★★
()

> сорцы или объяснялку на С/С++ по программированию DMA в линукс.

ээ.. DMA в юзерспейсе?..

судя по "C/C++" в посте, видимо, речь про memcpy/memmove/etc

Chubaka
()
Ответ на: комментарий от Chubaka

Дв общем идёт именно что-то типа memcpy, так как мне надо именно выполнить пересылку из одной области ОЗУ в другую с целью демонстрации - пересылка память-память возможна.
Просто у нас с преподом это щас излюбленная тема. В DOS под ASM я пробовал - все режимы DMA работают, а вот память-память - нет, гадский BCR инициилизируется, но счёт не идёт - т.е. дальше инициализации регистров режима дело не заходит.
А вот на С и под линукс ещё не пробовал. Очччень хочу.

cyclope
() автор топика
Ответ на: комментарий от cyclope

Забыл уточнить - пересылка память-память именно через DMA - пусть даже я и не выиграю в скорости - токо для демонстрации.

cyclope
() автор топика
Ответ на: комментарий от int_0dh

> ISAшный DMA контроллер не умеет память-память by design.

Я вообще не встречал устройств, которые делают DMA "память-память", хотя слышал, что такое есть на Altix

> так что ваш препод глубоко прав

Одно из двух - либо он полный дуб, либо OP его не так понял.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Пропустив мимо ушей дуба, привожу текст задания к лабам по DMA:
4)Реализовать сохранение экрана и его восстановление с использованием ПДП (текстовый режим).

Не критично конечно, но если такое задание есть, значит есть люди, удачно его выполнившие на персналке. Или я опять чего не так понял :).
What's up people? |-(|

cyclope
() автор топика
Ответ на: комментарий от cyclope

1) а почему вы думаете что ПДП в данном контексте - это именно DMA? может препод надеется, что вы будете копировать как послушные мальчики с 0xb800:0000 в какой нибудь буфер (т.е предполагается прямой доступ к видеопамяти - в отличие от пользования функциями BIOS например, а отнюдь не DMA)

под Linux из user space к видеобуферу вас за километр не подпустят (если не считать грязных хакофф с /dev/mem)

2) документация по ISA открыта и ищется в google. не думаю что инициализация DMA - обмена в программе на C отлична от таковой в программе на любом другом языке (допускающем использование ассемблерных вставок естественно)

int_0dh
()
Ответ на: комментарий от int_0dh

Увы, но задание тематическое. Именно DMA.
В общем есть у меня архивчик, с разных сайтов накачано, в том числе и исходники на С - всё это DMA обмен усторойство-память и наоборот :).
А вот о режиме память-память только упоминания. Одна вода. Юзаю как гугл, так и яндекс. даташит контроллера тоже читал. Попробую поискать ещё, а то пока глухо.
Насчёт юзерспайса не беда - ну допустим я напишу модуль ядра. Только для демонстрации, и всё.

cyclope
() автор топика
Ответ на: комментарий от cyclope

> Пропустив мимо ушей дуба, привожу текст задания к лабам по DMA:

"либо он полный дуб, либо OP его не так понял" - так вот, OP его не так понял.

> 4)Реализовать сохранение экрана и его восстановление с использованием ПДП (текстовый режим).

Если я правильно помню годы юности, видеопамять располагается на устройстве (видеокарте), так что речь идет об обмене "память-устройство", а не "память-память". Так что (по кр. мере теоретически) через DMA с ней меняться можно. Посмотри спецификации VGA - может, что-нибудь найдешь.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

О! а это идея. Но блин в доке на архитектуру IBM нечиго не сказано о поддерже видеоадаптером режима DMA. Вроде по устройством расспределение идёт так - регенерация памяти, FDC, HDC, cascade. Но всё равно - я подробнее на эту тему посмотрю. Спасибки.

cyclope
() автор топика
Ответ на: комментарий от cyclope

> Но блин в доке на архитектуру IBM нечиго не сказано о поддерже видеоадаптером режима DMA

На тогдашней архитектуре контроллеры DMA были выделенными, btw. Так что видеоадаптер и не должен был его поддерживать. Искать в этой доке нужно примеры использования DMA c видеопамятью.

А вообще-то всё должно быть просто - задаешь DMA-контроллеру адреса и размер, и он пересылает данные. Почитай внимательнее доку по древнеписишным DMA-контроллерам, проверь адреса.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Хм, интересная тема.... память-память? DMA? хм, и что, получилось? Чтото в принципе плохо это себе представляю, что это за шаманство "DMA память-память". Особенно если подумать что такое ПДП (прямой доступ к памяти)и как оно работает, то возникают вопросы: - прямой доступ _кого_ к памяти, какого устройства? - памяти самой к себе? а какие тут в принципе проблемы могли возникнуть чтобы задействовать это в контроллере ПДП? - и подсистема памяти должна сама поддерживать работу в режиме ПДП? Прерывание там выставлять или регистры специальные для опроса - чтоб факт окончания пересылки отловить?

ЗЫ. Чет сдается мне, гон какойто тут.

KIV
()
Ответ на: комментарий от tailgunner

>А вообще-то всё должно быть просто - задаешь DMA-контроллеру адреса и размер, и он пересылает данные.

А как узнать что пересылка завершена? Сравнить области памяти чтоли? :)

KIV
()
Ответ на: комментарий от KIV

>>А вообще-то всё должно быть просто - задаешь DMA-контроллеру адреса и размер, и он пересылает данные.

>А как узнать что пересылка завершена? Сравнить области памяти чтоли? :)

Для того, чтобы узнать, получилось ли - вполне подойдет. А вообще по завершению обмена должно выдаваться прерывание.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.