如何在内核模块中注册用户空间内存区域?
我正在开发一个Linux模块来与第三方设备连接。 当这个设备准备好给我的模块信息时,它直接写入RAM存储器地址0x900000。
当我检查/ proc / iomem时,我得到:
00000000-3fffffff: System Ram
00008000-00700fff: Kernel code
00742000-007a27b3: Kernel datat
从我的理解来看,这意味着它正在写入一个在用户空间中浮出的地址。
我知道这不是最佳情况,能够使用内存映射地址/寄存器会更好,但我现在没有选择改变它的工作方式。
我如何让我的内核模块安全地声明从0x900000到0x901000的用户空间内存空间?
我尝试了mmap和ioremap,但这些实际上是用于内存映射寄存器,而不是访问用户空间中已经存在的内存。 我相信我可以通过使用指针来从地址读取/写入,但是如果该区域被分配给另一个进程,那么这不会阻止腐败。
您可以通过在bootargs中设置mem参数来告诉内核限制内核空间的地址:
mem=1M@0x900000 --> instructs to use 1M starting from 0x900000
例如:mem = 1M @ 0x900000 mem = 1M @ 0xA00000
以下命令应该告诉你分配给内核的内存区域:
cat /proc/iomem | grep System
链接地址: http://www.djcxy.com/p/70327.html
上一篇: How do you register a region of user space memory in a kernel module?
下一篇: How can kernel reach the mmaped memory by the virtual address