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

问题描述 投票:0回答:2

我刚刚开始在一家新公司工作,我是嵌入式世界的新手。 他们给了我一项任务,我已经完成了并且正在发挥作用,但我不知道我是否以正确的方式完成了任务。 我将描述该任务以及我所做的事情。

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

为了向 Linux 隐藏 DDR 的一块,我只是将 Linux 内存 arg 更改为等于实际内存大小 - (我需要的大小 + 为了安全起见的一些小大小)。我已经有了这个想法,以及我将在这篇文章中描述的驱动程序的想法。 之后,Linux 看到的内存比硬件少,并且 DDR 的顶部部分对内核隐藏,我可以放心地将它用于我的存储。

我认为我已经完成了这一部分,但我无法对下一部分说些什么。 对于下一部分,为了能够读取我保存的这一段DDR,我编写了一个Char设备驱动程序,它正在工作,它正在读取我保存到文件中的DDR块一块一块,每块的大小不超过一些我决定,不能在一份副本中完成它,因为它需要分配一个大缓冲区,而我没有足够的 RAM 空间。

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

c linux driver
2个回答
2
投票

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

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

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


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.