如果mmap()没有fd(使用MAP_ANONYMOUS),将调用哪个函数?

时间:2016-09-01 10:43:45

标签: linux linux-kernel linux-device-driver

如果我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);

我无法找到它,任何想法?

谢谢。

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案......

没有fd,所以没有f_op->mmap

如果mmap()MAP_ANONYMOUSMAP_SHARED,它将由shmem_zero_setup()处理,设置共享匿名映射,并为vma准备do_mmap_pgoff()