我正在尝试mmap一个char设备。它适用于65536字节。但是如果我尝试更多内存,我会收到以下错误。
mmap:资源暂时不可用
我想为设备mmap 1MB内存。我为char设备使用alloc_chrdev_region,cdev_init,cdev_add。我如何mmap大于65K的内存?我应该使用块设备吗?
答案 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,
};