Linux SD(mmc)读/写:它实际上在哪里完成?

时间:2017-12-06 14:08:30

标签: linux-kernel driver sd-card

为了支持数据修改,我需要编写一个自定义设备驱动程序,在实际写入SD(mmc驱动程序)之前的最后可能时刻插入少量代码,并且,在回读数据后的最早可能时刻来自SD。

我知道所有的I / O都是使用DMA传输直接从/到磁盘缓存结构完成的,这意味着我必须分配一个新的缓冲区,转换缓冲区到temp,将DMA指向temp并开始传输。读取时的反向路径。

理想情况下我应该使用标准的内核加密工具(dm-crypt和LUKS),但我的linux设备是一个小型的嵌入式ARM设备,它可以通过标准加密来减速,所以我愿意为了速度而交换一些安全性。解决“智能混淆”而不是真正的加密。

我需要找到插入代码的地方。在这一点上,我需要访问数据缓冲区,缓冲区将被写入/读取的扇区号,并能够将DMA传输重定向到临时缓冲区。

kernel / drivers / mmc / core / core.c似乎只有处理整个卡的例程(reser,reset,...),而不是实际的数据处理。

我一直找不到合适的地方(到目前为止)有人能指出我正确的文件吗?

编辑: 正如评论中指出的那样,我并不需要在“绝对最后时刻”更改数据,但这似乎是最佳解决方案,因为:

  • Mangling不会改变数据长度。
  • Mangling取决于实际的逻辑部门。
  • 磁盘缓存中的数据应保持可读和可用。
  • 只需要修改传输到SD的数据(Flash中的数据不会被修改)。
  • 我需要对台式机进行相同的修改,以便能够读取/写入嵌入式系统中使用的SD。
  • 开销应保持尽可能低(嵌入式具有低内存和计算能力)。

可以评估任何(大致)等效的解决方案。

我也愿意放弃DMA使用并强制PIO模式用于SD,如果这样可以让事情变得更容易;这将提升扇区复制的要求,因为在将数据从缓冲区传输到外设时,可以“动态”完成请求的修改。

0 个答案:

没有答案