Cortex-M3

2013.10.16 _ ARM _ Boot Code 분석 ( 어셈블리 )

성엽이 2013. 10. 17. 09:49

Boot Code                                                                      


 Boot Loader Code




 

▷ PC ( 다음 진행 명령어 ) 안에 다음 Label ( reset_handler ) 를 저장





▷ LDMIA A, B , A 에 있는 레지스터 갯수 만큼 읽어 B 에 순차적으로 저장

▷ ESP 를 TOP_OF_MEMORY 로 옮겨서 STACK 영역을 확보






▷ r2 레지스터 안에 있는 레지스터들






▷ r0 ( lowlevel_init 함수)



▷ Makefile



▷ sram 의 영역을 설정해준다. 스펙에 MemoryMap 확인을해보면











r0 = 1   >   r2 = _lp_remap (Label)   >   r0 = &r2





Remap Command 전에는 Internal Memory Area 0 에 Flash 실행가능명령이 포함되어있다.



Remap Command : MC_RCR 레지스터를 Set 시키면 Internal Memory Map Area 0 에서 SRAM 영역으로 접근이 가능해진다.




<AT91SAM7S256.h 참조>





▷ STACK 에 Abort interrupt/Interrupt 영역 확보



▷ msr instruction 을 통해서만 ~PSR Register 에 접근이 가능하고, 영역을 지정해줄수 있다. 주석참조









실행파일은 ARM의 경우에 CODE/DATA/BSS/STACK 이 존재 

▷ 위의 소스를 그림으로 나타내면, DATA 와 BSS 영역의 변수들을 SRAM 에 있는 STACK 영역에 모두 복사해준다.


▷ Source 로 보면 elf32-littlearm.lds 에 보면 영역별로 SECTIONS 이 나뉘어져있음








▷ main.c 로 점~프



※ Litteral pools( Label 주소 )






 ▷ 파일


cstartup.S


elf32-littlearm.lds


lowlevel.c


Makefile

AT91SAM7S256.h


(2)_ARM 리버스 엔지니어링(신정훈)_참고자료.pdf