3

我正在尝试使用 SMC 调用将函数指针从 EL1(Android 内核)传递到 EL2(管理程序),并在管理程序中捕获 SMC 调用。我知道仅仅传递 Hypervisor 的指针是行不通的,因为它是一个 VA,它对 Hypervisor 没有任何意义。

关于如何做的任何评论?我想基本上从 EL2 而不是从 EL1 调用该函数。

我的猜测是我可能需要使用 ion memory 或者可能需要转换 VA -> IPA/PA

任何帮助或指点表示赞赏,谢谢!

4

1 回答 1

0

通常,您不希望保留以这种方式传递的指针。最好传递一个缓冲区索引并将其复制到监视器部分。如果正常的操作系统恢复,指向的内存可能会改变,这可能会导致各种溢出和条件检查被避免。

因此,如果可能,通常最好按值传递信息。如果必须传递缓冲区,最好在正常和安全世界之间共享的内存中使用一些无锁结构。缓冲区是固定的和索引的。SMC调用是为了让安全世界知道状态变化。它复制缓冲区并更新共享内存中的结构以表示它是空闲的。然后在私有副本中验证缓冲区并采取行动。

通常,对正常的世界地址进行操作并不是一个好主意。这很容易出错,应该避免。这就是为什么微内核使用消息传递来一直复制缓冲区的原因。

于 2013-11-25T18:44:59.517 回答