Отображение памяти ввода-вывода непосредственно в пространство пользователя - PullRequest
0 голосов
/ 07 марта 2020

Система работает на SO C Система работает linux. Я использую раздел о DDR для ввода / вывода. Этот раздел о DDR скрыт от ОС, ОС не «видит» эту часть DDR, она думает, что имеет меньше памяти, чем фактический размер.

В настоящее время мой драйвер отображает этот раздел на ядро используя ioremap, а приложение пользовательского пространства считывает / записывает данные в этот раздел с помощью функции чтения / записи, которую я реализовал в драйвере.

Я хочу отобразить эту часть памяти непосредственно в пространство пользователя с помощью mmap, чтобы сохранить копии между пользовательским пространством и ядром и тем самым улучшают производительность.

Я не уверен, как это сделать. из того, что я прочитал, мне нужно использовать функцию remap_pfn_range. Я написал функцию mmap следующим образом:

vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
pfn = phy_add >> PAGE_SHIFT;
vma->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP;

ret = remap_pfn_range(vma, vma->vm_start, pfn, mem_size, vma->vm_page_prot);
if (ret < 0) {
    pr_err("could not map the address area\n");
    return -EIO;
}

return ret;
...