我正在使用Linux模块与第三方设备进行交互。当该器件准备好提供模块信息时,它会直接写入RAM存储器地址0x900000。
当我检查/ proc / iomem时,我得到:
sass
从我的理解来看,这意味着它正在写入一个在用户空间中间浮出的地址。
我知道这不是最佳情况,能够使用内存映射地址/寄存器会更好,但我现在无法改变其工作方式。
如何让我的内核模块安全地声明用户空间内存空间从0x900000到0x901000?
我尝试了mmap和ioremap,但这些实际上是用于内存映射寄存器,而不是访问用户空间中已经存在的内存。我相信我只需使用指针即可从地址读取/写入,但如果将该区域分配给另一个进程,则无法防止损坏。
答案 0 :(得分:1)
您可以通过在bootargs中设置mem参数来告诉内核限制内核空间的地址:
mem=1M@0x900000 --> instructs to use 1M starting from 0x900000
你可以在boot args中拥有多个mem 例如:mem = 1M @ 0x900000 mem = 1M @ 0xA00000
以下命令应告诉您分配给内核的内存区域:
cat /proc/iomem | grep System