• 大小: 0.14M
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2022-04-06
  • 语言: 其他
  • 标签: 其他  

资源简介

vajp38.rar

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include “sbull.h“

static int sbull_major = SBULL_MAJOR; //主设备号 0
static int nsectors = 16384; //设备大小
static int hardsect_size = 512; //扇区大小

module_param(sbull_majorint0);
module_param(nsectorsint0);
module_param(hardsect_sizeint0);

struct sbull_dev
{
int size; //以扇区为单位设备的大小
u8 *data; //数据数组(存储磁盘数据队列)
struct request_queue *queue; //请求队列(用于互斥)
struct gendisk *gd; //gendisk结构
spinlock_t lock; //设备自旋锁
};

static struct sbull_dev *Devices = NULL;

static int sbull_open(struct inode *inodestruct file *filp)
{
return 0;
}

static int sbull_release(struct inode *inodestruct file *filp)
{
return 0;
}

static int sbull_ioctl(struct inode *inodestruct file *filpunsigned int cmdunsigned long arg)
{
int ret = 0;
int err = 0;
//检测命令的有效性
if(_IOC_TYPE(cmd) != SBULL_IOC_MAGIC)
{
return -EINVAL;
}
if(_IOC_NR(cmd) > SBULL_IOC_MAXNR)
{
return -EINVAL;
}
//根据命令类型,检测用户空间是否可以访问
if(_IOC_DIR(cmd) & _IOC_READ)
{
err = !access_ok(VERIFY_WRITE(void*)arg_IOC_SIZE(cmd));
}
else if(_IOC_DIR(cmd) & _IOC_WRITE)
{
err = !access_ok(VERIFY_READ(void*)arg_IOC_SIZE(cmd));
}
if(err)
{
return -EFAULT;
}
switch(cmd)
{
case SBULL_IOCGETMAJOR: //得到主设备号
ret = __put_user(sbull_major(int __user*)arg);
break;
case SBULL_IOCGETSECTORS: //得到扇区总数
ret = __put_user(nsectors(int __user*)arg);
break;
case SBULL_IOCGETSIZE: //得到块设备大小
ret = __put_user(nsectors * hardsect_size(int __user*)arg);
break;
default:
return -EFAULT;
}
return ret;
}

static void sbull_transfer(struct sbull_dev *devsector_t sectorunsigned long nsectchar *bufferint write)
{
unsigned long offset = sector << 9;
unsigned long nbytes = nsect << 9;
if( (offset + nbytes) > dev->size )
{
printk(KERN_NOTICE “Beyond-end write (%ld %ld)\n“offsetnbytes);
return;
}
if(write)
{
printk(KERN_NOTICE “writing to disk\n“);
memcpy(dev->data + offsetbuffernbytes);
}
else
{
printk(KERN_NOTICE “readding from disk\n“);
memcpy(bufferdev->data + offsetnbytes);
}

}

static void sbull_request(struct request_queue *q)
{
struct request *req;
req = blk_fetch_request(q);
while( req != NULL )
{
struct sbull_dev *dev = req->rq_disk->private_data;
if(!blk_fs_request(req))
{
printk(KERN_NOTICE “Skip non-fs request\n“);
__blk_end_request_all(req0);
continue;
}
sbull_transfer(devblk_rq_pos(req)blk_rq_cur_sectors(req)req->bufferrq_data_dir(req));
if( !__blk_end_request_cur(req0))
{
req = blk_fetch_request(q);
}
}
}

static struct block_device_operations sb

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     235520  2011-12-25 20:32  操作系统.doc

     文件        267  2011-12-11 10:10  sbull\sbull\.sbull.ko.cmd

     文件      24214  2011-12-11 10:10  sbull\sbull\.sbull.mod.o.cmd

     文件      33966  2011-12-11 10:10  sbull\sbull\.sbull.o.cmd

     文件         77  2011-12-11 10:16  sbull\sbull\.tmp_versions\sbull.mod

     文件        235  2011-12-06 10:53  sbull\sbull\Makefile

     文件          0  2011-12-10 20:23  sbull\sbull\Module.symvers

     文件         46  2011-12-11 10:16  sbull\sbull\modules.order

     文件       5332  2011-12-11 10:48  sbull\sbull\sbull.c

     文件        411  2011-12-10 20:41  sbull\sbull\sbull.h

     文件       8715  2011-12-11 10:10  sbull\sbull\sbull.ko

     文件       1451  2011-12-11 10:10  sbull\sbull\sbull.mod.c

     文件       3268  2011-12-11 10:10  sbull\sbull\sbull.mod.o

     文件       6084  2011-12-11 10:10  sbull\sbull\sbull.o

     文件        411  2011-12-10 20:56  sbull\test\sbull.h

     文件       7302  2011-12-11 10:15  sbull\test\test

     文件       1072  2011-12-11 09:53  sbull\test\test.c

    ..AD...         0  2014-08-30 14:11  sbull\sbull\.tmp_versions

    ..AD...         0  2014-08-30 14:11  sbull\sbull

    ..AD...         0  2014-08-30 14:11  sbull\test

    ..AD...         0  2014-08-30 14:11  sbull

----------- ---------  ---------- -----  ----

               328371                    21


评论

共有 条评论