임베디드 레시피

Egloos | Log-in





Map file 분석

음음 . 우리 Linker Output으로 Map file이라는 걸 보았었죠. Map file이라는 건 어떤 걸 담고 있는 걸까요. 뭘 망설이세요. Map file을 열어보면 되지요. 으흐흐 Map file을 열어보면 이거 보통 내기가 아닌 걸 알 수 있을 거에요. - 어떻게 여냐고요. 그냥 notepad로 여세요. 그런데, 엄청 한참 걸릴 거에요. 그 대신 ~ 추천하는 바는 혹시 Ultra Edit라는 Editor를 사용하신다면 이걸 이용하세요. 뭔 원리가 있는지 모르겠지만 금방 열어 제껴 준답니다 -
끝없는 뭔가의 나열 스크롤의 압박. 도대체 내가 필요한 정보를 찾을 수 있기나 한 건지 잘 모르겠다는 비명소리. 이해 합니다. 이해해. 풉.
실은 엄청난 정보가 들어 있다고 해도 4가지 Format으로 그 정보들을 나열하고 있는 것에 불과한 거에요.

전체 그림을 보면
1. Image Symbol Table
2. Memory Map of the image
3. Image component sizes
4. 전체 Layout
으로 이루어져 있고요. 하나 하나 살펴 보면
Image Symbol Table
   ⓐ Linker가 만들어낸 Symbol과 주소 그리고 Region
   ⓑ User가 만들어낸 Symbol과 주소 Size 그리고 속해 있는 object Memory Map of the image
   ⓒ Scatter Loading에 맞춘 Region에 따라 구획을 나누어서
    ⓓ 주소와 Size, type, 그리고 section과 Object. 요놈이 Linker Output Section이 될 거에요.
Image component sizes
   ⓔ 각 object 또는 library에 대한 RO, RW, ZI가 차지하는 Size. 요놈이 Linker Input Section이 되겠죠. 전체 Layout
   ⓕ 전체적인 Memory에 RO, RW, ZI가 얼마나 차지 하는지에 대한 정보인 거죠. 하나 하나 matching해 볼까요?
 


================================================================================

Image Symbol Table

ⓐ  Mapping Symbols

    Sym    Value        Execution Region

    $a     0x00000000   BOOT
    $f     0x000117f4   BOOT
    $t     0x000117f8   MAIN_APP_IMAGE
    $d     0x003e3868   MAIN_APP_IMAGE
 
    Global Symbols

    Symbol Name          Value     Ov Type        Size  Object(Section)

ⓑ  __main                0x00000000   ARM Code       0  bootvector.o

(Int_Vect)
    _main                 0x00000000   ARM Code       0  bootvector.o

(Int_Vect)
    Image$$BB_RAM$$Length 0x0000000c   Number         0  anon$$obj.o ABSOLUTE
    boot_info_symbol      0x00000020   Data           0  bootvectors.o

(Int_Vect)
    boot_number           0x00000024   Data           0  bootvectors.o

(Int_Vect)
  
=============================================================================

Memory Map of the image

  Image Entry point : 0x00000000

ⓒ Load Region BB_ROM
   (Base: 0x00000000, Size: 0x010c3ab8, Max: 0xffffffff, ABSOLUTE)

ⓒ   Execution Region BOOT
     (Base: 0x00000000, Size: 0x000117f8, Max: 0x0003c000, ABSOLUTE)

    Base Addr    Size         Type   Attr  Idx  E Section Name  Object

ⓓ  0x00000000   0x00000060   Code   RO  7040   * IntVect       bootvectors.o
    0x00001320   0x00000054   Code   RO  6646     .text         io.o
    0x0000c760   0x00000060   Data   RO  6648     .constdata    io.o
    0x00011650   0x00000040   Data   RW  6647     .data         io.o
      
    Execution Region MAIN_APP 
    (Base: 0x000117f8, Size: 0x003d5f8c, Max: 0x00400000, ABSOLUTE)

    Base Addr    Size         Type   Attr  Idx  E Section Name  Object

    0x000117f8   0x000003fc   Code   RO   960     .text         adc.o
      

===============================================================================

Image component sizes


ⓔ   Code    RO Data    RW Data    ZI Data      Debug   Library/Object Name

     14760        564          0          0     144252   controls.lib
     24672      22208       3096          4       2364   ec.lib
      3376         88          0          0      38420   bci.lib
     28140    4033708      45508     230264     805024   graphic_lib.a
     30196       8152       1312        268     278720   security.lib
      1932         92          0          0      83256   db.lib
      4020          9         84     185680   ezTips.a
       364        180          0         16          0   CMC_MN.o
       236          0          0          0          0   KernelDispatcher.o
       758          0          0       2072          0   HALinterrupt.o


    ------------------------------------------------------------------------


==========================================================================

ⓕ    Code    RO Data    RW Data    ZI Data      Debug  

   6373664   12805833     569538   15028594  171448836   Grand Totals

==========================================================================
    Total RO  Size(Code + RO Data)             19179497 (18729.98kB)
    Total RW  Size(RW Data + ZI Data)          15598132 (15232.55kB)
    Total ROM Size(Code + RO Data + RW Data)   19749035 (19286.17kB)

===========================================================================

오호, 간단하지요? 이걸 보면 Memory 우리가 만든 것들이 어떻게 자리 잡는지 훤히 있겠어요. 물론 ctrl-F 찾아보지 않으면 너무 힘들겠지만요. 여하튼 구조를 모르고서는 너무나 file에는 무슨 내용이 담겨 있는지 알기 힘드니까, 한번 짚고 넘어가는데요. 보통 같은 경우에는 ctrl-F Image Symbol Table 찾아서 거기에서 Symbol 찾아서 어디에 위치하는지 찾을 때가 많고요, 마지막의 전체 Layout에서 Memory양이 맞게 되어 있는지를 찾아볼 때가 많죠.

by 히언 | 2009/06/22 19:53 | 소프트웨어대꾸빠쥬 | 트랙백 | 핑백(1)

Linked at 임베디드 시스템 개발자 되기 .. at 2009/06/22 19:59

... ⓝ Scatter Loading - Linker Description Script ⓞ MAP file 분석 ⓟ Makefile은 뭘하는 녀석일까~ ⓠ 컴파일을 더더더 ... more

◀ 이전 페이지          다음 페이지 ▶