ChinaUnix.net
相关讨论

flash 设备是否支持mmap呢? 先来看看flash上的一个文件,其mmap逻辑: 以ubifs 为例: static const struct vm_operations_struct ubifs_file_vm_ops = { .fault = filemap_fault, .page_mkwrite = ubifs_vm_page_mkwrite, .remap_pages = generic_file_remap_pages, }; 在mmap缺页时,filemap_fault从flash读数据到page cache,最后完成page cache的读写。 所以flash上的文件是支持mmap的。 如果是flash设备的直接mm...

by chenyu105 - 内核源码 - 2014-03-21 15:34:02 阅读(854) 回复(2)

对于驱动程序来说,内核映射可以提供给应用程序直接访问设备内存的能力。本文先分析mmap的操作原理,接下来分析在framebuffer中该操作具体如何实现的。 mmap的操作原理 本质:映射一个设备意味着将用户空间的一段内存与设备内存关联起来 映射规则:必须是以PAGE—SIZE为单位进行映射,内核只能在页表一级上对虚拟地址进行管理 驱动程序员需要做的事情 1)为访问设备的虚拟地址建立合适的页表 2)将vma->vm-ops 替换一系列的新操作...

by jeefjiang1983 - Linux文档专区 - 2008-06-06 11:33:59 阅读(824) 回复(0)

本帖最后由 congbupt 于 2011-12-17 14:37 编辑 各位兄弟,我尝试用mmap方法去写一个LED的驱动程序,就是不成功,各位看看有什么好的建议没。 LED对应的GPIO CON寄存器地址为0x56000010,DATA寄存器的物理地址为0x56000014。 驱动程序如下: 61 int mmapled_mmap(struct file *filp,struct vm_area_struct *vma) 62 { 63 int ret; 64 vma->vm_flags |= VM_RESERVED; 65 vma->vm_flags |= VM_IO; 66 ret = ...

ledmmap驱动

by congbupt - 驱动开发 - 2011-12-18 20:19:38 阅读(2086) 回复(2)

map_driver.h #include asm/atomic.h> #include asm/semaphore.h> #include linux/cdev.h> struct mapdrv{ struct cdev mapdev; atomic_t usage; /*Since this is read-only, we don't need sem or locks.*/ }; map_driver.c #include linux/kernel.h> #include linux/module.h> #include linux/fs.h> #include linux/string.h> #include linux/errno.h> #include linux/mm.h> #include linux/vmalloc.h> #include l...

by ubuntuer - Linux文档专区 - 2009-12-13 14:28:51 阅读(1856) 回复(0)

设备缓冲区进行操作时, 要不要考虑与底层驱动的竞争问题?如果要,用sem_wait及sem_post来解决可不可以

by wangyl1982 - 嵌入式开发 - 2007-12-19 13:19:14 阅读(1481) 回复(0)

#define LEN 64*1024 fd = open("device"); .... .... char *addr = (char *)mmap(NULL,LEN, PROT_READ,MAP_SHARED,fd,0); 单步跟踪时,打印出fd 为5,但跟到mmap时出错,返回oxffffffff的地址,请问是怎么一回事? [ 本帖最后由 lihonggang1999 于 2006-5-12 09:17 编辑 ]

by lihonggang1999 - C/C++ - 2006-05-14 18:53:38 阅读(2007) 回复(4)

mmap   功能描述: mmap函数是unix/linux下的系统调用   mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。   基于文件的映射,在mmap和munmap执行过程的任何时刻,被映射文件的st_atime可能被更新。如果st_atime字段在前述的情况下没有得到更新,首次对映射区的第一个页索引...

by coolcoolrain - Linux文档专区 - 2010-01-15 23:45:59 阅读(629) 回复(0)

mmap   功能描述: mmap函数是unix/linux下的系统调用   mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。   基于文件的映射,在mmap和munmap执行过程的任何时刻,被映射文件的st_atime可能被更新。如果st_atime字段在前述的情况下没有得到更新,首次对映射区的第一个页索引...

by embededgood - Linux文档专区 - 2009-07-12 00:11:30 阅读(669) 回复(0)

struct page中有一个域为指针mapping ,它指向一个struct address_space类型结构。page cache或swap cache中的所有页面就是根据address_space结构以及一个偏移量来区分的。 文件与 address_space结构的对应:一个具体的文件在打开后,内核会在内存中为之建立一个struct inode结构,其中的i_mapping域指向一个address_space结构。这样,一个文件就对应一个address_space结构,一个 address_space与一个偏移量能够确定一个page cache...

by Elite - Linux文档专区 - 2007-01-28 22:45:10 阅读(590) 回复(0)

由于要访问大内存(over 4G),所以要使用以上几个函数。 但是在使用过程中遇到几个问题: 1. mmap2按照man里说的,include了,但是却编不过。 在.cpp里使用,是直接报没有声明的错误。 在.c里使用,可以编译但是链接失败。而且编译时有一个warning,说是把integer赋给了pointer,明明返回的是void*怎么成integer了?搞不懂。 2. mmap64在32位系统上使用没有问题, 在64位系统上,.c编译也会有上面...

by Finasy - 程序开发 - 2007-01-08 10:58:36 阅读(1118) 回复(0)