- 论坛徽章:
- 0
|
使用mmap将内核空间内存映射到用户空间,对这块内存,内核来写,1ms更新一次,用户空间读,测试发现用户空间读取的数据有时会滞后内核更新的数据几个ms。
不知是否mmap参数设置不对,求助大虾帮忙。
内核代码:- p = get_zeroed_page(GFP_KERNEL);
- static int int_mmap(struct file *filp, struct vm_area_struct *vma)
- {
- unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
- unsigned long physics = ((void *)p)-PAGE_OFFSET;
- unsigned long mypfn = physics >> PAGE_SHIFT;
- unsigned long vmsize = vma->vm_end-vma->vm_start;
- unsigned long psize = PAGE_SIZE - offset;
-
- if(vmsize > psize) {
- return -ENXIO;
- }
-
- vma->vm_flags |= VM_IO | VM_SHARED;
- vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
- if(remap_pfn_range(vma, vma->vm_start, mypfn, vmsize, vma->vm_page_prot) != 0) {
- return -EAGAIN;
- }
-
- return 0;
- }
复制代码 用户空间:- s32 test_init()
- {
- fd = open(FILE_DEVICE, O_RDWR);
- if (fd< 0)
- {
- return OSP_ERROR;
- }
- p= mmap(NULL, getpagesize(),
- (u32)PROT_READ | (u32)PROT_WRITE, MAP_SHARED, fd, 0);
- if(ospmmap == MAP_FAILED )
- {
- close(fd);
- return -1;
- }
- return 0;
- }
复制代码 |
|