我应该使用块设备而不是字符设备来读取和写入内存吗?

Should I use block device over char device for reading and writing to memory?

我刚开始在一家新公司工作,我是嵌入式领域的新手。 他们给了我一个任务,我已经完成了并且很有效,但我不知道我是否以正确的方式完成了。 我将描述任务和我所做的事情。

我被要求从 Linux OS 隐藏一小块 DDR,然后一些硬件功能可以向我保存的这一小块内存写入一些东西。之后我需要能够将这一小块内存读取到文件中。

为了从 Linux 中隐藏 DDR 块,我只是将 Linux 内存参数更改为等于实际内存大小 -(我需要的大小 + 一些小的安全大小).我从 this post 得到了我将在几秒钟内描述的驱动程序的想法和想法。 在那之后 Linux 看到的内存比硬件少,而且 DDR 的顶部部分对内核隐藏了,我可以放心地将它用于我的存储。

我觉得这部分我做对了,下一部分我无话可说。 对于下一部分,为了能够读取我保存的这段 DDR,我写了一个 Char 设备驱动程序,它正在工作,它正在读取我保存到文件中的 DDR 块,每块的大小不超过一些我决定的价值,不能在一份副本中完成,因为它需要分配一个大缓冲区,而我没有足够的 RAM space。

现在我读到了块设备,我开始认为也许块设备更适合我的程序,但我不确定中继,因为首先它正在工作并且如果它没有损坏......其次我从未写过块设备驱动程序,我也从来没有写过字符设备驱动程序,直到我之前描述的那个,所以我不确定现在是否是使用块设备而不是字符设备的时候。

这取决于预期用途,但根据您的描述,字符设备更有可能是您想要的。差异:

字符设备只接受简单的读写命令,不需要内核的帮助。这适用于从设备读取或写入(以及任何类似于设备的设备,如果它是按顺序读取的实际流或支持 'seek' 并且可以一遍又一遍地读取相同的数据)。

块设备挂接到内核的内存分页系统,并能够充当虚拟内存页面的后端。它可以托管交换 space,作为文件系统的存储等。它是比字符设备复杂得多的野兽。仅当存储 large 数据量需要通过将其映射到进程的地址 space 来访问时才需要它(通常仅当您需要时才需要在上面放一个文件系统)。