首页 > 代码库 > Ramdisk驱动的实现
Ramdisk驱动的实现
文件gao_rd.c如下
#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>//定义了一些常用的函数原型#include <linux/fs.h>//#include <linux/errno.h>//一些出错的常量符号的宏#include <linux/types.h>//定义了一些基本的数据类型。所有类型均定义为适当的数字类型长度。#include <linux/fcntl.h>//文件控制选项头文件,#include <linux/vmalloc.h>#include <linux/hdreg.h>//定义了一些对硬盘控制器进行编程的一些命令常量符号。#include <linux/blkdev.h>#include <linux/blkpg.h>#include <asm/uaccess.h>/*设备名称,段大小,设备大小等信息的定义*/#define GAO_RD_DEV_NAME "gao_rd" //设备名称#define GAO_RD_DEV_MAJOR 220 //主设备号#define GAO_RD_MAX_DEVICE 2 //最大设备数#define GAO_BLOCKSIZE 1024#define GAO_RD_SECTOR_SIZE 512 //扇区大小#define GAO_RD_SIZE (4*1024*1024) //总大小#define GAO_RD_SECTOR_TOTAL (GAO_RD_SIZE/GAO_RD_SECTOR_SIZE) //总扇区数typedef struct{ unsigned char *data; struct request_queue *queue; struct gendisk *gd;}gao_rd_device;static char *vdisk[GAO_RD_MAX_DEVICE];static gao_rd_device device[GAO_RD_MAX_DEVICE];static int gao_rd_make_request(struct request_queue *q, struct bio *bio)/*制造请求函数*/{ gao_rd_device *pdevice; char *pVHDDData; char *pBuffer; struct bio_vec *bvec; int i; if(((bio->bi_sector*GAO_RD_SECTOR_SIZE) + bio-> bi_size) > GAO_RD_SIZE) { bio_io_error(bio/*, bio->bi_size*/); return 0; } else { pdevice = (gao_rd_device *) bio->bi_bdev->bd_disk-> private_data; pVHDDData = http://www.mamicode.com/pdevice->data + (bio-> bi_sector*GAO_RD_SECTOR_SIZE);>
文件Makefile如下KERNELDIR = /usr/src/kernels/2.6.27.5-117.fc10.i686/
PWD := $(shell pwd)
CC =gcc
obj-m := gao_rd.o
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modulesrm -rf *.o *.mod.c *.mod.o *.o *.order *.symvers
编译通过后,再终端依次输入
#mkdir /root/Desktop/ramdisk/gao_rd
#mknod /dev/gao_rd0 b 220 0
#mke2fs /dev/gao_rd0
#mount /dev/gao_rd0 /root/Desktop/ramdisk/gao_rd
Ramdisk驱动的实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。