答案 0 :(得分:0)
(1)通过使用ioremap
,您正在为内存建立内核虚拟地址。内核空间中的任何其他代码都可以通过将正确的值粘贴到指针变量中来访问它。 AFAIK,没有办法将任何内存区域“锁定”到单个内核模块。内核的所有部分都是全能的,因此可以访问他们喜欢的任何内存 - 或者至少,他们可以执行允许他们访问他们喜欢的任何内存所需的所有操作。出于同样的原因,没有理由认为另一块内核代码将访问内存,除非你以某种方式引起它。毕竟,你告诉内核的其余部分它不是正常的内存。
(2)通过从内核内存映射中排除内存,然后使用ioremap
,你实际上告诉内核它是某种特殊的“I / O”内存(想想PCI设备的I /例如,O存储区域,因此不会考虑进行寻呼。
我不知道在没有为内存实现自己的设备接口的情况下,您可以在任何方式实现(3)中的目标。但是,如果您想要使用它,为什么不简单地创建一个ramdisk文件系统?没有(额外的)内核编程需要。 (请参阅内核源代码树中的Documentation/blockdev/ramdisk.txt
。)
答案 1 :(得分:0)
答案 2 :(得分:0)
我认为ioremap()在启动时不必要地讨论内存预留。
最好使用(实际上主要用于内核)遵循API
memblock_reserve(phys_addr_t base, phys_addr_t size)
检查文件memblock.c以获得更多理解。