gpt4 book ai didi

c - vm_insert_page() 和 remap_pfn_range() 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 15:28:58 30 4
gpt4 key购买 nike

我想使用 ioremap_wc() 将设备内存 (NIC) 映射到内核空间内存区域。然后我想将内存区域从内核空间重新映射到用户空间,为此我可以使用 2 个函数:vm_insert_page()remap_pfn_range()

POSIX mmap(3) 通常使用第二种:remap_pfn_range()

vm_insert_page()remap_pfn_range() 有什么区别,我什么时候需要使用 vm_insert_page() 而不是 remap_pfn_range()?

最佳答案

顾名思义vm_insert_page()映射一个单页,而remap_pfn_range()映射一个连续的内核内存 block 。查看原型(prototype)和评论 vm_insert_page , remap_pfn_range

例如,您可以使用 vm_insert_page到 map vmalloc区域

do {
page = vmalloc_to_page(vaddr);
vm_insert_page(vma, uaddr, page);
vaddr += PAGE_SIZE;
} while(/* there is something to map */);

不可能使用remap_pfn_range因为它只映射一个连续的内核内存块。

另一个区别是 remap_pfn_range您不仅可以映射 RAM 缓冲区,还可以映射其他范围。与 vm_inser_page你可以只映射 RAM 缓冲区

explanation来自莱纳斯

关于c - vm_insert_page() 和 remap_pfn_range() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27468083/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com