LINUX.ORG.RU

<Вопрос><Как читать память DMA> (C/C++)


0

1

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); } Может кто толковое скажет?

Вообще-то надо это делать

pci_dma_sync_single_for_cpu()
pci_dma_sync_single_for_device()
но эти функции сейчас пусты, ЕМНИП. Но лучше их добавить, ибо будет как с memcpy и адобами.

Documentation/DMA-mapping.txt я надеюсь уже прочитан?

nanoo_linux
()
Ответ на: комментарий от ky-san

1. В BAR у меня находяться регистры управления передачей данных. И мне надо записать в 10 рег физические адреса, куда плата будет записывать данные. Обработка прерывания сам цыкл и логика приема передачи сформирована, осталось брать эти данные из адресов и записывать в файл. И я немогу разобраться с этим DMA((( 2. Да х86, ядро правдо 2.4....

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

По основным разработкам, я работаю в slake 2.6.... А тут надо сделать на этом динозавре и как всегда быстро. По ТЗ что надо сделано, только осталось забрать данные по адресам и записывать их файл, вот и парюсь тк еще не все понятно. Сейчас еще попотею может и разберусь до конца. Главное чтоб система не упала а то panik на дню раз 20-40 бывает. А 10 рег - это 10-ть регистров в BAR1 начиная со смещения 0х0С, это не Scatter/gather.

atlanta
() автор топика
Ответ на: комментарий от ky-san

Почему начинаеть говорить и обьяснять не то что спрашиваю. Может вы не понимаете что я работаю со специальной платой у которой регистры записи/чтения находяться в области памяти устройства BAR1.

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