[임시메모] 커널 소스코드 둘러보기 2 : 익셉션 핸들링
·
카테고리 없음
1. 익셉션 벡터.align 11ENTRY(vectors) /* SP_EL0에 대한 entry, 리눅스는 각 EL마다 SP를 구분하므로 이 4개 entry는 invalid */ ventry el1_sync_invalid // Synchronous EL1t ventry el1_irq_invalid // IRQ EL1t ventry el1_fiq_invalid // FIQ EL1t ventry el1_error_invalid // Error EL1t /* EL1에서 익셉션 발생, SP_ELx를 사용 */ ventry el1_sync // Synchronous EL1h ventry el1_irq // IRQ EL1h ventry el1_fiq_invalid //..
[임시메모] 커널 소스코드 둘러보기 1 : stext (Head.S)
·
Embedded
매일 조금씩 공부하고 메모하기ENTRY(stext) bl preserve_boot_args /* 부트로더로부터 전달된 매개변수 x0, x1, x2, x3를 boot_args 변수에 저장함 */ bl el2_setup // EL1 또는 EL2 설정, W20 = cpu_boot_mode mov x23, xzr // KASLR offset, defaults to 0 adrp x24, __PHYS_OFFSET // #define __PHYS_OFFSET (KERNEL_START - TEXT_OFFSET) bl set_cpu_boot_mode_flag // __boot_cpu_mode flag 설정, EL1인지 EL2인지에 따라 값 바뀜 bl __create_page_tables // x25..
【공부/정리】 시스템 소프트웨어 개발을 위한 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 7. Device control
·
Embedded
작은 것부터 큰 것까지 순서대로 register 제어 → memory 제어 → memory controller 제어 → LCD(peripheral device)를 제어하는 방법에 대해서 배워봅시다. 1. Device control1.1. Device를 control 하는 방법Device를 control 한다는 것은 임베디드 시스템 엔지니어로서 당연히 마음 설레고 즐거운 일입니다. Device는 보통 peripheral device, MCU 외부에 핀을 통해 달려있는 IC를 의미합니다. 통신방법은 어렵지 않습니다. 정해진 규칙에 따라 특정 핀에 신호를 어느 타이밍에 인가하고 일정시간 유지했다 땜으로써 peripheral device와 통신하는데 이러한 timing, bus interface는 datashe..