Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1599824
  • 博文数量: 204
  • 博客积分: 2215
  • 博客等级: 大尉
  • 技术积分: 4427
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-06 08:03
个人简介

气质,源于心灵的自信!

文章存档

2018年(1)

2017年(1)

2016年(1)

2015年(18)

2014年(20)

2013年(30)

2012年(119)

2011年(14)

分类: LINUX

2013-01-15 23:24:46

由于看了一集韦东山大哥的视频,顺手记了一点东西,贴出来跟大家分享下:

框架:

app: open,read,write “1.txt”
***********************************************文件的读写
文件系统:Vfat,ext2,ext3,yaffs2,jffs2:把文件的读写转换为扇区的读写
******************ll_rw_block******************扇区的读写
          1、把“读写”放入队列
          2、调用队列的处理函数 (优化/调顺序/合并)
        块设备驱动程序
*******************************************
硬件:      硬盘,flash

代码路径:fs/buffer.c  //通用的文件,块设备的读写,先缓存到buffer里面,以后再写入磁盘
ll_rw_block(int rw, int nr, struct buffer_head *bhs[]) //读写,nr个数组项
       for (i = 0; i < nr; i++) {
          struct buffer_head *bh = bhs[i];
          submit_bh(rw, bh);
                struct bio *bio; //使用buffer head构造bio (block input/output)
                submit_bio(rw, bio);
                      /*通用的构造请求:使用bio来构造请求(request)*/
                       generic_make_request(bio);
                             __generic_make_request(bio);
                                      struct request_queue *q = bdev_get_queue(bio->bi_bdev);//找到队列
                                      /*调用队列的“构造请求函数”*/
                                      ret = q->make_request_fn(q, bio);
                                              __make_request
                                                    /*先尝试合并*/
                                                    elv_merge(q, &req, bio);         
                   
                                                   /*如果合并不成,用bio构造请求*/             
                                                    init_request_from_bio(req, bio);     
                                                    /*执行队列*/
                                                    __blk_run_queue(q);
                                                          /*调用队列的处理函数*/
                                                          q->request_fn(q);

如何写一个块设备?
1、分配gendisk结构体
2、设置结构体
2.1、分配和设置队列:request_queue_t //它提供读写能力
2.2、设置gendisk其他信息                    //它提供属性:比如容量
3、注册:add_disk()

 

阅读(2572) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~