免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1707 | 回复: 2
打印 上一主题 下一主题

如何获得每个bio结构里面的数据 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-20 16:13 |只看该作者 |倒序浏览
看了LKM,了解到:
每一次块I/O请求都通过一个 bio结构体表示。每个请求包含一个或多个块,这些块存储在bio_vec结构数组中,bio_vec结构如下:
  
struct bio_vec{
       /* 指向段的页框中页描述符的指针*/(不知道是不是就是数据的首地址???)
    struct page     *bv_page;  
    /* 段的字节长度*/
    unsigned int    bv_len;
    /* 页框中段的偏移量*/
    unsigned int    bv_offset;  
};
那么我可以通过什么方式取得这些块的数据呢?
我参考了前面OstrichFly兄的《写一个块设备驱动》一文。我像可能可以,利用bio_for_each_segment()这个宏
用类似如下代码:(我前面发了一次的,但是还是很混乱,就上来再问次,各位见谅)
int j;
void *iovec_mem, *dsk_mem;

struct bio_vec *bvec;
bio_for_each_segment(bvec,mbio, j)
{
        printk("get %d bytes data\n", bvec->bv_len);
        iovec_mem = kmap(bvec->bv_page) + bvec->bv_offset; //这句不知道是不是对页描述符的拷贝还是具体的页内容的拷贝?
        memcpy(dsk_mem, iovec_mem, bvec->bv_len);
        kunmap(bvec->bv_page);
        printk("Data: %s",(char *)dsk_mem);
}

多谢指点!

论坛徽章:
0
2 [报告]
发表于 2009-02-20 16:41 |只看该作者
参考一下我在经济危机前写的一个帖子:

http://linux.chinaunix.net/bbs/viewthread.php?tid=1008997

^_`

论坛徽章:
0
3 [报告]
发表于 2009-02-22 01:33 |只看该作者
原帖由 xpl 于 2009-2-20 16:41 发表
参考一下我在经济危机前写的一个帖子:

http://linux.chinaunix.net/bbs/viewthread.php?tid=1008997

^_`


谢谢了,这两天有点事情,才看到你的回复:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP