Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15339989
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: LINUX

2008-08-03 14:02:50

浅析读取当前扩展分区sdb1的0号扇区实际是怎么实现的

继续阅读之前需要首先参考:
1.浅析fat文件系统是怎么和sd物理卡块设备关联上的

2.整理sd卡驱动在linux 2.6.24上的实现简易心得

3.sd卡随笔

4.浅析sd卡设备申请和驱动绑定简单流程
sb_bread(sb, 0)=>__bread=>__bread_slow=>submit_bh(READ, bh)=>submit_bio=>
generic_make_request=>__generic_make_request()=>blk_partition_remap
/*
* If this device has partitions, remap block n
* of partition p to block n+start(p) of the disk.
*/

blk_partition_remap()=>

struct hd_struct *p = bdev->bd_part;
//当前由mknod创建的分区结构block_device的bd_part为disk->gendisk->
//下struct hd_struct **part;对应的实际主分区或者扩展分区描述体hd_struct
bio->bi_sector += p->start_sect;//所以将当前操作的/dev/sdbx的绝对起始扇区号start_sect加上
这样经过blk_partition_remap之后,sb_bread(sb, 0);读的/dev/sdbx当前扩展分区或者主分区的0区块,实际对应的物理区块绝对块号bio->bi_sector += p->start_sect;就轻松的得到了【gliethttp.Leith】

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