[Arm프로세서] GIC의 기본 구조
By Guillermo Austin Kim | 2022년 8월 21일 |
효율적으로 인터럽트를 설정 및 처리하기 위해 GIC를 사용합니다. GIC를 구성하는 하드웨어 블록을 제대로 이해하고 GIC에서 정의한 레지스터의 용도와 사용 방법만 익히면 됩니다. GIC의 가장 중요한 기능은 무엇일까요? 이 질문에는 다음과 같이 답할 수 있습니다. ● 인터럽트의 우선 순위를 각 I/O 장치에 적용해 설정 ● 입력으로 받은 인터럽트를 CPU에 전달 GIC는 인터럽트 콘트롤러이므로 GIC의 주된 기능은 다른 인터럽트 콘트롤러와 다르지 않습니다. 대신 GIC에서 인터럽트를 4가지로 분류해 관리합니다. 이어서 GIC에서 정의된 4가지 인터럽트 소스를 소개하고 인터럽트 상태 머신을 설명합니다.
[Arm프로세서] XEN 하이퍼바이저: 익셉션 핸들러 코드 소개
By Guillermo Austin Kim | 2022년 2월 15일 |
운영체제나 RTOS 커널의 세부 동작을 파악하려면 익셉션이 유발되면 처리되는 익셉션 벡터 핸들러를 잘 알아야 합니다. 익셉션 벡터 핸들러의 코드를 보면 Armv8 아키텍처에서 정의된 스팩에 따라 익셉션 벡터 핸들러가 구현됐다는 사실을 알 수 있습니다. XEN 하이퍼바이저의 익셉션 벡터 핸들러 코드도 예외는 아닙니다. 게스트 OS와 하이퍼바이저와 통신하는 주요 인터페이스가 XEN 하이퍼바이저의 익셉션 벡터 핸들러이니 잘 익혀둘 필요가 있습니다. 익셉션 핸들러 코드 소개 포스트에서 분석할 XEN 하이퍼바이저의 익셉션 벡터 핸들러 전체 어셈블리 코드를 소개합니다. 1 000000000026a800 <hyp_traps_vector>:2 26a800:17fffc00 b269800 <
[Arm프로세서] AAPCS: Armv7: 함수를 호출할 때 쓰이는 R0 ~ R3 레지스터와 명령어 분석
By Guillermo Austin Kim | 2021년 6월 24일 |
SP 레지스터, LR 레지스터(R14)와 더불어 눈여겨봐야 할 레지스터가 R0 ~ R3 레지스터입니다.함수를 호출할 때 전달되는 인자는 R0 ~ R3 레지스터에 저장되고, 함수가 반환하는 값은 R0 레지스터로 저장되기 때문입니다. R0 ~ R3 레지스터의 역할: 함수에 전달된 인자 저장 다음 예제 코드를 보면서 함수에 인자가 전달될 때의 세부 동작을 알아봅시다. 01 0001047c <main>:0203 int main(void)04 {05 1047c: e92d4800 push {fp, lr}06 10480: e28db004 add fp, sp, #407 10484: e24dd010 sub s
[Arm프로세서][Armv8] 트러스트존(TrustZone): 시큐어 RTOS 구현 사례: QSEE(Qualcomm's Secure Execution Environment)
By Guillermo Austin Kim | 2022년 1월 9일 |
각 SoC 칩 벤더와 보안 업체들은 arm 아키텍처의 트러스트존을 활용해 독자적인 보안 RTOS(Trusted OS)를 개발했습니다. 이번에는 퀄컴에서 설계한 QSEE를 소개하면서 시큐어 RTOS는 어떤 방식으로 구현됐는지 알아보겠습니다. QSEE는 Qualcomm's Secure Execution Environment의 약자로 Arm 아키텍처의 트러스트존을 활용해 퀄컴에서 제작한 Trusted OS 아키텍처입니다. 다음은 QSEE을 구성하는 구성도입니다.(출처: 그림 11.10 QSEE의 구성도 실제 퀄컴에서 배포된 문서에서 확인된 내용인데 이번 장에서 다뤘던 개념을 이해했다면 바로 이해할만한 내용입니다. 그림의 가장 왼쪽 부분은 논 시큐어 상태, 오른쪽 부분은 시큐어 상태를 나타냅니다. 위