資源簡(jiǎn)介
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; //主設(shè)備號(hào)?0
static?int?nsectors?=?16384; //設(shè)備大小
static?int?hardsect_size?=?512; //扇區(qū)大小
module_param(sbull_majorint0);
module_param(nsectorsint0);
module_param(hardsect_sizeint0);
struct?sbull_dev
{
int size; //以扇區(qū)為單位設(shè)備的大小
u8 *data; //數(shù)據(jù)數(shù)組(存儲(chǔ)磁盤數(shù)據(jù)隊(duì)列)
struct?request_queue?*queue; //請(qǐng)求隊(duì)列(用于互斥)
struct?gendisk?*gd; //gendisk結(jié)構(gòu)
spinlock_t?lock; //設(shè)備自旋鎖
};
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;
//檢測(cè)命令的有效性
if(_IOC_TYPE(cmd)?!=?SBULL_IOC_MAGIC)
{
return?-EINVAL;
}
if(_IOC_NR(cmd)?>?SBULL_IOC_MAXNR)
{
return?-EINVAL;
}
//根據(jù)命令類型,檢測(cè)用戶空間是否可以訪問
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: //得到主設(shè)備號(hào)
ret?=?__put_user(sbull_major(int?__user*)arg);
break;
case?SBULL_IOCGETSECTORS: //得到扇區(qū)總數(shù)
ret?=?__put_user(nsectors(int?__user*)arg);
break;
case?SBULL_IOCGETSIZE: //得到塊設(shè)備大小
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
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????235520??2011-12-25?20:32??操作系統(tǒng).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
評(píng)論
共有 條評(píng)論