自己写了一个虚拟的字符设备/dev/test ,字符设备在内核中为一块内存(用kmalloc), 我想实现的功能是:先通过mmap函数把设备文件映射到用户空间,然后通过strncpy函数向设备写入数据,然后再通过read去读我写入的数据。 我的问题是:在用户空间中如设置mmap的参数:offset = 0;可以正常实现功能,也就是可以用read读出来,而当offset = 1024*4(4k倍数)时不能实现我想要的结果(用read读不出用strncpy写入的数据)。其他file_operati...
by bin_linux96 - 内核源码 - 2011-12-02 08:52:51 阅读(2002) 回复(0)
本帖最后由 zcm211 于 2010-11-20 10:59 编辑 我需要在一个C++程序里实现截屏功能,现在大概知道需要读取framebuffer里的信息,然后直接调用Linux下的mmap,但是具体实现不知道怎么搞了,有大大们给个建议吗 系统内核是eabi linux
本帖最后由 registcn 于 2014-04-20 10:37 编辑 我知道fork源码中,mm_struct以及其下的vm_area_struct再以及vm_area_struct下的可写页表是执行写时复制的(先设置共享指针,写的时候再复制)。 如果要保证父子进程通过mmap顺畅通信,这里mmap的vm_area肯定不能各自复制一份的。我的问题:那mmap的区间是特殊处理了?对这个vma设置的共享指针是永久的,不会单独复制一份? 求源码或者详细解释,多谢大家
想在驱动中实现mmap方法,将arm的0x10000000映射给应用程序的mmap调用 驱动中的mmap实现是: static int mmapdrv_mmap(struct file *filp, struct vm_area_struct *vma) { vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); vma->vm_pgoff = ( (u32)0x10000000 >> PAGE_SHIFT); if (remap_pfn_range (vma,vma->vm_start,vma->vm_pgoff, vma->vm_end-vma->vm_start,vma->vm_page...
我的需求就是:在内核态利用__get_free_pages申请4MB内存,并且申请多个这样的内存,然后需要将申请的内存区利用mmap到用户态, 这样用户态就可以对这些内存进行读写操作。之前我在较低的内核中都是可以mmap /dev/mem内存设备文件直接实现,但是在redhat企业版5.5 中不允许对/dev/mem内存设备文件进行mmap操作,于是我需要通过别的方法将申请的内存映射出来,请大家帮我想想具体的实现方法,谢谢,小弟不胜感激。前提是不能重新编译...
需求:实现用mmap访问内核中的一个结构体。
请问怎么做?2.4内核。
内核中结构体的地址是属于内核虚拟地址?还是?
这是我模仿ldd2写的,但是没有效果:(试图访问buff)
#ifndef __KERNEL__
# define __KERNEL__
#endif
#ifndef MODULE
# define MODULE
#endif
#include
使用mmap实现类似cat命令的文件显示功能 文章来源:http://gliethttp.cublog.cn 1.使用vim创建map_cat.c文件 [root@localhost gliethttp]# vim map_cat.c 2.在map_cat.c中录入如下程序 //map_cat.c #include errno.h> #include fcntl.h> #include sys/mman.h> #include sys/stat.h> #include sys/types.h> #include stdio.h> #include unistd.h> int main(int argc,const char *argv[]) {int fd; struct stat sb; void *region; ...
本帖最后由 Arm_Linux_boy 于 2011-03-31 10:10 编辑 我的需求就是:在内核态利用__get_free_pages申请4MB内存,并且申请多个这样的内存,然后需要将申请的内存区利用mmap到用户态, 这样用户态就可以对这些内存进行读写操作。之前我在较低的内核中都是可以mmap /dev/mem内存设备文件直接实现,但是在redhat企业版5.5 中不允许对/dev/mem内存设备文件进行mmap操作,于是我需要通过别的方法将申请的内存映射出来,请大家帮我想想...
测试失败,原因如下:[code]
#include
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...