我正在编写一个简单的块开发驱动程序,以克服将以前基于硬件的RAID阵列移植到Linux的软件RAID(mdadm)的一些限制。
此驱动程序将创建自己的块设备,但将 r/w 请求代理到 1 个或多个其他块设备(非常类似于 mdadm 已经这样做)。
一个内核模式驱动程序读取和写入另一个内核模式(块设备)驱动程序的最佳方法是什么?
[编辑1]:
好的,浏览 mdadm 内核模块代码 - 看起来我们需要像内核一样做 - 使用generic_make_request处理"卷"中磁盘的其他磁盘驱动程序。这样可以避免任何用户模式文件系统块设备 (/dev/xyz) 到内核模式设备驱动程序的转换,并使 I/O 完全处于内核模式。
现在。。。如何从传递给我的模块的几个/dev/xyz 字符串中获取生物句柄....
[编辑2]:
以错误的方式看待这个问题,需要给我的驱动程序主要/次要(在用户模式下翻译/dev/xyz 并通过 ioctl 将dev_t值交给驱动程序,从那里它可以引用驱动程序。
好吧,在我来这里的路上,但仍然愿意接受建议/建议。
答案是修改 BIO 并重新发送它,就像我在这篇文章中所做的那样:
https://unix.stackexchange.com/questions/171800/hp-smartarray-raid5-recovery-on-linux/171801#171801