【发布时间】:2014-04-05 09:35:56
【问题描述】:
我正在编写一个简单的块开发驱动程序,以克服将以前基于硬件的 RAID 阵列移植到 linux 的软件 RAID (mdadm) 的一些限制。
此驱动程序将创建它自己的块设备,但代理 r/w 请求到 1 个或多个其他块设备(很像 mdadm 已经做的)。
一个内核模式驱动程序读取和写入另一个内核模式(块设备)驱动程序的最佳方式是什么?
[编辑1]:
好的,查看 mdadm 内核模块代码 - 看起来我们需要像内核那样做 - 对处理“卷”中磁盘的其他磁盘驱动程序使用 generic_make_request。这避免了任何用户模式文件系统块设备 (/dev/xyz) 到内核模式设备驱动程序的转换,并使 I/O 完全处于内核模式。
现在......如何从传递给我的模块的几个 /dev/xyz 字符串中获取 bio 句柄......
[编辑2]:
看这个错误的方式,需要给我的驱动程序Major/Minors(在用户模式下翻译/dev/xyz并通过ioctl将dev_t值交给驱动程序,从那里它可以引用驱动程序。
我正在路上,但仍愿意接受建议/建议。
【问题讨论】:
-
filp_open、filp_close、vfs_read 和 vfs_write 似乎可以实现这一点,但它们是最佳选择吗?与函数相关的注释似乎没有。
标签: io linux-kernel block linux-device-driver