在linux内核中直接将块读/写到磁盘

在linux内核中直接将块读/写到磁盘,linux,io,operating-system,kernel,block,Linux,Io,Operating System,Kernel,Block,正如标题所说,我正在寻找如何在linux内核空间中直接将块读/写到磁盘(绕过文件系统)并直接与块IO层交互 在阅读了一些内核代码之后,我意识到bio是我应该用来在块IO层实现这一目标的结构。但我不太了解bio的结构,也没有弄清楚我到底如何做到这一点 有什么帮助吗?谢谢你如果你只是在做一些简单的事情,你真的不需要搞乱BIO。您可以做的是简单地打开块设备(/dev/whatever),就像它是一个文件一样。内核将做正确的事情,并为您提供用于读/写操作的“瘦”包装器 关于从内核空间打开文件,这里已经回

正如标题所说,我正在寻找如何在linux内核空间中直接将块读/写到磁盘(绕过文件系统)并直接与块IO层交互

在阅读了一些内核代码之后,我意识到bio是我应该用来在块IO层实现这一目标的结构。但我不太了解bio的结构,也没有弄清楚我到底如何做到这一点


有什么帮助吗?谢谢你

如果你只是在做一些简单的事情,你真的不需要搞乱BIO。您可以做的是简单地打开块设备(
/dev/whatever
),就像它是一个文件一样。内核将做正确的事情,并为您提供用于读/写操作的“瘦”包装器

关于从内核空间打开文件,这里已经回答了几个问题,比如:


如果你想做更多有趣的事情,你必须研究FS驱动程序的来源(在FS/子目录中)以寻找示例。

如果有人对Node.js感兴趣,我们昨天发布了一个本机附加组件,其中包含用于打开和使用块设备的助手:

我已经查看了上面的链接。该解决方案不再适用于linux 2.6及更高版本,vfs_read()需要来自用户空间的缓冲区指针。并且该用户空间指针被更深地传递到mm/filemap.c中的do_generic_file_aio_read()中。我在这里迷路了。我正在考虑如何将数据放入内核空间,而不是用户空间。有什么提示吗?THX-看起来,set_fs做的正是你想要的(如链接问题中所述)。已经尝试过了。工作就像一个魅力!!!谢谢你,奥卡德。要了解更多信息,如果其他任何人正在关注此问题,另一个有用的链接是:虽然该链接谈论这不是您想要做的事情,但它在本文后面部分显示了如何做。您最终是如何将块访问连接到磁盘的?请查看下面的评论。