【공부/정리】 시스템 소프트웨어 개발을 위한 ARM 아키텍처 구조와 원리 ④ 메모리 모델, 캐시, MMU
·
Embedded
https://developer.arm.com/documentation/102376/latest/https://developer.arm.com/documentation/101811/latest책은 ARMv7과 ARMv8 양쪽 모두를 다루고 있습니다.이미 이전 포스트들에서 ARMv7에 대해서 충분히 공부했기 때문에, 이번 포스트에서는 ARMv8에 집중해서 다룹니다.ARMv7 관련 내용 중 일부는 해당 내용을 자세히 다룬 포스트를 주석으로 링크 달고 생략하도록 하겠습니다10. 메모리 모델10.1. 노멀 메모리와 디바이스 메모리ARM 아키텍처에서는 메모리를 두 가지 종류로 분류합니다.Memory mapped I/O를 위해 할당하는 메모리 영역을 '디바이스 메모리', 그외 모든 영역을 '노멀 메모리'라고 합니다..
【공부/정리】 시스템 소프트웨어 개발을 위한 ARM 아키텍처 구조와 원리 ③ GIC, 트러스트존, 하이퍼바이저
·
Embedded
https://developer.arm.com/documentation/198123/latest/책은 ARMv7과 ARMv8 양쪽 모두를 다루고 있습니다.이미 이전 포스트들에서 ARMv7에 대해서 충분히 공부했기 때문에, 이번 포스트에서는 ARMv8에 집중해서 다룹니다.ARMv7 관련 내용 중 일부는 해당 내용을 자세히 다룬 포스트를 주석으로 링크 달고 생략하도록 하겠습니다7. GIC - 인터럽트7.1. 인터럽트 컨트롤러?외부 I/O 디바이스 (이하 페리퍼럴)는 프로세서와 인터럽트를 통해 통신합니다.SoC 업체는 고객들이 다양한 페리퍼럴과 연결해 사용할 수 있도록 인터럽트 컨트롤러를 설계해 탑재합니다.인터럽트 컨트롤러는 수많은 인터럽트를 통합하고 관리하고 분배하는 역할을 합니다.각 인터럽트의 활성/비활성..
【공부/정리】 시스템 소프트웨어 개발을 위한 ARM 아키텍처 구조와 원리 ② 익셉션과 익셉션레벨
·
Embedded
책은 ARMv7과 ARMv8 양쪽 모두를 다루고 있습니다.이미 이전 포스트들에서 ARMv7에 대해서 충분히 공부했기 때문에, 이번 포스트에서는 ARMv8에 집중해서 다룹니다.ARMv7 관련 내용 중 일부는 해당 내용을 자세히 다룬 포스트를 주석으로 링크 달고 생략하도록 하겠습니다.4. ARMv7의 동작모드다른 포스트들(링크1, 링크2)에서 자세히 공부했던 내용이므로 중요한 내용만 집고 넘어갑니다. 4.1. 동작모드들 설명ARMv7은 크게 특권모드와 비특권모드 2가지로 나뉩니다.모드심볼동작모드CPSR[4:0]설명비특권모드USR유저모드0x10일반 유저 애플리케이션이 실행되는 동작모드특권모드FIQFast인터럽트0x11요청받은 인터럽트를 NVIC가 관리하고 처리하는 동작모드IRQ인터럽트0x12SVC슈퍼바이저0x..
【공부/정리】 시스템 소프트웨어 개발을 위한 ARM 아키텍처 구조와 원리 ① 레지스터와 명령어
·
Embedded
책은 ARMv7과 ARMv8 양쪽 모두를 다루고 있습니다.이미 이전 포스트들에서 ARMv7에 대해서 충분히 공부했기 때문에, 이번 포스트에서는 ARMv8에 집중해서 다룹니다.ARMv7 관련 내용 중 일부는 해당 내용을 자세히 다룬 포스트를 주석으로 링크 달고 생략하도록 하겠습니다.1. 소개1.1. ARM 역사에이콘 설립1978년: 영국 케임브릿지, 크리스 커리 & 헤르만 하우저, 에이콘 컴퓨터 회사 설립1984년: 영국 학교 80%에 BBC Micro 컴퓨터 보급1985년: RISC 기반 ARM1 프로세서 탄생, 소형 임베디드 디바이스에서 활용 시작1990년 ARM 설립, 뉴턴 프로젝트(PDA 개발), 저전력 마이크로프로세서 시장에서 성공2005년, 각 제품군에 차별화된 Cortex 라인업 발표2011년..
Aarch64 Memory Management 요약 정리
·
Embedded
https://developer.arm.com/documentation/101811/latest1. 가상주소와 물리주소란? 우리가 사용하는 CPU는 가상주소(Virtual address, 이하 VA)를 이용하는 반면, 실제 메모리에 접근이 이뤄질 때는 물리주소 (Physical address, 이하 PA)를 이용합니다. 위 그림은 소프트웨어가 메모리에 올라왔을 때의 두 가지 모습,좌측은 OS와 개발자 입장에서 본 메모리(VA)의 모습,우측은 실제 메모리(PA)의 모습을 보여주고 있습니다.두 메모리 사이에는 주소 변환을 위한 MMU의 translation table이 있습니다.잘 알고 계시겠지만 정리하자면, VA를 사용해서 얻는 이득을 정리하면 다음과 같습니다.여러 군데로 조각화된(Fragmented) 물..
[정리/요약] ARM Cortex-M 프로그래밍
·
Embedded
인프런 - 홍영기 강사님의 ARM Cortex-M 프로그래밍 강의를 공부한 뒤 일부 햇갈리는 내용을 요약, 정리하기 위한 문서입니다. 참고한 문서는 다음과 같습니다. (링크)RM0008 - Cortex-M3 Reference Manual: Cortex-M3에 대한 전체적인 모든 정보PM0056 - Cortex-M3 Programming Manual: 그 중에서도 프로그래밍을 할 때 특히 필요한 정보가 모여있음. Instruction set을 비롯해 중요 주변장치 (MPU, NVIC, SCB, SysTick)에 대한 내용이 있음DDI0337 (링크) - Cortex-M3 Technical Reference Manual: 위 두 문서 합쳐놓은 느낌의 기능 위주의 잘 정리된 문서기타 문서들DS5319 - ST..
임베디드 레시피 Chapter 8. Debug
·
Embedded
지금까지 다뤘던 모든 내용 (Chapter 1~7)을 기반으로 디버깅을 하는 방법에 대해서 배우는 챕터입니다.디버깅하는 대상 시스템은• High exception vector를 사용합니다. EVT와 bootloader는 `0xFFFF_0000`번지에 있습니다.• 쉬운 시스템 예제를 위해    • ISR을 IRQ mode가 아닌 SYS mode에서 수행합니다.    • 사용자 애플리케이션도 SVC mode에서 수행합니다.• R13_SYS는 `0x00FE_E730`에서 시작합니다. 1. Reset exception1.1. 예제 1Reset exception이 발생했습니다. 당시의 context를 확인해 보니 다음과 같았습니다. 무엇이 원인일지 천천히 살펴봅시다.먼저 PC가 `0xFFFF_0000`, High..
임베디드 레시피 Chapter 6. RTOS & Kernel
·
Embedded
1. Kernel 용어에 대해1.1. OS의 등장OS 등장배경을 간단하게 요약하면 다음과 같습니다.당시 개발자는 프로그램 자체 기능뿐만 아니라 프로그램이 온전하게 메모리에 올라가기 위해 필요한 일련의 복잡하고 까다로운 작업을 컴파일 단계부터 시작해서 스스로 해야만 했습니다.시간이 지나 대부분 프로그램들에 공통점이 있다는 점을 알게됩니다. 모든 SW는 키보드로 입력받고 모니터에 출력하는 등 I/O를 수행한다는 공통점이 있었습니다.메모리에 I/O 기능을 포함한 SW를 자동으로 로드하고 실행해 모니터에 출력하는 환경을 구축한 것이 OS의 시초입니다.즉, 태초의 OS는 DOS형태로 실행만 해주면 자동으로 메모리에 올려 실행하고 I/O를 가능하게 만들어주는 형태였습니다.1.2. Kernel vs OS정확하게 경계..
임베디드 레시피 Chapter 5. SW ② 스택
·
Embedded
Chapter 5의 아래 부분은 요약 및 정리에서 생략하도록 합니다.[※] Context와 AAPCS (Chapter 2에서 이미 설명했습니다.)[※] Pointer와 배열은 ~ Stack과 heap에 대한 소고 (p.365~385) (기초 CS 내용입니다.)[※] 함수가 불렸을 때 일어나는 일(p.395) (기초 CS 내용이고 본문에 설명이 잘 돼있습니다.) 임베디드 시스템에서 stack도 heap도 모두 초기화되지 않은 메모리상 (.bss 영역) 연속된 전역변수 배열이라 생각합시다. 그리고 스택은 높은주소에서 낮은주소로 아래를 향해 자라나는 full descending stack입니다. 예를 들어, stack[2000]이 있다고 하면, stack[1999] -> stack[1998] ... -> st..
임베디드 레시피 Chapter 4. ARM ② Assembly와 Bootloader
·
Embedded
교재(임베디드레시피)는 구체적인 문법을 설명하고 있지 않습니다. 또한, GNU gcc 기반이 아닌, ARM의 ADS를 기반으로 설명하시고 있습니다. 따라서, 어셈블리 문법에 대한 내용만큼은 다른 책을 보며 함께 공부하는 것이 좋을 것 같습니다.제가 참고했던 ARM 어셈블리 문법 기초를 배우는 링크와 파일입니다. (링크1)  (링크2)1. ARM Assembly1.1. ADS와 GNU GCC위 그림은 ARM의 ADS와 GNU 진영의 gcc 두 컴파일러의 어셈블리로, 보시다시피 문법과 구조가 거의 같습니다. Directive가 소문자 또는 대문자로 쓰인다던지, 맨 앞에 `.` 온점이 들어간다던지, 주석으로 `@`를 쓰냐 `;`를 쓰냐 정도의 미세한 차이가 있습니다. GNU ARM 어셈블리의 구조는 다음과 같..