방학 하는 동안 노느라 너무 오랜만이라 잘 생각나지않는데

이번에는 부팅 과정을 다룬다.

 

부팅

하드웨어 초기화 과정 정도로 이해하고 있었는데

리셋 익셉션 핸들러 처리 후 C언어로 넘어가기 직전의 상태 혹은 펌웨어가 대기하는 상태 정도라고한다.

 

 

QEMU 메모리

디폴트로 128MB 할당

실행파일은 메모리를  text, data, bss 영역으로 나누어 사용

 

메모리 배치

- 고속 저용량 메모리 : text, data(일부 빠른처리 필요한거)

- 저속 대용량 메모리 : data, bss

<-> qemu에선 그냥 구분없이 배치, 실무에선 매우 중요

 

text 영역

- 코드에 관한 부분, 작아도 되지만 1MB 할당.

- 익셉션 벡터 테이블도 text 영역에 포함시킴 -> 0x0000 0000에서 시작

- 크기가 1MB 이므로 0x000F FFFF

2^10 = 1kb

2^20 = 1MB = 2^4 * 2^4 * 2^4 * 2^4 *2^4

 

data 영역과 bss영역 배치 시 고려 사항

- 아래의 사항을 고려하여 순서와 크기를 고려해야함.

- 데이터 형태 : 동작 모드별 스택, 태스크 스택, 전역 변수, 동적 메모리 영역

- 데이터 속성 : 성능 중요한지, 큰 공간이 필요한지, 공유인지

<-> QEMU에선 크게 중요하지 않으니 순서대로 각 동작모드별로 1MB씩 할당

 

동작 모드 

- USR, SYS : 0x0010 0000 ~ 0x002F FFFF(2MB)

- SVC : 0x0030 0000 ~ 0x003F FFFF

- IRQ : 0x0040 0000 ~ 0x004F FFFF

- FIQ : 0x0050 0000 ~ 0x005F FFFF

- ABT : 0x0060 0000 ~ 0x006F FFFF

- UND : 0x0070 0000 ~ 0x007F FFFF

 

ARM 동작모드

- USR : normal program execution mode

- SYS : run privileged operating system tasks

- IRQ (interrupt request) : when a low priority(normal) interrupt is raised

- FIQ : when a high priority(fast) interrupt is raised

- ABT(abort) : Used to handle memory access violations

- UND(undefined instruction) : Used to handled undefined instruction

http://recipes.egloos.com/4985227

 

ARM 동작 Modes - 나는 어느 mode를 써야 하나

 

recipes.egloos.com

 

 

메모리 맵

- 테스크 공간 : 태스크 별 1MB 할당, 최대 64개 -> 64MB

- 전역변수 공간 : 1MB

- 나머지 : 동적 할당

 

 

계속 진행하려고 해도

링커스크립트 부분을 잘 몰라 진행하기가 어렵다

다른거 부터 잠깐하고 돌아와야겠다.

+ Recent posts