簡體   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