Проблема получения физического адреса в модуле ядра - не удается MMAP по этому адресу - PullRequest
0 голосов
/ 21 марта 2019

Я реализую DMA через регистры с отображением в памяти, и мне нужен физический адрес буферов, используемых для передачи на устройство DMA.

Я выделяю свою память с помощью модуля ядра, а затем передаю физический адрес приложению пользовательского пространства, управляющему DMA. Я пытался с и без Page Shift.

float* buffer = (float*) kcalloc(512, sizeof(float), GFP_DMA); //allocate physical memory for DMA
unsigned long physAddr = virt_to_phys(buffer) >> PAGE_SHIFT;

Когда я записываю эти addrs на мое устройство DMA, никакие данные не перемещаются - и когда я пытаюсь mmap на эти addrs из / dev / mem, они приводят к неверным указателям (segfaults при чтении).

Как мне получить эти адреса для выделенной памяти?

...