본문 바로가기

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리/5장: Armv7 - 동작 모드

(6)
[Armv7-A] 익셉션 유발 시: SPSRs 레지스터 업데이트 방식 (동작모드, Arm) User 모드에서 Data abort를 유발하는 동작 코드 리뷰  1. Data abort 익셉션이 유발되면 0xFFFF0010 주소로 프로그램 카운터가 분기합니다.NSR:FFFF0000|EA0003FF   b       0xFFFF1004    ; vector_rst NSR:FFFF0004|EA000465   b       0xFFFF11A0    ; vector_und NSR:FFFF0008|E59FFFF0   ldr     pc,0xFFFF1000 NSR:FFFF000C|EA000443   b       0xFFFF1120    ; vector_pabt >> NSR:FFFF0010|EA000422   b       0xFFFF10A0    ; vector_dabt 이 때 CPSR과 SPSR_abt ..
[Arm프로세서] Armv7: 어떤 동작 모드를 선택해야 할까? 이어서 Arm 아키텍처에서 정의된 동작 모드가 운영체제나 RTOS에서는 어떻게 활용되는지 알아봅시다. 유저 모드는 유저 애플리케이션이 실행되는 모드이고, 슈퍼바이저 모드는 운영제체의 커널이나 커널 드라이버가 실행되는 모드입니다. 그런데 동작 모드에 대한 내용을 처음 접하면 다음과 같은 다양한 의문이 생깁니다. 동작 모드는 왜 존재하며, 각각 어떻게 활용될까? 진행 중인 프로젝트에서 혹시 운영체제를 사용하지 않는 경우에는 유저 모드만 사용하면 될까? 이 질문에 대해 "프로젝트의 스펙에 맞게 동작 모드를 선택하면 된다"라고 말씀드리고 싶습니다. 동작 모드를 선택하는 예시 한 가지 예를 들까요? 디스플레이 디바이스에 'Hello, world'만을 출력하는 동작만 수행하는 제품을 만든다고 가정해 봅시다. 키보드..
[Arm프로세서] Armv7 동작 모드: PL와 Arm 동작 모드 소개 Arm 동작 모드를 이해하려면 Privilege level(PL)의 개념을 먼저 알면 좋습니다. Arm 동작 모드는 PL의 기반 위에서 정의했기 때문입니다. PL과 Arm 동작 모드에 대한 Arm 스팩 문서 분석 먼저 Arm 스팩 문서에서 PL0를 어떻게 정의했는지 알아봅시다. (출처: DEN0013D_cortex_a_series_PG.pdf) PL0 The privilege level of application software, that executes in User mode. Software executed in User mode is described as unprivileged software. This software cannot access some features of the architec..
[Arm프로세서] Armv7 아키텍처의 Arm 동작 모드 소개 Arm 아키텍처의 가장 중요한 개념은 Arm 동작 모드입니다. 익셉션, 트러스트존을 비롯한 Arm 아키텍처의 많은 기능은 Arm 동작 모드 기반 위에서 설계 됐습니다. 그래서 Arm 동작 모드를 이해하는 것이 중요합니다. 하지만 Arm의 동작 모드를 배울 때 기계적으로 스팩의 내용을 억지로 이해하고 암기하는 분들이 많습니다. 대신 다음과 같은 질문을 던지고 답을 찾는 과정을 거치면 어떻까요? 더 많은 것을 배울 수 있고, 공부한 내용이 머릿 속에 더 오랫 동안 남을 것입니다. ❑ Arm 동작 모드는 어떻게 바뀔까? ❑ Arm 동작 모드가 바뀌면 이전 Arm의 동작 모드는 어떻게 확인할까? ❑ 이전 Arm 동작 모드로는 어떻게 복귀할까? ❑ Arm 동작 모드를 활용해 운영체제 커널은 어떻게 구현돼 있을까?..
[ARM][ARMv7] 리눅스 커널: ARM 모드를 설정하는 어셈블리 코드 분석 ARM 프로세서의 주요 용법을 배우기 위해 리눅스 커널만큼 좋은 리퍼런스 자료가 없는 것 같다. ARM 사의 개발자들이 리눅스 커널에 자신의 코드를 메인라인 시키기 때문이다. 이번에는 리눅스 커널에서 32비트 ARMv7 아키텍처에서 ARM의 모드를 읽어 제어하는 루틴을 살펴보자. 먼저 다음 코드를 보자. arch/arm/include/uapi/asm/ptrace.h #define USR_MODE 0x00000010 #define SVC_MODE 0x00000013 #define FIQ_MODE 0x00000011 #define IRQ_MODE 0x00000012 #define MON_MODE 0x00000016 #define ABT_MODE 0x00000017 #define HYP_MODE 0x00000..
[ARM프로세서] ARM 모드에 대한 소개 ARM을 공부하면 가장 먼저 만나는 용어가 있습니다. 바로 ARM 동작 모드입니다. ARM 모드는 ARM의 세부 동작을 배우려면 반드시 알아야 하므로 잘 익혀 둘 필요가 있습니다. 특히 64비트 기반의 ARMv8 아키텍처는 기존 ARM의 모드에 대응되는 익셉션 레벨이란 개념을 도입했습니다. 익셉션 레벨이란 개념이 기존 ARMv7 아키텍처의 ARM 모드에서 발전됐으니 먼저 ARM의 동작 모드부터 살펴봅시다. ARM 모드의 종류 이 ARM 동작 모드를 잘 익혀야 시스템을 디자인하고 디버깅할 때 배운 내용을 유용하게 활용할 수 있습니다. 실행 모드를 잘 살펴 보면 유저(User) 모드는 표준 사용자 모드라고 부르는데 나머지 6가지 모드는 Privileged mode라고 분류됩니다. ARM User Manual..