mmap的内存限制

时间:2011-11-25 10:47:10

标签: linux-kernel kernel mmap

我正在尝试mmap一个char设备。它适用于65536字节。但是如果我尝试更多内存,我会收到以下错误。

  

mmap:资源暂时不可用

我想为设备mmap 1MB内存。我为char设备使用alloc_chrdev_region,cdev_init,cdev_add。我如何mmap大于65K的内存?我应该使用块设备吗?

2 个答案:

答案 0 :(得分:2)

在mmap调用中使用MAP_LOCKED标志可能会导致此错误。如果无法锁定内存量,则使用的mlock可以返回EAGAIN。

来自man mmap

  

MAP_LOCKED(自Linux 2.5.37起)锁定映射区域的页面   以mlock(2)的方式进入记忆。旧标识将被忽略   内核。

来自man mlock

  

EAGAIN:   部分或全部指定的地址范围不能   锁定。

答案 1 :(得分:0)

您是否实施了* somedevice_mmap()*文件操作?

static int somedev_mmap(struct file *filp, struct vm_area_struct *vma)
{
    /* Do something. You probably need to use ioremap(). */

    return 0;
}

static const struct file_operations somedev_fops = {
    .owner = THIS_MODULE,
    /* Initialize other file operations. */
    .mmap  = somedev_mmap,
};