요약 : WinCE 어플리케이션에서 실행 중 특정 동작에서 aborting에러가 날 경우 해당 address를 가지고 map파일 내의 function을 찾아가서 정확한 에러 위치를 검출해 내는 방법



릴리즈 모드로 컴파일 하였거나 디버깅이 불가능 한 상황에서 Data Abort로 프로그램이 죽었을 경우 그 위치를 찾아 낼 수 있다. 
간단한 세팅이 필요하다. 
Project Setting -> Link 에서 Category : Debug 으로 설정
Generate mapfile 체크한다.
Project Option : /MAPINFO:EXPORTS /MAPINFO:LINES 추가하고 /incremental:no Setting
Project Setting -> C/C++ 에서 Debug Info : Line Number Only 로 설정
Data Abort 발생

Data Abort: Thread=87333b28 Proc=843bcf70 'DATA_ABORT.EXE'
AKY=00040001 PC=00011014 RA=00011034 BVA=26000000 FSR=00000007
Crash Address ? Preferred Load Address ? 0x1000
Crash Address (PC) : 0x00011014
Preferred Load Address : 0x00010000
Preferred Load Address map file을 오픈하여 찾을 것!!!
공식으로 계산을 하면
0x00011014 - 0x00010000 - 0x1000 = 0x14 이 나오게 되고
0x14 값을 가지고
map 을 살펴 보면 

Line numbers for .ARMV4IDbgDataAbort.obj(C:Documents and SettingsAdministrator바탕 화면DataAbortDataAbort.cpp) segment .text

7 0001:00000000 8 0001:00000004 9 0001:0000000c 10 0001:00000018
16 0001:00000020 18 0001:00000028 19 0001:0000002c 20 0001:00000038
9 0001:0000000c 10 0001:00000018 이 부분 사이에 값이 들어가게 된다.

그러므로 9, 10 라인에서 Crash가 발생된 걸 알 수 있다.



요약 : WinCE 개발 절차 중 첫번째 단계인 부트로더 포팅 부분을 분석한다. 
(두번째 단계는 OAL포팅)
ARM 기반 WinCE 포팅된 시스템을 startup.s 부터 시작해서 low level -> kernel 까지 분석
ARM9TDMI, WINCE5.0core, DDR ram, NAND flash, UDMA HDD, 800x480 4.3 LCD, ,,,

NOR 장착 시스템
 해당 위치에서 직접 실행이 가능
  - 부트로더가 nk.nb0를 불러 ROM에서 실행 가능
  - eboot.nb0 + nk.nb0 형태
NAND 장착 시스텝
  해당 위치에서 직접 실행이 불가능
  * 부트로더가 올려졌을 때 file이 쪼개져서 올라갈 수 있음.
  - loader.bin (여러 이름) + eboot.nb0 + nk.nb0 형태나
  - loader.bin + nk.bin 형태

...........................................................................

XIP 지원 시스템
 부트로더 = EBOOT

NAND Flash Booting 지원 시스템
부트로더 = ILP + SPL

ILP(Initial Program Loader)
- 2KB 내외의 작은 프로그램
- NAND Flash의 특정영역에 저장되어 있는 EBOOT Code를 DRAM에 Load시켜 RUN하는 역할
SPL(Secondary Program Loader)
- EBOOT와 동일

XIP(eXcute In Place)
- ROM에서 실행
- RAM으로 NK.bin을 복사하지 않음
- RAM 용량 절약이 가능

.............................................................................

nk.nb0 - ROM 실행파일 형태

bin 파일
  - 헤더를 비롯한 여러가지 섹션을 갖고 있는 이미지
nb0 파일
  - plain binary (memory dump를 해서 얻어지는 nb0)

참고로
NK.bin은
Sync bytes(7bytes) + Image address(4bytes) + Image length(4bytes) + Record Address(4bytes) + Record length(4bytes) + Record checksum(4bytes)

nb0 는
첫 4kb 는 ResetHandler에 해당하는 Instruction code
그리고, 설정한 크기대로 생성 되면서 이외의 뒷부분은 0으로 채운다.

..............................................................................
startup.s파일에서 주요 수정 부분 / 기존 작성된 BSP 수정시~
1. sdram에 관한 클럭 및 뱅크에 해당하는 용량 부분
2. 부트로더에 대한 변경 사항 내용 (boot.bib와 같이 수정)

...............................................................................

RTC 초기화 문제 부분 수정 point
- platform/common/src/arm/samsung/s3c2440a/rtc의 rtc.c에서 OALIoCtlHalInitRTC함수에서
rc = OEMSetRealTime(pTime);

+ Recent posts