【问题标题】:Best way to read/write to another block device from kernel mode从内核模式读/写另一个块设备的最佳方法
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多