[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] 익셉션(Exception)을 효율적으로 배우는 방법
By Guillermo Austin Kim | 2020년 10월 12일 |
많은 개발자분들이 익셉션이 어렵다고 합니다. 익셉션을 배우기 어려운 이유는 무엇일까요? 다들 ARM 아키텍처의 익셉션이 어렵기 때문이라고 생각합니다. 익셉션이 어렵기 보다는 익셉션을 효율적으로 공부하지 않기 때문이라고 봅니다. 누차 강조하지만 익셉션은 매우 중요한 기능이라 운영체제를 전반적으로 관리하는 시스템 개발자는 반드시 배워야 하는 필수 지식입니다. 하지만 입문자 입장에서 익셉션은 배우기 어렵습니다. 제가 여러 시행 착오를 통해 깨달은 익셉션을 공부하는 문제점에 대해 말씀드리고 익셉션을 효율적으로 배우는 방법을 소개합니다. 익셉션을 배우기 위해 필요한 기반 지식을 같이 배운다 익셉션을 배울 때 익셉션 벡터 테이블을 분석하는 경우가 많습니다. 이 익셉션 벡터 테이블의 내용을 읽으면 잘 이해가 가나
[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에서 확인할 수 있으며, 이 필드 중
[Arm프로세서] GIC의 기본 구조
By Guillermo Austin Kim | 2022년 8월 21일 |
효율적으로 인터럽트를 설정 및 처리하기 위해 GIC를 사용합니다. GIC를 구성하는 하드웨어 블록을 제대로 이해하고 GIC에서 정의한 레지스터의 용도와 사용 방법만 익히면 됩니다. GIC의 가장 중요한 기능은 무엇일까요? 이 질문에는 다음과 같이 답할 수 있습니다. ● 인터럽트의 우선 순위를 각 I/O 장치에 적용해 설정 ● 입력으로 받은 인터럽트를 CPU에 전달 GIC는 인터럽트 콘트롤러이므로 GIC의 주된 기능은 다른 인터럽트 콘트롤러와 다르지 않습니다. 대신 GIC에서 인터럽트를 4가지로 분류해 관리합니다. 이어서 GIC에서 정의된 4가지 인터럽트 소스를 소개하고 인터럽트 상태 머신을 설명합니다.