ARMV8
Posts
45 posts[Arm프로세서] 트러스트존(TrustZone): 논 시큐어 월드와 시큐어 월드란
트러스트 존의 개념을 이해하려면 먼저 논시큐어 월드와 시큐어 월드의 개념을 알아야 합니다. 논 시큐어 월드란 논 시큐어 월드는 무엇일까요? 일반적인 운영체제 커널이나 애플리케이션이 동작하는 실행 환경입니다. [중요]여기서 월드는 실행 환경 혹은 모드와 유사한 개념으로 사용됩니다. 보안 관점으로 논 시큐어 월드는 보안 수준이 낮아 해커의 공격을 당할 수 있는 실행 환경으로 볼 수 있습니다. 예를 들어 여러분이 사용하는 운영체제의 커널이나 애플리케이션은 논 시큐어 월드에서 실행됩니다. 그런데 여기까지 내용을 읽으면 논 시큐어 월드에서 실행되는 것이 구체적으로 무엇인지 감지 오지 않습니다. 이해를 돕기 위해 다음과 같은 예제 코드를 소개합니다. #include
[Arm프로세서] Armv8: XEN 하이퍼바이저에서 익셉션 레벨을 체크
EL1에서 실행되는 리눅스 커널과 마찬가지로, EL2에서 구동되는 XEN 하이퍼바이저도 익셉션 레벨을 읽어서 제어하는 코드를 볼 수 있습니다. 이번에는 EL2에서 구동되는 XEN 하이퍼바이저에서 익셉션 레벨을 체크하는 루틴을 소개합니다. 이번에는 EL2에서 실행되는 XEN 하이퍼바이저의 check_cpu_mode 레이블의 구현부를 분석하겠습니다. check_cpu_mode:02 PRINT("- Current EL ")03 mrs x5, CurrentEL04 print_reg x505 PRINT(" -\r\n")0607 /* Are we in EL2 */08 cmp x5, #PSR_MODE_EL2t09 ccmp
[Arm프로세서] Armv8: 리눅스 커널에서 익셉션 레벨을 읽어서 제어하는 루틴
먼저 리눅스 커널이 부팅하는 과정에서 익셉션 레벨을 읽어서 제어하는 루틴을 소개합니다. Armv8 기반 리눅스 커널이 부팅을 할 때 el2_setup 레이블이 호출되는데, 이 레이블에서는 현재 익셉션 레벨을 읽어서 관련된 처리를 수행합니다. 다음은 el2_setup 레이블의 구현부입니다. SYM_FUNC_START(el2_setup)02 msr SPsel, #1 // We want to use SP_EL{1,2}03 mrs x0, CurrentEL04 cmp x0, #CurrentEL_EL205 b.eq 1f06 mov_q x0, (SCTLR_EL1_RES1 | ENDIAN_SET_EL1)07 msr sctlr_el1, x008 mov w0, #BOOT_CPU_MODE_EL1 // This cpu
[Arm프로세서] Armv8 익셉션 레벨: 하이퍼바이저 콜
운영체제의 커널이 구동되는 EL1에서 hvc 명령어를 실행하면 하이퍼바이저 콜이 발생해, EL1에서 EL2로 익셉션 레벨이 변경됩니다. 하이퍼바이저와 같은 가상화 환경에서 게스트 OS가 하이퍼바이저에게 어떤 서비스를 요청할 때 hvc 명령어를 실행합니다. 그림 4.8 가상화 환경에서 hvc 명령어를 실행할 때의 흐름 그림의 가운데 부분에서 ②로 표시된 부분을 봅시다. EL1에서 hvc 명령어를 실행해 EL2로 진입하는 동작을 나타냅니다. 이 동작은 Guest OS1과 Guest OS2에서 동시다발적으로 실행됩니다. [정보] EL1에서 hvc 명령어를 실행하면 EL2로 스위칭되면서 “EL2에서 실행되는 하이퍼바이저 내에 위치한” EL1 Synchronous 익셉션 벡터 주소로 프로그램

