实验七(补充)学写块设备驱动

实验七(补充)学写块设备驱动

ID:40261062

大小:343.50 KB

页数:11页

时间:2019-07-29

实验七(补充)学写块设备驱动_第1页
实验七(补充)学写块设备驱动_第2页
实验七(补充)学写块设备驱动_第3页
实验七(补充)学写块设备驱动_第4页
实验七(补充)学写块设备驱动_第5页
资源描述:

《实验七(补充)学写块设备驱动》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、学写块设备驱动(一)----了解gendisk及request处理函数以下是一个最简单的块设备驱动,写完可以对编写块设备驱动的框架有初步了解。环境:Linux2.6.29源码:simp_blkdev.c:#include#include#include#include#include#define SIMP_BLKDEV_DISKNAME "simp_blkdev"#define SI

2、MP_BLKDEV_DEVICEMAJOR COMPAQ_SMART2_MAJOR#define SIMP_BLKDEV_BYTES (8*1024*1024)static DEFINE_SPINLOCK(rq_lock);unsigned char simp_blkdev_data[SIMP_BLKDEV_BYTES];static struct gendisk *simp_blkdev_disk;static struct request_queue *simp_blkdev_queue;//device's request

3、 queuestruct block_device_operations simp_blkdev_fops = {    .owner = THIS_MODULE,};//handle request that pass to this devicestatic void simp_blkdev_do_request(struct request_queue *q){    struct request *req;  while( (req = elv_next_request(q)) != NULL){          if

4、( ( (req->sector + req->current_nr_sectors)<<9) > SIMP_BLKDEV_BYTES ){              printk(KERN_ERR SIMP_BLKDEV_DISKNAME ":bad request: block=%llu, count=%u",( unsigned long long )req->sector,req->current_nr_sectors);              end_request(req,0);              c

5、ontinue;          }            switch( rq_data_dir(req)){        case READ:              memcpy(req->buffer,(simp_blkdev_data + (req->sector<<9)),req->current_nr_sectors << 9);              end_request(req,1);              break;          case WRITE:              mem

6、cpy((simp_blkdev_data + (req->sector<<9)),req->buffer,req->current_nr_sectors << 9);              end_request(req,1);              break;          }      }  }   static int simp_blkdev_init(void){      int ret;      //init the request queue by the handler function    

7、  simp_blkdev_queue = blk_init_queue(simp_blkdev_do_request,&rq_lock);      if(!simp_blkdev_queue){          ret = -ENOMEM;          goto error_init_queue;      }      //alloc the resource of gendisk      simp_blkdev_disk = alloc_disk(1);      if(!simp_blkdev_disk){ 

8、         ret = -ENOMEM;          goto error_alloc_disk;      }    //populate the gendisk structure    strcpy(simp_blkdev_disk->disk

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。