如果我mmap()
来自设备,例如:/dev/mem
。
fbfd = open("/dev/mem", O_RDWR);
dataBuffer = (char *)mmap(0,
FILESIZE,
PROT_READ | PROT_WRITE,
MAP_SHARED,
fbfd,
0);
然后我可以看到remap_pfn_range
的实际函数是mmap_mem()
,我认为f_op->mmap
是/dev/mem
。
但如果mmap()
MAP_ANONYMOUS
且没有fd,则会调用哪个函数remap_pfn_range
?
dataBuffer = (char *)mmap(0,
FILESIZE,
PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS,
0,
0);
我无法找到它,任何想法?
谢谢。
答案 0 :(得分:0)
好的,我找到了答案......
没有fd,所以没有f_op->mmap
。
如果mmap()
有MAP_ANONYMOUS
和MAP_SHARED
,它将由shmem_zero_setup()
处理,设置共享匿名映射,并为vma
准备do_mmap_pgoff()
。