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

读取磁盘中的块(内核编程),第1张

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

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

我已经看到如何在linux内核中使用bio请求来读取扇区 ,然后我开始为读取部分编写代码:

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()有一个参数长度,这是假设是字节? 或块? 还是其他的东西?

先谢谢你

kallsyms是否具有内核函数的所有符号?

在自己的内核模块中,在磁盘睡眠时SIGStop任务

CFQ,截止date和NOOP有什么区别?

linux高内核cpu使用率在内存初始化上

*** 作系统调度algorithm

来自task_struct的完整进程名称

USB_MASS_STORAGE和USB_file_STORAGE之间有什么区别,以及如何最好地使用它?

如何将elf中的地址转换为物理地址

插入linux内核模块静态

测量linux内核从启动到用户空间的时间

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

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

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

总结

以上是内存溢出为你收集整理的读取磁盘中的块(内核编程)全部内容,希望文章能够帮你解决读取磁盘中的块(内核编程)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1284674.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存