如何在 ARM64 Linux 中创建 1:1 MMU 映射?

问题描述

我正在尝试关闭 MMU 以运行一些测试代码。我需要创建精确的 1:1 虚拟到物理内存映射,以便在 MMU 关闭后运行代码

In this question 一个人描述了一种使用汇编代码创建此类映射的方法,但似乎在他创建映射时,系统已无法正常工作。

我的问题是:

  • 是否可以创建 1:1 MMU 映射,让 linux 功能正常(测试映射并使用 devmem 文件加载测试代码)?
  • 如果可能,创建它的最佳选择是什么?

解决方法

我需要精确地创建 1:1 的虚拟到物理内存映射 MMU关闭后运行的代码

这根本就没有意义。内存映射仅在 MMU ON 时使用。

一旦 MMU 关闭,就没有虚拟到物理的转换,内存由物理地址访问。好吧,可以将其描述为“虚拟到物理的 1:1”。

关闭 MMU 的问题是执行该操作的代码应该专门构建以使用 1:1 映射运行。

例如代码被构建以调用具有虚拟地址border-bottom-width: 1px的函数。操作系统将您的程序放置在物理地址 0x8000。所以基本上跳到0x00C0_0000就是跳到物理0x8000
一旦 MMU 关闭,跳转到 0x00C0_8000 将进入物理 0x8000

此外,请确保在关闭 MMU 之前刷新缓存。