我应该使用char设备而不是char设备来读写内存吗?

时间:2018-07-02 19:30:50

标签: c linux driver

我刚开始在一家新公司工作,而我在嵌入式领域是新手。 他们给了我一个任务,我已经完成了它,并且还在工作,但是我不知道我是否做对了。 我将描述任务和完成的任务。

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

要在Linux中隐藏一部分DDR,我只是将Linux内存arg更改为等于实际内存大小-(我需要的大小+为安全起见需要一些小大小)。从this post开始,我很快就了解了驱动程序的想法。 之后,Linux的内存减少了,然后HW有了,并且DDR的顶部从内核中隐藏了,我可以不用担心了。

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

现在,我了解了块设备,并且我开始认为块设备可能更适合我的程序,但是我不确定,因为首先它可以正常工作,而且还没有损坏……其次,我从未写过块设备驱动程序,我也从未写过char设备驱动程序,直到之前描述过为止,所以我不确定是否该在char设备上使用块设备了。

1 个答案:

答案 0 :(得分:1)

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

字符设备只需要简单的读写命令,就不会从内核获得帮助。这适用于从设备(以及与设备类似的任何东西,如果它是顺序读取的实际流或支持“搜索”并且可以一次又一次地读取相同的数据)中进行读取或写入。

一个块设备挂接到内核的内存分页系统中,并能够充当虚拟内存页的后端。它可以承载交换空间,可以作为文件系统的存储设备,等等。它比字符设备复杂得多。仅对于存储大量需要通过将其映射到进程的地址空间来访问的数据的事物(通常,仅当您在其上放置文件系统时才需要),才需要它