
我想读取我的磁盘的第一个(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); }
总结以上是内存溢出为你收集整理的读取磁盘中的块(内核编程)全部内容,希望文章能够帮你解决读取磁盘中的块(内核编程)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)