在内核申请一片物理内存,映射到用户空间使用的方法。环境:Linux ubuntu 4.10.0-42-generic。
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/fcntl.h>
#include <linux/vmalloc.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <asm/page.h>
#include <linux/mm.h>
#include <linux/platform_device.h>
#include <linux/device.h>
#include <linux/moduleparam.h>
#include <linux/cdev.h>
#include <linux/slab.h>
#include <linux/pci.h>
#include <linux/dma-mapping.h>
#include <linux/dmapool.h>
#include <linux/device.h>
#define MMAPIOMEM_DEV_NAME "mmapiomem"
#define MMAPIOMEM_DEV_MAJOR 280
#define MMAP_BUF_SIZE 0x500
char *mmap_buf_ptr;
int mmapiomem_open(struct inode *inode,struct file *filp)
{
return 0;
}
int mmapiomem_release(struct inode *inode,struct file *filp)
{
return 0;
}
int mmapiomem_mmap(struct file *filp,struct vm_area_struct *vma)
{
int result;
unsigned long page;
//vma->vm_flags|=VM_RESERVED|VM_SHARED;
vma->vm_flags |= (VM_IO | VM_LOCKED | (VM_DONTEXPAND | VM_DONTDUMP));
vma->vm_flag