arm64 LinuxでLinuxがEL2(EL3のブートローダ)で実行されているときにカーネルのビルド中にこれを設定する必要がありますか?

arm64 LinuxでLinuxがEL2(EL3のブートローダ)で実行されているときにカーネルのビルド中にこれを設定する必要がありますか?

存在するhttps://stackoverflow.com/questions/39614772/how-to-know-the-linux-kernel-run-either-el2-non-secure-or-el3-secure-mode、最近arm64 Linuxでは、カーネルがEL1の代わりにEL2で実行されているのを見ました。最近、私はu-boot-spl falconモードを使用してテストボードでLinuxポートを実行しています。また、CPUハードウェアがEL3から起動すると、LinuxはEL2で実行されているように見えます(arm64で始まる、参照)。https://elixir.bootlin.com/u-boot/latest/source/arch/arm/lib/spl.c#L55そしてhttps://elixir.bootlin.com/u-boot/latest/source/arch/arm/cpu/armv8/transition.S#L13)。私の質問は、LinuxがEL2で実行されるように構成で何かを設定する必要がありますか、それともLinuxビルドがEL1またはEL2で実行されているかどうかに関係ありませんか?

ベストアンサー1

u-bootをブートローダとして使用する場合(UEFIとgrubまたはArmリファレンスデザインを使用してこれを実行した場合でも同じことがわかります)、ブートローダはEL3で実行され、最終コードelr(返されるアドレス)に設定されますになります。例外処理)をLinuxのエントリアドレスにコピーします。その後、eretを実行してelrに格納されているLinuxアドレスにジャンプすると、ELは自動的にEL2に下がります。 Linuxでは、コードは仮想化ハードウェア拡張(FEAT_VHE)が実装されていることを確認し、実装されている場合はEL2に保持されます。 VHEが実装されたとき、EL1レジスタへの多くのアクセスが実際にEL2のレジスタにアクセスしていました(この部分については100%確信できませんが、同様のことを覚えています)。したがって、Linuxを構築するためには何も設定する必要はありません。 (しかしCONFIG_ARM64_VHEをオフにするとEL1で動作する可能性があります。)

おすすめ記事