0

トラストゾーンエミュレーションでqemuを実行しています。64 ビット Linux は Normal world (NWD) EL1 で実行され、一部の独自コードは EL3 および Secure World (SWD) EL1 で実行されます。また、割り込みの構成は次のとおりです。1) FIQ は SWD に割り当てられます。2) IRQ は NWD に割り当てられます。

また、nwd が FIQ によって中断される可能性のある 3 つのケースがあります。

FIQ が発生すると、EL3 によってトラップされます。次に、NWD コンテキストが EL3 のコードによって保存され、FIQ のハンドラーが実行を開始します。el3 から NWD に戻った後、1)、2) ケースはすべて正常に動作します - 中断されたプロセスは引き続き動作します。しかし、ケース 3) で el3 から NWD に戻った後、中断されたプロセスに対してセグメンテーション フォールトが発生しました。また、これは el3 から NWD EL0 に戻る前の spsr_el3 レジスタの値 - 0x600f0010 - 正常に見えます。また、ケース3のEL3で保存および復元されたコンテキストをすでに比較しており、それも問題ないようです。これはqemuのバグのようです。何が問題なのか知っている人はいますか?

4

1 に答える 1

0

実際、私はすでにそれを修正しました。問題は、'eret' 命令の実装におけるファイル 'op_helper.c' にありました: 'env->regs [15]=env->elr_el [1] & ~0x1;'. 「1」は「cur_el」に変更する必要があります。また、このバグは最新のqemuで修正されているため、更新する必要があります。

于 2016-09-27T15:27:35.600 に答える