首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM MMU已禁用4KB

ARM MMU已禁用4KB
EN

Stack Overflow用户
提问于 2013-09-17 23:18:07
回答 2查看 462关注 0票数 1

我希望在ARMv7架构的引导程序(裸机)期间禁用内存管理单元。读到手臂的时候,我偶然发现了这个。

“当MMU被禁用时,如果满足以下条件之一,则可以获取指令:

·指令与程序的简单顺序执行所需的指令位于相同的4KB内存块(对齐到4KB)中,或者位于紧跟此类块之后的4KB内存块中。

·指令位于相同的4KB内存块(对齐到4KB)中,之前在禁用MMU的情况下,程序的简单顺序执行需要该块中的指令,或者该指令位于紧随此类块之后的4KB块中。

有人愿意解密并向我解释如何确保指令彼此相邻在4KB/8KB以内吗?(这就是我对声明的理解。)

EN

回答 2

Stack Overflow用户

发布于 2013-09-18 00:08:55

我认为这意味着您不能向前跳转超过(8 KiB减去当前页面偏移量),也不能向后跳转到前4个KiB页面。基本上:线性程序流是可以的,向前跳转大约4 KiB也是可以的;向后跳转(和循环)只有在它们被保证不跨页面时才是可以的。

如果你使用C语言,你可能会教你的C编译器使用短跳跃模型;如果你直接使用汇编,这是相当容易做到的。还可以使用链接器脚本或直接转换为二进制输出格式,以确保在加载的内存地址与您认为在开发期间加载的内存地址匹配。

许多汇编程序都支持跳转的偏移量计算。你也可以生成一个所有符号的链接地图,然后分析你的跳跃不是太大。

当然,看看BSD和Linux是如何做到这一点的可能会被证明是有用的。我猜他们只是快速启用MMU,并且在此之前使用很少的手写代码。

票数 1
EN

Stack Overflow用户

发布于 2013-09-18 09:30:54

如果添加上下文的其余部分,则会看到

这些访问可能是由推测性指令提取引起的,而不管预取的指令是否已提交以供执行。

注意:为确保体系结构合规性,软件必须确保同时满足以下两个条件:

当禁用MMU时将执行的指令位于地址空间的4KB块中,该地址空间块仅包含可容忍推测性访问的存储器

紧跟在4KB块之后的地址空间的每个4KB块也仅包含容忍推测性访问的存储器,该4KB块保存当MMU被禁用时将执行的指令。

他们所说的就是分支预测器可能拉取指令的位置,无论是否使用。因此,如果您关闭了MMU,并且您在ram末尾附近执行,而您的内存控制器将不能容忍超过ram末尾的读取(读取)。那么你可能会有问题。要么不要运行关闭的代码,要么更改内存控制器以提高容忍度,要么打开mmu并容忍它的细微差别,无论它们是什么。(在mmu打开的情况下,您可以更容易地将下一个块映射到其他ram,因为您知道您实际上不会在那里执行,而只是作为分支预测器获取的填充)。

你如何为这个投保呢?简单地告诉链接器不要将代码放在那里,如果.text太接近,它将发出警告和/或失败。

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

https://stackoverflow.com/questions/18853677

复制
相关文章

相似问题

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