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

标签 c linux driver

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

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

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

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

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

最佳答案

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

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

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

关于c - 我应该使用 block 设备而不是字符设备来读取和写入内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51142637/

相关文章:

c - 如何确定原始数据包中http header 的起始字节?

linux - 无法使用 Linux 服务启动 Archiva 2.1.0

c++ - MSBuild配置错误WDK 8.1 Visual Studio 2015构建内核模式驱动

c - 这个反汇编输出如何与函数源相关联?

c++ - 哪种语言和库更适合高性能网络设备轮询服务器 (SNMP)?

python - 在 Linux 上运行的 Python 脚本如何调用在 Wine 下运行的 Python 脚本中的例程?

linux - 为 "cd ../"设置绑定(bind) key

linux - linux 的等待队列中可以排队多少项?

c++ - 如何使用 ZwQueryInformationProcess 获取内核驱动程序中的 ProcessImageFileName?

c - 扩展 makefile 以使用 doxygen 生成库和文档