[ARM프로세서] 익셉션(Exception)이 발생할 때 기본 동작
By Guillermo Austin Kim | 2020년 10월 15일 |
익셉션은 ARM 프로세서의 핵심 기능 중 하나입니다. 이번 절에서는 ARM 아키텍처에서 적용된 익셉션의 개념을 소개하고, ARM 프로세서에서 익셉션이 어떤 방식으로 동작하는지 설명합니다. 이후 소프트웨어 관점으로 익셉션이 무엇인지 살펴보겠습니다. 익셉션은 ARM 프로세서의 핵심 기능 중 하나입니다. 이번 절에서는 CPU 아키텍처에서 적용된 익셉션의 개념을 소개하고, ARM 프로세서에서 익셉션이 어떤 방식으로 동작하는지 설명합니다. 익셉션(Exception)이란 무엇일까요? 익셉션을 한 문장으로 정의 내리기는 어렵지만 다른 용어와 함께 설명하기는 어렵진 않습니다. 그럼 같이 다음 문장을 읽어볼까요? ❑ 익셉션이 발생하면 ARM의 동작 모드가 변경됩니다. ❑ 익셉션이 발생
[라즈베리파이] 인터럽트 백터 어셈블리 코드 및 동작 분석
By Guillermo Austin Kim | 2018년 2월 13일 |
인터럽트가 발생하면 __irq_svc 벡터로 점프합니다. 물론 해당 프로세스는 하던 일을 멈출 수 밖에 없는데요.그럼 인터럽트 벡터에서 어떤 동작을 하는 지 어셈블리 코드를 분석하겠습니다. #__irq_svc 코드 리뷰[1]: 스택 공간을 0x4C 바이트만큼 확보합니다. [2]--[3]: 현재 실행 중인 레지스터 R0부터 R14, PC까지 스택에 푸쉬합니다. [4]: 0x80705398 메모리 공간에 있는 메모리 덤프 0x80c089ac를 로딩합니다. 0x80c089ac는 handle_arch_irq란 함수 포인터 역할을 하는 변수인데 이 변수에는 gic_handle_irq가 지정되어 있습니다.crash> p -x handle_arch_irqhandle_arch_irq = $3 = 0xc01
[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] ARM 프로세서를 공부하는 방법의 문제점
By Guillermo Austin Kim | 2020년 9월 14일 |
분야를 막론하고 새로운 IT 기술을 배울 때 공부하는 방법은 중요합니다. 가끔은 "무식하게, 시행착오를 많이 겪는 게 최고의 공부 방법이라"라고 말하는 분도 있지만, ARM 프로세서를 학습할 때는 적용할 만한 조언은 아닌 것 같습니다. 왜냐면 저의 수년간의 실전 프로젝트를 통해 다음과 같은 사실을 절감했기 때문입니다. ● ARM 프로세서는 정말로 공부하는 방법이 중요하다! ARM 프로세서를 공부하는 방법이 중요한 이유는 무엇일까요? 잘못된 방법으로 ARM 프로세서를 공부하면 배운 내용이 오랫동안 머릿 속에 남지 않기 때문입니다. 빨리 지루해집니다. 무엇보다 배운 내용을 실전 프로젝트에 활용하지 못합니다. 그래서 ARM 프로세서를 공부하다가 포기하거나 ARM 프로세서가 정말 어려운 주제라