资源简介
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
- 上一篇:Hadoop大数据分析
- 下一篇:中兴4G模块——ME3630原理图
相关资源
- PID_AutoTune_v0.rar
- vspd7.2.308.zip
- 价值2k的H漫画小说系统
- Pythonamp;课堂amp;笔记(高淇amp;400;集第
- ddos压力测试工具99657
- UML建模大全
- 开源1A锂电池充电板TP4056原理图+PCB
- m1卡 ic卡可选择扇区初始化加密软件
- TSCC.exe
- FTP课程设计(服务端+客户端)
- 计算机图形学 边填充算法实现代码
- 电力系统潮流计算程序集合
- oracle数据迁移项目实施方案
- Web Api 通过文件流 文件到本地
- Visio图标-最新最全的网络通信图标库
- Spire API文档
- OpenGL参考手册
- Python中Numpy库最新教程
- SPD博士V5.3.exe
- 直流无刷电机方波驱动 stm32 例程代码
- layui后台管理模板
- 仿知乎界面小程序源代码
- 云平台-阿里云详细介绍
- photoshop经典1000例
- scratch垃圾分类源码(最终版本).sb
- IAR ARM 7.8破解
- TI CCS V5.4 安装步骤及破解文件
- 松下plc FP-XH的驱动
- 局域网硬件信息收集工具
- 加快Windows XP操作系统开机速度
评论
共有 条评论