【我是设备驱动程序编程的新手,所以请大家耐心等待】
我正在编写一个字符设备驱动程序,并且我正在尝试将驱动程序中分配的内存的某些部分映射到用户空间。
在 init_module() 函数中,我像这样分配一些缓冲区空间 -
buf = (char*)vmalloc_user(SIZE_OF_BUFFER);
buf 现在指向某个地址。
现在,在驱动程序的 mmap 函数中,我设置了 VM_RESERVED 标志,然后调用
remap_vmalloc_range(vma, (void*)buf, 0);
然后我在 /dev 中使用正确的主设备号创建一个字符设备文件。
现在我在用户空间创建一个简单的程序来打开字符设备文件,然后调用 mmap() 并从这个 mmap 的内存中读取数据。
在用户空间中对 mmap() 的调用中,我知道有一个选项可以传递该区域的起始地址。但是有没有办法让用户空间 mmap 指向与驱动程序空间中的 buf 相同的地址?
我认为由于驱动程序空间中 buf 的地址与用户空间中 mmap() 返回的地址不同,我的用户空间程序最终会读取垃圾值。除了在用户空间的mmap()中实际输入地址之外,还有什么办法可以解决这个问题吗?