- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 ARM 上的内核 3.18。我正在从正在为其编写驱动程序的相机读取数据。我使用以下设置内存:
cpu_handle = dma_alloc_coherent(NULL, dma_size, &dma_handle, GFP_KERNEL | GFP_DMA);
这工作得很好。相机传完数据后,我用同一个内核模块读取内存,就可以看到图片了。
现在我想启动一个用户空间应用程序来读取相同的数据。我认为要走的路是remap_pfn_range
。
我一直在寻找示例,但他们从未描述过的一件事是我从哪里获得 vm_area_struct。我假设这必须来自用户应用程序,对吗?对于第一个参数,它说“要映射到的用户 vma”。那么如何获得指向该结构的指针呢?
最佳答案
看起来 vma 指针来自用户空间应用程序。
在驱动程序(内核空间)中,我必须创建一些方法以及/dev 文件。
然后在用户应用程序中,我打开/dev 文件并在其上调用 mmap。这反过来又在我的驱动程序中调用了我自己的 mmap 方法,并且 vma (vm_area_struct) 被神奇地发送了。
关于linux - 我在哪里可以得到 remap_pfn_range 的 vm_area_struct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38684979/
作为 Traversing all the physical pages of a process 答案的扩展和数据在这里http://www.makelinux.net/ldd3/chp-15-se
由于我只有第一版《Understanding the Linux Kernel》这本书,我看了一些Linux 2.2.14的源代码,已经很老了。 从源代码来看,我认为属于进程通过 open() 系统调
我正在使用 ARM 上的内核 3.18。我正在从正在为其编写驱动程序的相机读取数据。我使用以下设置内存: cpu_handle = dma_alloc_coherent(NULL, dma_size,
我正在阅读 Linux 设备驱动程序的内存管理一章,我遇到了 vm_area_struct 。该结构有一个偏移量字段,即 unsigned long vm_pgoff 。 我检查了该成员的评论为 /*
内核模块代码: static int __init module(void) { struct pid *current_pid; struct task_struct *curren
基本上,我需要识别使用页面的进程或任务,并相应地做出一些关于是否允许页面换出的决定。因为内核 AFAIK 中的交换模块主要处理 struct page,所以我想知道是否缺少一些现有的技巧。来自 inc
这是学校的一项作业,我需要使用系统调用来确定系统上进程的大小。我的代码如下: ... struct task_struct *p; struct vm_area_struct *v; struct m
在mm_struct中,有一些字段指示数据区域的范围:start_data、end_data。并且在数据区域的vm_area_struct中还有指示该区域范围的字段:vm_start、vm_end。
据我了解Linux内核中的内存管理,每个进程中都有一个负责地址空间的mm_struct结构。一个重要的内存区域是堆栈。这应该由 vm_area_struct 内存区域标识,mm_struct 本身有一
我是一名优秀的程序员,十分优秀!