Система работает на 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;