c - Linux 中 MMAP 值的生命周期

标签 c linux mmap beagleboneblack

您好,我使用在 debian 上运行的 beaglebone black,我在 /dev/mem 文件上使用 mmap 来访问 GPIO 寄存器。 我有一个包含我的映射函数的 .c 文件:

//sample code

unsigned int *gpio_get_map(int gpio)

{

    unsigned int *gpio_addr = NULL;

    int fd = open("/dev/mem", O_RDWR);
        gpio_addr = mmap(0, GPIO_SIZE, PROT_READ | PROT_WRITE,MAP_SHARED,fd, gpio_get_number(gpio));
        if(gpio_addr == MAP_FAILED)
        {
            printf("Unable to map GPIO : %s\n",strerror(errno));
            close(fd);
            return NULL;
        }
        close(fd);
        return gpio_addr;
}

然后我在另一个 .c 文件中调用此函数以获取 gpio_addr 的值并使用它来操作 GPIO,它工作正常但我不确定 gpio_addr 将有效。 gpio_addr 给出的地址是否始终有效?或者我应该在一段时间后调用另一个 mmap 吗?谢谢。

最佳答案

您不需要更新映射。它将在调用过程中保持有效,直到您明确取消映射(或过程结束)。

关于c - Linux 中 MMAP 值的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25944669/

相关文章:

c - 未设置环境变量,来自 Netbeans

c - 如何在 C 中使用 pstree 显示子进程

c - 在 C 程序中嵌入二进制文件

c - 如何安装信号处理程序名称 sig_handler

linux - 树莓派处于重启循环中

c - 我应该如何以非 root 身份读取 Linux 上的英特尔 PCI 非核心性能计数器?

java - 有没有办法在Java中内存映射大于Integer.MAX_VALUE的文件?

java - 在运行 JVM 兼容程序(Java、Kotlin、Scala 等)时​​,如何更改 JVM 实现(例如 HotSpot、GraalVM、OpenJ9 等)?

linux - RHEL6.5的截图应用

c - mmap() 返回未在函数之间传递