资源简介
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原理图
相关资源
- 力软敏捷开发框架专业版7.0.zip
- 21个项目玩转深度学习基于TensorFlow的
- 计算机网络.7z
- 新92daikan自动刷课答题v.2.1.zip
- 算法第四版.rar
- MyKTV.rar
- 交互原型axure50套第二版.zip
- 米波现场7.2.5.zip
- xx.tar
- Vue.js实战.pdf
- 威盾IPguard4.23.0707.0内网监控官方.z01
- 力软敏捷企业专业版(V6.1_升级版)
- 嵌入式网络那些事——STM32物联实战
- jdk-8u152-windows-x64.rar
- 新概念模拟电路4-信号处理电路.rar
- 风河Workbench3.0_VxWorks6.6应用程序开发使
- zw_internet_27.zip
- 射频电路设计实战宝典512页145.0M高清
- mathematicaanewkindofscience.pdf
- Vue.js项目实战.pdf
- 最新牛牛源码三公炸金花牌九二八杠
- 计算机视觉中的多视图几何(高清中
- 系统规划与管理师_全套资料.zip
- OpManager.zip
- 2019-11--单片机实训课程设计--clq.zip
- 啦啦外卖18.2.zip
- 计算机科学概论(第12版).pdf
- 乡镇边界shape.zip
- Vue.js项目实战.pdf源代码.zip
- [VisualC开发实战1200例.pdf
评论
共有 条评论