[Arm프로세서] 트러스트존(TrustZone): 논 시큐어 월드와 시큐어 월드란
By Guillermo Austin Kim | 2021년 12월 27일 |
트러스트 존의 개념을 이해하려면 먼저 논시큐어 월드와 시큐어 월드의 개념을 알아야 합니다. 논 시큐어 월드란 논 시큐어 월드는 무엇일까요? 일반적인 운영체제 커널이나 애플리케이션이 동작하는 실행 환경입니다. [중요]여기서 월드는 실행 환경 혹은 모드와 유사한 개념으로 사용됩니다. 보안 관점으로 논 시큐어 월드는 보안 수준이 낮아 해커의 공격을 당할 수 있는 실행 환경으로 볼 수 있습니다. 예를 들어 여러분이 사용하는 운영체제의 커널이나 애플리케이션은 논 시큐어 월드에서 실행됩니다. 그런데 여기까지 내용을 읽으면 논 시큐어 월드에서 실행되는 것이 구체적으로 무엇인지 감지 오지 않습니다. 이해를 돕기 위해 다음과 같은 예제 코드를 소개합니다. #include <stdio.h>
[Arm프로세서] 하이퍼바이저를 구성하는 요소
By Guillermo Austin Kim | 2022년 1월 12일 |
2개 이상의 멀티 운영체제를 동시다발적으로 실행할 수 있는 플렛폼이나 아키텍처를 하이퍼바이저라고 소개했습니다. 이어서 다음 그림을 보면서 하이퍼바이저 아키텍처를 구성하는 주요 기능에 대해 알아봅시다. 그림 12.1 하이퍼바이저 아키텍처의 전체 구조 위 그림의 가운데 윗 부분을 보면 게스트 OS1, 게스트 OS2라고 표시된 부분은 하이퍼바이저에서 실행되는 운영체제입니다. 게스트 OS1이 안드로이드, 게스트 OS2는 리눅스가 될 수 있습니다. 그런데 게스트 OS1와 게스트 OS2에서 실행되는 운영체제는 각각 독립적인 EL0와 EL1에서 실행됩니다. 게스트 OS1의 커널은 EL1, 게스트 OS1의 애플리케이션은 EL0에서 실행됩니다. 마찬가지로 게스트 OS2의 커널은 EL1, 게스트 OS2의 애플리케이
[Arm프로세서] Armv8: 리눅스 커널에서 익셉션 레벨을 읽어서 제어하는 루틴
By Guillermo Austin Kim | 2021년 12월 6일 |
먼저 리눅스 커널이 부팅하는 과정에서 익셉션 레벨을 읽어서 제어하는 루틴을 소개합니다. 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 익셉션 레벨: PSTATE와 currentEL 레지스터
By Guillermo Austin Kim | 2021년 11월 4일 |
Armv8 아키텍처는 프로세서의 상태를 PSTATE를 통해 제공하는데, 이 정보 중에 익셉션 레벨이 포함돼 있습니다. 먼저 Armv8 아키텍처 문서를 보면서 PSTATE가 무엇인지 알아봅시다. (출처: DDI0487Fc_armv8_arm.pdf)D1.7 Process state, PSTATE In the Armv8-A architecture, Process state or PSTATE is an abstraction of process state information. 스팩 문서의 내용을 해석하면 PSTATE는 프로세서의 다양한 상태 정보를 담고 있는 인터페이스(Abstraction)이라고 볼 수 있습니다. PSTATE에서 프로세서의 상태는 PSTATE.field에서 확인할 수 있으며, 이 필드 중