The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"<Вопрос><Как читать память DMA> "
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"<Вопрос><Как читать память DMA> "  +/
Сообщение от atlanta on 30-Мрт-11, 15:04 
C DMA сталкиваюсь впервые. Маны причитаны самая толковая O'Relly (кажеться так его зовут). Недопонимаю как читать DMA.

В drname_open вызываю pci_alloc_consistent, получаю виртуальный адрес rx_buf и физический dma_buf, те
  rx_buf = pci_alloc_consistent(ppci_dev, len_dma, &dma_buf);

Потом записываю в регистры pci Ri...Ri+n физические адреса dma_buf с требуемым смещением. Запись/чтение регистров Ri...Ri+n в BARn все ок (проверяно).

Дальше хочу просто хочу прочитать значение в dma. Делаю это в прерывании/или  в ioctl.
unsigneg char *pBuf = NULL;
for (int i = 0; i < MAX_BYTE_I; i++)
{
pBuf = &rx_buf[i];
printk("<1> %x \n", *pBuf);
}
Может кто толковое скажет?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "во шариш а"  +/
Сообщение от Вова on 31-Мрт-11, 09:44 
от это шарит в кампах пацан а!  О шарит!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "<Вопрос><Как читать память DMA> "  +/
Сообщение от C on 03-Апр-11, 02:50 
такому умному как вы врядли можно что то обьяснить!
лучше откройте любой драйвер, к примеру сетевой карты
и сами разберитесь как он работает
тогда и поймете как работает DMA и сами сможете сделать то что вы там с ней хотите
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "<Вопрос><Как читать память DMA> "  +/
Сообщение от Alex_S (??) on 04-Апр-11, 07:05 
> C DMA сталкиваюсь впервые. Маны причитаны самая толковая O'Relly (кажеться так его
> зовут). Недопонимаю как читать DMA.

в чем собственно проблема ?
DMA - это не память, а способ доступа.
грубо говоря, ты устанавливаешь, сколько откуда и куда писать, пинаешь контроллер и он начинает тебе копировать, а ты можешь заниматься другими делами - процессор не участвует.
Потом контроллер тебе прерывание выставит, например, когда закончится копирование.
как выставил - все, можешь читать каким угодно образом. хоть в цикле побайтно.

pci_alloc_consistent, насколко я помню, просто дает тебе буфер приема. Потом ты сообщаешь его контроллеру и программируешь пересылку - через pci регистры или еще как ...


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру