ChinaUnix.net
相关文章推荐:

remap_pfn_range

LDD3中对remap_pfn_range函数使用有这么一段限制方面的说明: 它只能访问保留页和超出物理内存的物理地址。remap_pfn_range不允许重新映射常规地址,这包括 调用get_free_page函数所获得的地址。 超出物理内存的物理地址如何理解?

by whoisliang - 驱动开发 - 2009-01-14 18:19:44 阅读(8216) 回复(7)

相关讨论

LDD中有这样一句: "remap_pfn_range 的一个限制是它只存取保留页和在物理内存顶之上的物理地址" 哪位高手可以讲解下到底怎么样理解吗? 如: 在模块中分别用 kmalloc, vmalloc, 或直接一个buf[256], 应分别怎么样把它们mmap到用户空间啊? 谢谢高手讲解!!

by eagle1597 - 内核源码 - 2007-04-09 21:54:38 阅读(5410) 回复(2)

自己写了一个虚拟的字符设备/dev/test ,字符设备在内核中为一块内存(用kmalloc), 我想实现的功能是:先通过mmap函数把设备文件映射到用户空间,然后通过strncpy函数向设备写入数据,然后再通过read去读我写入的数据。 我的问题是:在用户空间中如设置mmap的参数:offset = 0;可以正常实现功能,也就是可以用read读出来,而当offset = 1024*4(4k倍数)时不能实现我想要的结果(用read读不出用strncpy写入的数据)。其他file_operati...

kernellinux

by bin_linux96 - IT职业生涯 - 2011-12-01 17:26:12 阅读(5080) 回复(1)

麻烦移步到 http://bbs.chinaunix.net/thread-4060987-1-1.html

by hhb0331 - 内核源码 - 2012-12-29 01:05:00 阅读(1136) 回复(1)

通过运行下面这个程序发现并没有像书上所说的那样重映射第0号内存页,可是书上说该函数不能映射RAM,书是LDD3 [code] #include #include #include #include #include #include #include int main(int argc, char **argv) { char *fname; FILE *f; unsigned long offset, len; void *address; if (argc !=4 || sscanf(...

by wawxdyy - Linux环境编程 - 2007-09-23 09:08:00 阅读(2567) 回复(0)

static int remap_mmap(struct file *filp, struct vm_area_struct *vma) { int i = 0; int j = 0x0; if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, vma->vm_end - vma->vm_start, vma->vm_page_prot)) return -EAGAIN; vma->vm_ops = &remap_vm_ops; return 0; } 想用上述程序实现mmap,但是发现在用户态调用mmap大于2...

by topjupiter - 内核/嵌入技术 - 2006-04-14 23:07:27 阅读(1464) 回复(0)

static int remap_mmap(struct file *filp, struct vm_area_struct *vma) { int i = 0; int j = 0x0; if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, vma->vm_end - vma->vm_start, vma->vm_page_prot)) return -EAGAIN; vma->vm_ops = &remap_vm_ops; return 0; } 想用上述程序实现mmap,但是发现在用户态调用mmap大于2...

by topjupiter - 内核源码 - 2006-04-14 23:07:27 阅读(1577) 回复(0)

本帖最后由 hhb0331 于 2012-12-27 15:19 编辑 书中page 449中: The following does the trick for a driver mapping a region of simple_region_size bytes, beginning at physical address simple_region_start (which should be page-aligned): (注释为我的理解) //off为设备上需要映射内存的偏移量(大小,单位字节),相对于simple_region_start而言 unsigned long off = vma->vm_pgoff << PAGE_SHIFT; //设备映射内存的起始...

by hhb0331 - 驱动开发 - 2012-12-27 16:08:01 阅读(1431) 回复(1)

今天看《深入linux设备驱动程序内核机制》,其中说道: 在x86下 io_remap_pfn_range 的 定义如下 # define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ remap_pfn_range(vma, vaddr, pfn, size, prot) 也就是说 io_remap_pfn_rangeremap_pfn_range 实质是一样的。 我的疑惑是: io 端口空间是用in out 指令来访问的。 io 内存空间 是用mov 这样的指令访问的。 假如说在两个地址空间中各存在...

by firocu - 内核源码 - 2012-09-26 13:44:40 阅读(3945) 回复(5)

在驱动程序中我用__get_free_pages申请了1MB的内存,将这1MB内存用remap_page_range映射到用户空间。但应用程序用mmap()的地址读不到数据,但用在驱动中增加一个IOCTL命令用copy_to_user却可以拿到数据。这是为什么?

by zhuoyuesky - 内核/嵌入技术 - 2006-11-06 16:48:16 阅读(751) 回复(1)

在驱动程序中我用__get_free_pages申请了1MB的内存,将这1MB内存用remap_page_range映射到用户空间。但应用程序用mmap()的地址读不到数据,但用在驱动中增加一个IOCTL命令用copy_to_user却可以拿到数据。这是为什么?

by zhuoyuesky - 内核源码 - 2006-11-06 16:48:16 阅读(3745) 回复(1)