3

SMC 呼び出しを使用し、ハイパーバイザーで SMC 呼び出しをトラップして、EL1 (Android カーネル) から EL2 (ハイパーバイザー) に関数ポインターを渡そうとしています。ポインターをハイパーバイザーに渡すだけでは機能しないことを理解しています。これは VA であり、ハイパーバイザーにとって何の意味もないためです。

それを行う方法について何かコメントはありますか?EL1からではなく、基本的にEL2から関数を呼び出したいと思います。

私の推測では、イオンメモリを使用する必要があるか、VA -> IPA/PA を変換する必要があるかもしれません。

ヘルプやポインタをいただければ幸いです。

4

1 に答える 1

0

一般に、この方法で渡されたポインターを保持することは望ましくありません。バッファー インデックスを渡し、それをモニター部分にコピーすることをお勧めします。通常の OS が再開すると、ポイント先のメモリが変更される可能性があり、これにより、さまざまなオーバーフローや条件チェックが回避される可能性があります。

このため、可能であれば情報を値で渡す方がよい場合がよくあります。バッファーを渡す必要がある場合は、通常の世界と安全な世界の間で共有されるメモリ内でロックのない構造を使用することをお勧めします。バッファーは固定され、インデックスが付けられます。SMC呼び出しは、セキュア ワールドに状態の変化を認識させるために行われます。バッファをコピーし、共有メモリ内の構造を更新して、空きがあることを示します。次に、バッファーはプライベート コピーで検証され、処理されます。

通常、通常のワールド アドレスで動作することはお勧めできません。これは非常にエラーが発生しやすいため、避ける必要があります。これが、マイクロカーネルが常にバッファをコピーするメッセージパッシングを使用する理由です。

于 2013-11-25T18:44:59.517 に答える