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

标签 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(),也就是/dev的f_op->mmap/mem 我想。

但是如果我使用 MAP_ANONYMOUS 而没有 fd 的 mmap(),将调用哪个函数来执行 remap_pfn_range

    dataBuffer = (char *)mmap(0, 
                              FILESIZE, 
                              PROT_READ | PROT_WRITE,
                              MAP_SHARED | MAP_ANONYMOUS, 
                              0, 
                              0);

最佳答案

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

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

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

关于linux - 如果 mmap() 没有 fd(使用 MAP_ANONYMOUS),将调用哪个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39269421/

相关文章:

c - 初始化元素不是常量

linux - gcc 链接器 (ld) 找不到共享库

python - Mininet 交换机端口镜像配置

linux - 命令行参数如何从 shell 传递到可执行文件?

linux - 针对内核源代码树构建 Linux 内核模块?

linux-kernel - 用于自优化硬盘驱动器的 Linux 内核模块 : Advice?

linux - Linux 内核中信号处理的堆栈帧

Linux bash脚本逐行删除部分字符串

linux - 使用 kernel_thread 创建内核线程

c - 如何从 libblkid 获取给定 UUID 的设备?