如何在Linux中安全地映射物理内存?

时间:2019-03-22 04:33:12

标签: linux-kernel mmap

我正在关注有关DMA的教程,目标是将数据从ddr移动到ddr的另一部分。在该示例中,它只是使用mmap和dev / mem映射了一个512MB的物理内存,它从某个物理地址(如0x20000000)开始,并向其中写入数据。

我的问题是,由于我们在Linux中使用虚拟内存,因此其他程序可能已经在物理内存的这一部分中使用了某些页面,那么我们如何在不意外损坏其他程序的情况下仍然编写这些内存呢? 谢谢。

这是物理内存的映射部分:

 #define DDR_BASE_ADDRESS     0x20000000
 off_t dev_base_1 = DDR_BASE_ADDRESS;

    memfd_1 = open("/dev/mem", O_RDWR | O_SYNC);
    if (memfd_1 == -1)
    {
        printf("Can't open /dev/mem.\n");
        exit(0);
    }
    printf("/dev/mem opened.\n");
    mapped_base_1 = mmap(0, DDR_MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, memfd_1, dev_base_1 & ~DDR_MAP_MASK);

0 个答案:

没有答案