본문 바로가기

Hello CE,Mobile

NK.bin + Boot.bin = Multiple bin 구조

NK.bin + Boot.bin = Multiple bin 구조

Windows CE 의 전체적인 다운로드 구조는 아래 소스기반으로 동작 합니다.
$(_PLATFORMROOT)\COMMON\SRC\COMMON\BOOT\BLCOMMON\blcommon.c

blcommon.c 의 DownloadImage() 가 호출 되며 다운로드를 시작합니다.
아래 hex 파일은 nk.bin + boot.bin 파일이 합쳐진 파일입니다. 
이제 부터 구조를 살펴보도록 하겠습니다.

● BL_IMAGE_TYPE_MANIFEST
    1. GetImageType() 의 함수를 통하여 이 파일이 어떤파일인가를 판단 하는데 시작 헤더 
       부분에 "N000FF" 에 표시로 되어 있기 때문에 BL_IMAGE_TYPE_MANIFEST 를 
       리턴하게 됩니다.
typedef enum _BL_IMAGE_TYPE
{
    BL_IMAGE_TYPE_MANIFEST = 0,        // "N000FF\x0A"
    BL_IMAGE_TYPE_BIN,                      // "B000FF\x0A"
    BL_IMAGE_TYPE_NB0,                     //
    BL_IMAGE_TYPE_SIGNED_BIN,          // "S000FF\x0A"
    BL_IMAGE_TYPE_SIGNED_NB0,         // "R000FF\x0A"
    BL_IMAGE_TYPE_MULTIXIP,             // "X000FF\x0A"
    BL_IMAGE_TYPE_UNKNOWN,
    BL_IMAGE_TYPE_NOT_FOUND,
} BL_IMAGE_TYPE;
2. 체크섬을 통하여 데이터가 정확한지 확인 합니다.
3. 현재 bin 파일이 nk.bin 과 boot.bin 파일 2개를 합친 파일이기 때문에 bin 파일 개수 2를 나타냅니다.
4. 각 bin 파일의 정보를 가지고 옵니다.
  dwRegionStart = config.bib 의 RAMIMAGE 의 어드레스 부분 입니다.
  dwRegionLength = nk.nb0 의 데이터 사이즈입니다.(파일의 사이즈가 아님)
  szFileName = 파일 이름입니다.(확장자 포함 255자 이름을 쓸 수 있네요)




● BL_IMAGE_TYPE_BIN(NK.BIN)
1. BL_IMAGE_TYPE_MANIFEST를 체크 한후 GetImageType() 의 함수를 다시 호출하여 이 파일이 어떤파일인가를 판단 하는데 시작 헤더 부분에 "B000FF" 로 표시로 되어 있기 때문에 BL_IMAGE_TYPE_BIN 을 리턴하게 됩니다.
2. ImageStart : Config.bib 의 RAMIMAGE 에 해당됩니다.
3. ImageLength : nk.nb0 의 데이터 사이즈 입니다.

4. 데이터를 RAM 에 저장 합니다.

    . 데이터는 아래 구조로 되어 있습니다.

 Address

Length

 CheckSum

 Data

    ▷ 위 패킷 구조를 살펴보도록 하죠.(위 이미지의 ImageLength 끝 부분부터 보시면 됩니다.)

       Address : 00 00 02 80 -> 0x80020000        

       Length : 04 00 00 00 -> 0x00000004

       CheckSum : E2 01 00 00 -> 0x000001E2

       Data : CB 2D 00 EA

      . RAM  0x80020000 번지에 4바이트 를 복사한다.

      CheckSum 은 Data 를 모두 더해 봅시다. 4바이트 데이터 CB+2D+00+EA = 0x1E2 

      로 CheckSum 과 같게 나오므로 정확한 데이터로 판단.

    ▷ 한번만 더 보도록 하죠 두번째 패킷

       Address : 04 00 02 80 -> 0x80020004        

       Length : 08 00 00 00 -> 0x00000008

       CheckSum : D6 03 00 00 -> 0x000003D6

       Data : 45 43 45 43 D4 8B E5 82

     . RAM  0x80020004 번지에 8바이트 를 복사한다.
      CheckSum : 45+43+45+43+D4+8B+E5+82 = 0x3D6 으로 체크섬과 일치 하네요

    ▷ 이런식으로 DATA 를 RAM 으로 복사하게 되네요.

     ▷ 이렇게 쭉 RAM 으로 복사된 데이터를 Nand, SDCard 에 저장하면 끝


● 정리

 NK.Bin 의 경우 NK.nb0 를 압축한 형태 이기 때문에 위와 같이 압축 해제 하는 방법으로 데이터를 램에 저장 하지만 nk.nb0 파일을 위 어드레스 0x80020000 에 데이터 사이즈 만큼 램에 복사 하여도 같은 결과 값을 얻을 수 있습니다. 다만 파일사이즈가 커지고 여러 파일이 합쳐져 하나의 이미지를 만든 다면 다른 구조를 가지고 가야 겠지요.


● Multiple bin중 Boot.bin입니다

    ▷ 위에서 많이 했으니 데이터 부분만 한번 보도록 하죠

       Address : 00 00 00 00 -> 0x00000000        

       Length : 36 C4 0B 00 -> 0x000BC436 (753 Kbyte)

       CheckSum : F8 28 F2 02 -> 0x02F228F8

       Data : FE 03 00 EA 00 00 ............

      . RAM  0x00000000 번지에 753 Kbyte 바이트 를 복사합니다.

      CheckSum 은 Data 를 모두 더해서 0x02F228F8  


    ▷ Address(0x00000000) 의 변경부분

위와 같이 0x80020000 에 저장 하고 싶다면 OEMMapMemAddr 를 통하여 

어드레스를 변경하여 return 해주면 끝 


● 글로 설명 하기참 어려워요 부족한 부분이나 궁금하신 부분은 댓글로 남겨주세요 ^^


'Hello CE,Mobile' 카테고리의 다른 글

Get 호출자 프로세스  (0) 2016.10.06
HIVE BOOT SECTION  (0) 2014.03.24
Registry settings for Windows CE development  (0) 2014.02.21
Resume Thread 동작  (0) 2014.02.18
어셈 DCD  (0) 2014.01.24