일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 코멘토실무PT
- ARM 아키텍쳐: 메모리 모델과 배리어
- Arm 아키텍처: 캐시
- 빌드 시스템
- BSP
- 코멘토
- Arm 아키텍처: 메모리 모델과 배리어
- ARM 아키텍처: 메모리모델과 배리어
- Kernel
- 실무PT후기
- arm
- 시스템 소프트웨어 개발을 위한 ARM 아키텍처의 구조와 원리
- yocto
- udemy
- 인프런
- Today
- Total
목록CPU Architecture/ARM Architecture (12)
반도체 소프트웨어

개요 함수 호출은 ARM 코어 도움을 받아야 가능 BL 이후 복귀할 주소를 하드웨어적으로 x30(LR)에 업데이트 RET 명령어 실행하면 x30 값이 PC로 업데이트 스택 오버플로우, 스택 CORRUPTION이 발생하면 디버깅시에 스택 콜 스택 조차 제대로 확인하지 못할 수 있다 AAPCS 관련 레지스터 sp 스택포인터 사용중인 프로세스의 스택 위치 저장 익셉션 레벨별로 sp 레지스터 존재 X30: 링크 레지스터 x0-x7: 함수 전달 인자 X0: 함수반환 스택 푸시 명령어 STP(store pair of registers): 베이스 레지스터(피연산자)가 가리키는 값을 기준으로 지정된 레지스터를 주소에 저장 두 개 레지스터를 주소에 저장하는 기본적인 기능 수행 -> 베이스 레지스터가 sp이면 스택에 푸시..

AAPCS(ARM Architecture Procedure Call Standard): 함수 호출을 위한 세부 규칙 calling convention, 함수호출규약 이라고도 부름 CPU관점에서 함수는 서브루틴(독립적으로 실행되는 소프트웨어 모음) 함수 호출 동작은 cpu 아키텍처 도움 받아야 가능(c언어에서 지원하는 기능 X) AAPCS 내용 함수 호출시 레지스터를 어떻게 사용하는지 함수 반환시 return 구문을 통해 값을 어떻게 반환하는지 함수 호출시 스택을 어떻게 사용하는지 AAPCS를 잘알아야하는 이유 실전 프로젝트에서 디버깅을 잘하기위한 기반 지식 모든 코드는 프로세스 스택 공간에서 실행 지역변수는스택공간에 저장 프로그램 근본 동작 원리 파악: CPU동작하는 방식을 이해하기 위한 초석 AAPCS..

인터럽트 컨트롤러 개요 인터럽트를 통합해서 CPU에게 전달하는 모듈 외부 I/O 디바이스는 인터럽트를 통해 CPU와 인터페이싱 외부 I/O장치(센서, 키보드, USB)를 CPU가 다양한 방식으로 제어하는데 이 중 인터럽트가 가장 많이 활용됨 soc, mcu 업체는 제품개발업체가 다양한 외부 디바이스가 인터럽트를 통해 mcu, soc와 통신할 수 있도록 인터럽트 컨트롤러를 구성해 칩을 설계!! 너는 그러한 soc, mcu가 들어간 타겟 보드나 그런 보드와 센서를 통해서 어떤 결과물을 만들어보는게 좋겠다. 아두이노 라즈베리파이 이런거 말고 인터럽트 컨트롤러 기본 구조 여러 I/O 디바이스가 올려준 인터럽트를 받아 IRQ, FIQ로 CPU에 전달하는 역할 수행 설정된 인터럽트의 우선순위를 기준으로 적절한 AR..

익셉션: ARM코어가 명령어를 처리하다가 예외 사항이 발생할때 이를 처리하는 방식 (익셉션을 통해서 실행 흐름을 바꾼다고 볼 수도있다, 모드 전환) 익셉션이 발생하면 익셉션 종류별로 지정된 익셉션 벡터로 프로그램 카운터가 분기 익셉션 벡터 주소가 0x80바이트 단위로 정렬되므로 ARMv7과는 다르게, 익셉션 벡터 주소에서 익셉션을 처리할 수 있는 여러 명령어를 실행 익셉션 종류를 계층구조로 변환 Synchronous 와 asynchronous로 큰 카테고리를 분류하고, 하위 카테고리로 익셉션 유발 인자를 익셉션 클래스로 정의 익셉션 분류 체계 synchronous 타입: 공통적으로 어셈블리 명령어 실행과정에서 발생 asynchronous 타입: 외부 인터럽트, 외부 메모리 데이터 어보트가 원인 ESR_E..

익셉션이란 익셉션은 프로세서가 외부에서 발생한 인터럽트나 정의되어있지 않은 명령어를 실행하려는 시도와 같은 이벤트를 처리하기 위해 프로세스의 실행을 멈추는 것 cpu코어에서 기계어를 정상적으로 실행하지 못하는 상황에서 이를 처리하기 위한 방식 익셉션이 발생하면 익셉션의 종류별로 지정된 주소로 pc 바뀜 cpu 아키텍처마다 익셉션 처리 세부 동작 방식이 다름 ARM프로세서는 익셉션이 발생하면 익셉션을 처리하는 특정 모드로 진입 익셉션을 유발한 다양한 정보를 레지스터에 업데이트 익셉션 종류별로 이미 정해 놓은 주소로 분기 익셉션 벡터: 각 익셉션의 내용을 담은 주소 ARM 아키텍처 관점에서 익셉션 종류 메모리 어보트 타입 익셉션: 소프트웨어 입장에서 치명적인 오류가 있는 상태 ex) 널포인터 엑세스 IRQ ..

익셉션 레벨 개요 ARMv8의 기능(익셉션, 하이퍼바이저, 트러스트존)이 Exception Level기반으로 동작하기에 이해는 반드시 필요 Eln: 익셉션 레벨 n: PL을 의미 익셉션 레벨과 특권 레벨과 거의 같은 개념 ex) EL1은 PL1 권한이 있는 익셉션 레벨 OS, RTOS를 구현할때 모든 익셉션 레벨을 구현해야할 필요는 없다. EL0, EL1은 필수 구현 사항이고 EL2, EL3는 옵션이다. EL2, EL3를 구현한다는 의미 각 익셉션 레벨별로 익셉션 핸들러를 구현 각 익셉션 레벨별로 사용되는 스택을 설정 익셉션 핸들러의 베이스 주소를 VBAR_ELx 레지스터를 통해 설정 관련 시스템 레지스터 및 MMU 설정 익셉션 레벨 종류 EL0: 유저모드 EL1: 커널모드 EL2 게스트 OS끼리 스위칭..
익셉션, 트러스트존을 비롯한 ARMv7 아키텍처의 많은 기능은 동작 모드 기반 위에서 설계되어 있기에 동작모드 이해는 중요 PL(priviliege level): 특권레벨 소프트웨어 실행시에 리소스(하드웨어, 메모리 등)에 접근하는 권한을 구분 PL0 유저모드에서 애플리케이션 소프트웨어가 실행되는 모드 unprivileged 소프트웨어 실행 몇가지 아키텍처 기능 설정 불가하기에 시스템콜로 대체해서 사용함 메모리 접근 제약 존재 PL0에서 SVC 명령어를 실행해 익셉션(트랩)이 유발돼야 PL1으로 진입 가능 PL1 루트 권한과 비슷한 개념 유저 모드와 HYP모드를 제외한 모든 모드가 PL1에서 실행 보통 OS 시스템(커널)이 PL1에서 실행 SVC, IRQ, FIQ, ABT, UND, SYS 모드 등이 실..

개요 함수 시작과 끝에 주로 실행하는 어셈블리어 루틴 stp: 레지스터 -> 스택 푸시 명령어 ldp: 레지스터 -> 스택 팝 명령어 ARM프로세서와 대화할 수 있는 언어 ex) ARM 프로세서에게 연산 시키기 어셈블리 명령어 실행한 결과는 레지스터에 저장 어셈블리 명령어 기본 형태 ex) "MOV , #imm" == " = #imm" 어셈블리 명령어 종류 어셈블리어는 유닛 단위, 루틴 단위로 공부하는 게 좋음 어셈블리어를 기계적으로 외우기보다는 해당 명령어가 ARM 프로세서 내부적으로 어떻게 동작하는지 원리를 파악하는 것이 중요 어셈블리 명령어의 실전 프로젝트 활용 사례 부트로더 개발 부트로더: 시스템 전원 인가 후 최초로 실행되는 소프트웨어 스타트업 코드: 부트로더에서 가장 먼저 실행되는 코드 스택 ..

레지스터 세트: 태스크의 실행 흐름(데이터 저장) 컨텍스트: 범용 레지스터 컨텍스트 스위칭: ARM 코어에서 현재 실행 중인 레지스터 세트를 태스크 자료 구조에 저장하고, 다음에 실행할 태스크의 레지스터 세트를 ARM 코어의 레지스터에 로딩(cpu 아키텍처에 의존적인 작업) ARMv7 범용 레지스터 보통 어셈블리 연산 결과가 R0~R12에 저장됨 보통 어셈블리 연산 결과가 R0~R12에 저장됨 SP(R13): 프로세스 스택 주소 저장 LR(R14): 함수 호출 완료 후에 복귀할 주소를 저장(BL 시에 저장) PC(R15): 현재 패치하는 명령어 주소를 저장(현재 실행중인 명령어의 주소 저장) CPSR: 프로세스 상태 저장(익셉션 모드 저장) SPSR: CPSR의 복사본 레지스터 이전 동작 모드의 프로세서..
브링업을 잘하기 위해서 시스템 소프트웨어 개발자 프로젝트 프로세스: 보드 브링업 -> 기능 안정화 -> 유지 보수 부트로더에서 스타트업 코드 실행 메모리, 캐시와 같은 시스템 자원 초기화 키보드, usb 같은 주변 장치 초기화 시스템에 전원이 들어왔을때 가장 먼저 실행되는 주소에 있는 코드: 스타트업 코드(부트로더가 가장 먼저 실행하는 코드) 시스템을 초기화 및 설정하는 루틴으로 구성됨 MMU 같은 하드웨어 유닛과 캐시 설정 동작모드 혹은 익셉션 레벨별로 스택 크기 지정 익셉션 핸들러 구성 스택이 초기화되어있어야하기에 어셈블리어로 스타트업 코드를 작성 디바이스 드라이버 개발을 잘하기 위해서 ARM이 인터럽트 처리를 어떻게 하는지 잘 이해하면 디바이스 드라이버가 통신하는 방법인 인터럽트의 우선순위나 종류를..