0

我在 Juno board r1 上使用 Linaro 提供的可信固件映像(LSK 和 Android 文件系统)。就我而言,我只想在 EL3 中进行一些琐碎的测试,例如,读取特定的内存。为了让事情变得更容易,在系统完全启动之前我什么都没做。然后我加载一个发送 SMC 指令的内核模块,SMC 异常将在 BL3-1 中由自定义处理程序处理。在处理程序中,我为 EL3 禁用了 MMU 并尝试直接访问物理地址。但是我发现如果物理地址大于0xffffffff(4G),我得到的内容就会全为0。小于0xffffffff的物理地址就完美了。如果我将该物理地址映射到小于 0xffffffff 的虚拟地址(Linaro 的 EL3 只支持小于 0xffffffff 的虚拟地址),它也可以工作。所以,

有没有人知道详情?非常感谢你帮助我!

4

1 回答 1

0

库存的 Juno 固件设置了 TrustZone 控制器,0x0ff000000以便0x0ffffffff为安全世界保留 16MB 的 DRAM,其余部分仅为非安全。特定的 TZC 配置使得非安全区域仅读取为零并忽略写入,而不是中止安全访问。

因此,并不是说您本身不能访问超过 4GB 的物理地址,只是碰巧在那里的唯一东西是 DRAM,这是安全世界明确拒绝自己访问大多数的东西。

固件源的相关部分可以在这里找到

于 2015-11-17T19:05:33.653 回答