memdev.h
如下:
#ifndef _MEMDEV_H_
#define _MEMDEV_H_
#ifndef MEMDEV_MAJOR
#define MEMDEV_MAJOR 251 /* 预设的mem的主设备号 */
#endif
#ifndef MEMDEV_NR_DEVS
#define MEMDEV_NR_DEVS 2 /* 设备数 */
#endif
#ifndef MEMDEV_SIZE
#define MEMDEV_SIZE 4096
#endif
struct mem_dev {
/* mem设备描述结构体 */
char *data;
unsigned long size;
};
#endif /* _MEMDEV_H_ */
memdev.c
如下:
#include <linux/module.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/cdev.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/uaccess.h>
#include "memdev.h"
static int mem_major = MEMDEV_MAJOR;
module_param ( mem_major, int, S_IRUGO );
struct mem_dev *mem_devp; /* 设备结构体指针 */
struct cdev cdev;
int mem_open ( struct inode *inode, struct file *filp ) {
/* 文件打开函数 */
struct mem_dev *dev;
int num = MINOR ( inode->i_rdev ); /* 获取次设备号 */
if ( num >= MEMDEV_NR_DEVS ) {
return -ENODEV;
}
dev = &mem_devp[num];
filp->private_data = dev; /* 将设备描述结构指针赋值给文件私有数据指针 */
return 0;
}
int mem_release ( struct inode *inode