mmap映射内核层内存到用户层
环境:ARM-Linux 3.1.0
内核模块中实现mmap调用,使用remap_pfn_range映射内存
现象:
1、映射的内核内存地址,为驱动模块中定义的全局变量,应用层读出数据为错误的,即映射错误
2、映射的内核内存地址,由kmalloc分配,使用GFP_KERNEL标志,应用层读出数据有时候正确,有时候错误,即错误的时候,卸载模块再重新加载(即kfree后再kmalloc),可能会映射成功
3、映射的内核内存地址,由kmalloc分配,使用GFP_HIGHUSER标志,映射成功,应用层读出数据正确,暂未发现失败情况
问题:
为什么只有使用GFP_HIGHUSER(GFP_USER不行),才能稳定的映射到正确的地址,读出正确的数据?看网上mmap使用范例,都是使用GFP_KERNEL来分配的。