Linux kernel 如何开始实现Linux ECC块设备包装器

Linux kernel 如何开始实现Linux ECC块设备包装器,linux-kernel,error-correction,block-device,Linux Kernel,Error Correction,Block Device,思考学生项目以提供建议;我是一个OK C开发者和C++开发者/架构师。 除了“编写您的第一个模块”之外,没有做过多少Linux内核开发 我想初步实现的事情(在建议学生作为团队项目正确完成之前)是: 以现有的块设备为例,比如说/dev/sda 添加第二个块设备,例如/dev/fec0,它实现了第一个包装器,在读取时提供错误更正,在写入时提供数据+错误编码信息 这意味着fec0的大小小于sda的大小。另外,请注意,这与RAID5方法有些不同,因为没有将奇偶校验数据拆分到辅助数据组或类似数据组 现

思考学生项目以提供建议;我是一个OK C开发者和C++开发者/架构师。 除了“编写您的第一个模块”之外,没有做过多少Linux内核开发

我想初步实现的事情(在建议学生作为团队项目正确完成之前)是:

  • 以现有的块设备为例,比如说
    /dev/sda
  • 添加第二个块设备,例如
    /dev/fec0
    ,它实现了第一个包装器,在
    读取
    时提供错误更正,在
    写入
    时提供数据+错误编码信息
这意味着fec0的大小小于sda的大小。另外,请注意,这与RAID5方法有些不同,因为没有将奇偶校验数据拆分到辅助数据组或类似数据组

现在,我想了解一下如何做到这一点。很明显,除了实现块设备接口本身之外,还需要实现一个控制接口来定义诸如“使用
/dev/sda
创建
fec0
”、“关闭
fec0
”之类的内容

出现的问题是:

  • 是否有一个首选的框架将其集成到?我们的目标是找到一个合理的地方来解决这个问题。请记住:
    • dmraid和
    • lvm2,或
    • 只是一个普通的块设备驱动程序
  • 如何实现控制接口?
    • 特定的
      ioctl
      s
    • /sys/*
      伪文件接口
    • 特定于框架的方法

对于问题的第一部分,我建议您有两个选择:块子系统或md(多设备)子系统。我想我能做的最有用的事情就是给你指出一些参考资料的方向,这样你就可以决定什么最适合你。如果您想考虑逻辑卷,那么它位于md和dm子系统中。如果您只是想限制自己使用RAID功能,那么。但是,如果您想保持简单,只需在一个简单的块设备上做一个包装器,也许可以模拟lvm和raid的某些方面,那么子系统


你的选择也会影响问题的第二部分。单块设备通常提供大量IOCTL;md驱动程序大量使用sysfs接口。希望这会有所帮助。

只是一个建议,但是a)框架应该与您正在包装的框架相同b)kernel.org可以让您开始使用IOCLT和sysfs@secretsquirrel谢谢a) 但我不是“包装框架”,而是包装任意块设备。b) 我知道IOCTL和SYSF是什么——我想知道控制这种函数的好选择是什么。lol OK措辞不好:所以,框架应该依赖于子系统;org有一些关于何时以及为什么应该或不应该使用ioctls等的指针。尽管“输入-输出控制”和“系统文件系统”,“配置文件系统”有点不言自明;在命名方面,Linux非常简单明了。@secretsquirrel-ha!嗯,我还必须承认,我的评论可能措辞不当:我甚至不确定应该在哪个子系统中工作。存储这是一个子系统还是一种过于元化的方式?EDAC(看起来不太像,但可能吧?)?MTD?或者,可以将意图更好地表示为只有一个文件的VFS(错误纠正块dev)?DM/Raid在哪里生存?@Tsyarev,我的观点是正确的,这就是为什么我把它保留在评论中……但我最后给出了一个答案,谢谢马库斯·穆勒;)我不认为这个问题是“从哪里开始”,而是“哪种实现更好”,而且有可靠的技术参考,可以防止回应基于观点。