본문 바로가기

전체 글

(484)
[공지] 출간: 『시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리』 안녕하세요, 『시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리』 저자 김동현입니다. 시스템 소프트웨어 개발자와 취준생님, 대학원 분들께 많은 시스템 개발자 분들이 『시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리』 책이 출간되기를 기다리셨는데요. 드디어 출간됐습니다. YES24 링크는 아래와 같습니다. 책 링크: 시스템 소프트웨어 개발에 도움이 되는 유익한 콘텐츠를 꾸준히 블로그에 업로드할 예정입니다. 감사합니다. 김동현 드림. * 유튜브 소개 영상
'디버깅을 통해 배우는 리눅스 커널의 구조와 원리' 책의 Q/A 페이지 '디버깅을 통해 배우는 리눅스 커널의 구조와 원리' 책에 대해 궁금한 점이 있으면 이 포스트에 댓글로 질문을 남겨주시기 바랍니다. 질문을 남겨주시면 최대한 빠른 시일 내에 댓글로 답신 드리겠습니다. '디버깅을 통해 배우는 리눅스 커널의 구조와 원리' 저자 김동현 올림
[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프로세서] Armv8: 시스템 레지스터에 접근할 수 있는 명령어 이전 포스트에서 Armv8 아키텍처에서 정의된 레지스터에 대해 알아봤습니다. 레지스터마다 각자 주어진 기능이 있지만 결국 Arm 코어가 사용하는 변수라는 점은 같습니다. 레지스터의 용법을 파악하면 다음과 같은 의문이 생길 수 있습니다. "레지스터의 값을 어떻게 읽거나 쓸 수 있을까?" 레지스터의 값을 읽거나 쓰려면 명령어를 실행해야 합니다. 그런데 레지스터의 종류에 따라 사용할 수 있는 명령어가 다음과 같이 제한돼 있습니다. * 범용 레지스터: 모든 명령어 * 시스템 레지스터: MSR, MRS 명령어 Armv8에서 정의된 범용 레지스터는 Armv8에서 정의된 모든 명령어에서 볼 수 있습니다. 데이터를 산술 연산하거나 메모리에 위치한 데이터를 읽을 때 사용됩니다. 시스템 레지스터의 값을 읽거나 쓰는 명령어..
[Arm프로세서] Armv8: 시스템 레지스터 Armv8 아키텍처는 범용 레지스터 뿐만 아니라 시스템의 세부 속성을 설정할 수 있는 시스템 레지스터를 정의합니다. 이 중에 자주 사용되는 시스템 레지스터는 잘 익혀둘 필요가 있는데요. 이어서 Arm 스팩 문서를 보면서 시스템 레지스터에 대해 알아봅시다. 4.3 System registers In AArch64, system configuration is controlled through system registers, and accessed using MSR and MRS instructions. This contrasts with ARMv7-A, where such registers were typically accessed through coprocessor 15 (CP15) operations. ..
[Arm프로세서] Armv8: SPSR_ELx - SPSR(Saved Program Status Register) 레지스터란 SPSR 레지스터는 Saved Program Status Register의 약자로 PSTATE 정보를 백업하는 용도로 사용됩니다. 따라서 SPSR 레지스터의 비트 맵은 PSTATE와 같습니다. 그렇다면 PSTATE는 SPSR 레지스터로 언제 백업될까요? "바로 익셉션이 유발될 때입니다." SPSR은 익셉션이 발생했을 때의 PSTATE의 정보를 저장하는 용도로 사용되며, 익셉션을 처리한 후 익셉션이 발생한 시점의 익셉션 레벨로 복귀하기 위해 사용됩니다. 즉, 익셉션과 관련된 처리를 하기 위해 사용됩니다. Arm 아키텍처 문서나 어셈블리 명령어를 분석하면 SPSR 보다는 SPSR_EL1 혹은 SPSR_EL0과 같은 규칙으로 SPSR 레지스터를 명시합니다. SPSR은 익셉션 레벨을 스위칭하기 전의 정보를 저장..