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(반환될 주소)에 설정됩니다. 예외 처리 )을 리눅스의 엔트리 주소로 복사합니다. 그런 다음 eret을 실행하여 elr에 저장된 Linux 주소로 점프하면 EL이 자동으로 EL2로 낮아집니다. Linux에서 코드는 FEAT_VHE(Virtualization Hardware Extensions)가 구현되었는지 확인하고 구현된 경우 EL2에 유지됩니다. VHE가 구현되었을 때 EL1 레지스터에 대한 많은 액세스가 실제로 EL2의 레지스터에 액세스하고 있었습니다(이 부분에 대해 100% 확신할 수는 없지만 비슷한 내용을 기억합니다). 따라서 Linux를 구축하기 위해 우리는 아무것도 설정할 필요가 없습니다. (하지만 CONFIG_ARM64_VHE를 끄면 EL1에서 작동할 수도 있을 것 같습니다.)

관련 정보