【发布时间】:2012-11-15 04:42:23
【问题描述】:
我正在编写一段代码,该代码需要在 SOC 关闭之前存储位于特定物理地址的 10k 内存。
我的问题是这个物理地址不是内核空间的一部分,所以我必须创建一个临时内存映射,这样我才能访问这个内存空间。
我尝试使用 io-remap,但它(显然)不适用于非内核空间。
是否有任何 API 可以做到这一点? 我应该使用 kmap 吗?
提前致谢
【问题讨论】:
-
您能否确定在引导期间(在 U-Boot 函数中)要保留哪些内存区域,在(有效)内存列表中排除这些区域,然后编写一个驱动程序来实际映射并使用该“特殊的“记忆”? stackoverflow.com/questions/11580285/…
-
我可以在启动过程中从 ATAG 中排除内存,但是如何映射这些区域? ioremap 以前似乎不起作用。也许是因为该区域是不同内存空间的一部分?
-
"io-remap ... 不 ... 在非内核空间上工作" - “内核”和“用户”内存空间参考 虚拟内存。
ioremap()必须提供一个物理地址范围。请注意,在没有虚拟或物理限定词的情况下使用“内存”一词可能会产生歧义或混淆。也许您需要重新审视和分析为什么ioremap()似乎没有“工作”。这是另一个涉及为内核驱动程序使用物理内存的问答:stackoverflow.com/questions/12516603/… -
@JonathanLeffler - 您的编辑,尤其是“此物理地址在用户空间中”,毫无意义,并且可能错误地陈述了问题。
-
@sawdust:好的;然后修复它,请。没关系,我会把它回滚,让别人试一试。
标签: linux memory-management linux-kernel memory-mapping mmu