从内核模式读取/写入另一个块设备的最佳方法

时间:2014-04-05 09:35:56

标签: io linux-kernel block linux-device-driver

我正在编写一个简单的块开发驱动程序,以克服将先前基于硬件的RAID阵列移植到linux的软件raid(mdadm)的一些限制。

这个驱动程序将创建它自己的块设备,但代理r / w请求一个或多个其他块设备(很像mdadm已经)。

一个内核模式驱动程序读取和写入另一个内核模式(块设备)驱动程序的最佳方法是什么?

[EDIT1]:

好的,查看mdadm内核模块代码 - 看起来我们需要像内核那样做 - 将generic_make_request用于处理卷中磁盘的其他磁盘驱动程序。这避免了任何用户模式文件系统阻止设备(/ dev / xyz)到内核模式设备驱动程序的转换,并使I / O完全保持在内核模式。

现在......如何从传递给我模块的几个/ dev / xyz字符串中获取bio句柄....

[EDIT2]:

以错误的方式查看,需要给我的驱动程序Major / Minors(在usermode中翻译/ dev / xyz并通过ioctl将dev_t值传递给驱动程序,从那里它可以引用驱动程序。

我在这里的路上,但仍然接受建议/建议。

1 个答案:

答案 0 :(得分:2)

答案是修改BIO并重新发送它,就像我在这篇文章中所做的那样:

https://unix.stackexchange.com/questions/171800/hp-smartarray-raid5-recovery-on-linux/171801#171801