在上一篇文章详细介绍了Linux内存映射之mmap之后,这篇文章主要描述mmap的具体实现,我的编译环境是2.6.35.6内核版本。在我的例子中,分别采用了remap_pfn_range与nopage两种建立内存映射方式。
内核驱动程序:
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/kernel.h> /* printk() */
#include <linux/slab.h> /* kmalloc() */
#include <linux/fs.h> /* everything... */
#include <linux/errno.h> /* error codes */
#include <linux/types.h> /* size_t */
#include <linux/mm.h>
#include <linux/kdev_t.h>
#include <asm/page.h>
#include <linux/cdev.h>
#include <linux/device.h>
static int simple_major = 0;
module_param(simple_major, int, 0);
static int simple_open(struct inode *inode, struct file *filp)
{
return 0;
}
static int simple_release(struct inode *inode, struct file *filp)
{
return 0;
}
void simple_vma_open(struct vm_area_struct *vma)
{
printk(KERN_NOTICE "Simple VMA ope