繁体   English   中英

读取磁盘中的块(内核编程)

[英]Read chunks in a disk (kernel programming)

我想读取磁盘的第一块(s)块。 我正在开发一个驱动程序,我想在我的磁盘的第一块中存储(并检索)一些元数据(每个块查询的时间)

我已经看到如何在Linux内核中使用生物请求读取扇区 ,然后我开始编写读取部分的代码:

struct bio *bio = bio_alloc(GFP_NOIO, 1);
struct page *page =  alloc_page(GFP_KERNEL)
struct completion event;
bio->bi_bdev = conf->disks[0].rdev;
bio->bi_sector = (sector_t) 0; 
bio_add_page(bio, page, (sizeof(struct nuda_table)) * conf->nbr_chunk, 0);
init_completion(&event);            
bio->bi_private = &event;
bio->bi_end_io = readComplete;

submit_bio(READ | REQ_SYNC, bio);
wait_for_completion(&event);
bio_put(bio);

但后来我不知道我读取的数据存储在哪里。 struct page 其他一点问题: bio_add_page()有一个参数长度,这个假设是字节吗? 或大块? 还是其他的东西?

先感谢您

page_address将返回一个指针(void *),您可以使用该指针读取或写入页面内容。 但是,如果它是高内存中的页面,则仅在页面映射时才起作用。

使用kmap可能更好,因为它会检查你:

void *kmap(struct page *page)
{
        might_sleep();
        if (!PageHighMem(page))
               return page_address(page);
        return kmap_high(page);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM