首先,我必须承认我是个新手。所以别对我太苛刻了。我希望在启动时保留内存,然后在内核模块中使用这个内存,以确保这个模块是唯一使用这个空间的模块。我如下所示:将mem=和memmap=添加到kerenl参数中,以保留内存@启动时间。我的问题从这里开始:
发布于 2015-07-27 21:33:07
(1)通过使用ioremap,您将为内存建立一个内核虚拟地址。内核空间中的任何其他代码都可以通过将正确的值插入指针变量来访问它。AFAIK,没有办法“锁定”任何区域的内存到一个单一的内核模块。内核的所有部分都是功能强大的,因此可以访问它们喜欢的任何内存--或者至少,它们可以执行所有可能需要的操作,以便允许它们访问他们喜欢的任何内存。出于同样的原因,除非您在某种程度上导致了这一点,否则没有理由让另一段内核代码访问内存。毕竟,您已经告诉内核的其余部分,它不是正常的内存。
(2)通过从内核内存映射中排除内存,然后使用ioremap,您实际上是告诉内核它是某种特殊的" I/O“内存(例如,考虑PCI设备的I/O内存区域),因此不会为此考虑分页。
我不知道在没有为内存实现您自己的设备接口的情况下,您可以在(3)中实现您的目标。但是,如果您想要使用它,为什么不简单地创建一个ramdisk文件系统呢?不需要(额外的)内核编程。(请参阅内核源代码树中的Documentation/blockdev/ramdisk.txt。)
发布于 2015-09-01 10:00:58
发布于 2015-09-01 12:24:43
我认为ioremap()在讨论启动时是否需要预留内存是不必要的。
更好的使用(实际上主要是在内核中使用)是以下API
memblock_reserve(phys_addr_t base, phys_addr_t size)查看文件memblock.c以获得更多的理解。
https://stackoverflow.com/questions/31651543
复制相似问题