气质,源于心灵的自信!
全部博文(204)
分类: 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()