首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统内存,ioremap()?

系统内存,ioremap()?
EN

Stack Overflow用户
提问于 2014-11-11 16:40:48
回答 2查看 4.5K关注 0票数 0

在系统内存中调用ioremap()不好吗?我想在系统DRAM中预留一个空间,它不会被任何其他进程使用。这是做这件事的方法吗?我知道DRAM实际上不是IO内存,所以我不确定这是否被认为是错误的做法。

EN

回答 2

Stack Overflow用户

发布于 2014-11-12 23:59:33

在system上调用ioremap()不好吗?

由内核管理的系统内存也不应该使用ioremap()进行重映射。这些多个映射可能导致某些体系结构/处理器上的数据损坏。有关ARM的问题,请参阅这篇文章

您可以尝试确保单个映射(使用ioremap()),方法是将启动时的内存区域排除在内核的管理之外。

在ARM上,使用ATAGs ( ATAG_MEM标记)或设备树( memory属性)指定减少的物理内存。

否则,在内核命令行中使用memmap=内核参数:

代码语言:javascript
复制
1835         memmap=nn[KMG]$ss[KMG]
1836                         [KNL,ACPI] Mark specific memory as reserved.
1837                         Region of memory to be reserved is from ss to ss+nn.
1838                         Example: Exclude memory from 0x18690000-0x1869ffff
1839                                  memmap=64K$0x18690000
1840                                  or
1841                                  memmap=0x10000$0x18690000

还应该通过request_mem_region()声明内存区域,以防止多个请求以及/proc/iomem.的完整性/准确性。

票数 2
EN

Stack Overflow用户

发布于 2014-12-25 15:12:44

在系统启动期间,可以在内核命令行参数中使用"mem“来保留内存。

LDD3 Ch-15 Pg 443

例如,如果您有256 MB,那么参数mem=255M将防止内核使用顶级MB。您的模块稍后可以使用以下代码来访问此类内存:

dmabuf = ioremap (0xFF 00000 /* 255 m /,0x100000 / 1M */);

但是,这并不是一种有效的方法,因为内核不能使用这个保留内存。在我目前正在工作的SoC上,内存是使用连续内存分配器(CMA)保留的,这允许其他进程在SoC驱动程序不使用该内存时重用内存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26869907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档