Trouble Shooting

TRACE32
Admin (토론 | 기여) 사용자의 2015년 4월 14일 (화) 14:11 판

(비교) ← 이전 판 | 최신판 (비교) | 다음 판 → (비교)
이동: 둘러보기, 검색

목차

1.  Trouble shooting

1.1.   Source code 가 보이지 않을때(소스 경로 변경)

ELF 파일을 로드 후 아래와 같이 소스코드가 보이지 않고 빗금으로 표기된 경우가 자주 확인 할 수 있었을 것입니다. 이런 경우는 Build한 Host machine에서 Debugging하지 않고 다른 Host에서 Network으로 연결하여 Debugging하거나 Build한 Host machine이라 하더라도 폴더를 옮긴 경우 발생할 수 있습니다.

 

1)    우선 아래 그림과 같이 빗금에 커서를 두고 우클릭한 후 View Info.를 클릭합니다.

 

 

2)    Build 당시 Source Path 정보를 확인할 수 있습니다.

 

 

1.1.1.     소스 경로를 변경하는 방법

sYmbol.SourcePath.Translate [A] [B] 

소스 경로 일부 [A]를 [B]로 바꿉니다

Ex) sYmbol.SourcePATH.Translate "/data/user/wanghwan/u-boot"                                                             "\\210.221.215.153\wanghwan\u-boot"

위의 명령을 이용한 경우 아래와 같이 소스 path가 변경되어 소스코드를 찾아올 수 있게 됩니다.

 

 

 

 

1.1.2.     ELF File 로딩 시 경로 변경하는 방법

Data.LOAD.Elf [ImgFile] /strippart [string|value] /path [dir]

                   /STRIPPART “심볼 파일경로의 제거 할 경로파트 | 경로파트 개수”

                   /PATH “실제 파일경로의 추가 할 경로파트”

Ex) Data.LOAD.Elf C:\T32\AdvancedEdu\u-boot\u-boot /nocode /STRIPPART

                    “/data/user/wanghwan/” /PATH “\\210.221.215.153\wanghwan/”

or

   Data.LOAD.Elf C:\T32\AdvancedEdu\u-boot\u-boot /nocode /STRIPPART 4.

/PATH “\\210.221.215.153\wanghwan/”

    or 만약 \\210.221.215.153\wanghwan/ 가 Network Drive “Z:\”로 연결되었다면

   Data.LOAD.Elf C:\T32\AdvancedEdu\u-boot\u-boot /nocode /STRIPPART 4. /PATH “Z:\”

1.1.3.     sYmbol Path를 추가(add)하는 방법

아래 명령으로 Source Path를 추가하게 되면 ELF에서 명기된 Path에서 Source파일을 찾지 못할 경우 추가된 Path로부터 소스코드를 찾아 보여주게 됩니다.

 

sYmbol.SourcePATH + [dir]

하위 디렉토리를 포함하지 않은 특정 폴더만 소스 경로로 추가합니다. 단, 소스파일 이름이 같을 경우 먼저 지정된 파일을 사용합니다

sYmbol.SourcePATH.SetRecurseDir [dir]

지정한 폴더와 하위폴더들을 자동으로 소스 경로로 지정합니다. 단, 소스파일 이름이 같을 경우 먼저 지정된 파일을 사용합니다

Ex) sYmbol.SourcePATH.SetRecurseDir C:\T32\AdvancedEdu\u-boot

 

 

1.2.   TRACE32 attach 가 안 될때

1)    기존에 잘 사용하던 보드의 JTAG 연결이 갑자기 안 될 경우

  • TRACE32와 타깃보드가 제대로 연결되어 있는지 확인해 봅니다
  • TRACE32, 보드, 컨버터 등을 바꾸어 봅니다
  • JTAG clock을 낮추어 봅니다
  • “sys.u”대신 “sys.m.attach à break”를 시도해 봅니다
  • PowerView내의 열려있는 창(Data.List 등)을 닫고 연결을 시도해 봅니다
  • 사용하던 cmm에 변경된 것이 있는지 확인해봅니다
  •  

2)    처음 테스트 해 보는 타깃일 경우 추가 확인사항

  • PowerView 를 업데이트 해 봅니다
  • 테스트 환경에 맞는 cmm을 사용해 봅니다
  • GND를 포함하여 JTAG 시그널이 제대로 연결되어있는지 확인해 봅니다
  • 별도의 JTAG연장케이블을 사용한다면, 길이를 줄여봅니다
  •  

3)    Diag 테스트를 통해 JTAG Chain값을 읽어 보기

  • “diag 0x16001” 또는 “diag 3400” 명령을 통해 JTAG chain 값을 읽어 볼 수 있습니다
  • JTAG chain값을 잘 읽을 수 있다면, “TRACE32 ~ 프로세서“간의 경로는 문제 없다고 판단해도 됩니다

Ex) “diag 0x16001”이 잘 안 되는 경우

이 경우는 TRACE32와 SoC간 JTAG interface가 문제가 있는 경우이므로 Hardware 담당자에게 문의하여야 합니다.

 

 

Ex) “diag 16001”이 잘되는 경우

  이 경우 TRACE32와 SoC간 JTAG interface에 문제가 없는 경우입니다. 따라서 SYStem.Option 설정이나CoreSight 관련 설정 그리고 Secure JTAG과 같은 원인에 의해 연결이 안되는 경우일 수 있습니다.

 

 

Ex) “diag 3400”이 잘 되는 경우

이 경우도 TRACE32와 SoC간 JTAG interface에 문제가 없는 경우입니다. 따라서 SYStem.Option 설정이나CoreSight 관련 설정 그리고 Secure JTAG과 같은 원인에 의해 연결이 안되는 경우일 수 있습니다.

 

 

4)    JTAG 연결 시도 시 에러메시지를 보고 문제를 예상해 볼 수 있습니다

  • “target power fail”

: Target이 꺼져있거나 JTAG 케이블이 연결되지 않은 경우, TRACE32로 공급되는 reference voltage가 공급되지 않는 경우 발생합니다

  • “target processor in reset”

: Target 프로세서가 리셋 상태일 때 발생합니다

  • “emulation debug port fail“

: JTAG 접근에 문제가 있거나, JTAG clock이 너무 높은 경우 주로 발생합니다

  • “emulation debug port time-out”

: JTAG 경로보다는, 메모리접근에 문제가 있는 경우 주로 발생합니다

  • 리셋 타이밍에 관련된 경우, 대부분 “SYStem.Mode.Attach à break”로 피해갈 수
    있습니다

 

1.3.   Breakpoint 설정 시 Break되지 않는 현상 대처법

BreakPoint설정이 되었고 설정한 함수가 실행되는 것이 확실함에도 불구하고 Target이 정지하지 않는 경우가 있습니다. 이 경우 여러 원인이 있을 수 있으나 다음 항목을 체크하기 바랍니다.

  • 소스코드 매칭을 위한 ELF 파일이 Target에서 동작하는 binary와 같은 버전인지
  • 실행 중 Address Relocation을 실행하는 지
  • Dynamic loading에 의해 설정해 놓은 SW BreakPoint를 지운 것은 아닌지
  • Target Code에서 Debug Logic의 BreakPoint Register의 값을 바꾸는지
  •  

1.4.   step 실행시 갑자기 다른 code 가 수행될때 원인 및 대처법

Assembly 또는 C source level Debugging시 Step 기능을 실행할 경우 갑자기 다른 코드로 Step되는경우가 있습니다. 이 경우는 대부분은 Exception에 의한 코드 실행 때문에 발생하는 경우입니다. Debugging시 보통 Target은 정지상태를 빈번하게 만드는데 SoC Peripheral 설계시 대부분은 Core의 상태와 별개로 설계(Asynchronous)되기 때문에 발생되는 경우입니다.

이 경우 CPU 메뉴 >> System Setting… 항목을 클릭하고 IMASKASM/IMASKHLL가 체크되어 있는 지 확인하기 바랍니다. 해당 옶션는 Assembly/C code level Step시 Interrupt를 Masking하는 옵션입니다.

 

1.5.   특정 함수의 symbol 이 보이지 않는 원인 및 대처법

ELF 파일을 로드했음에도 불구하고 아래 그림과 같이 Source코드가 보이지 않고 Label만 존재하는 경우가 종종 있습니다. 이 경우에는 Build시 Compile옵션에 관한 문제입니다. GCC의 경우 –g 옵션을 확인하고 만약 다른 Compiler를 사용한 경우라면 Debug Option을 찾아 설정 후 재 build하고 다운로드 하기 바랍니다.       

 

 

 

1.6.   Debugger의 Memory Access 속성 설정

1.6.1.     열려있는 윈도우 데이터 Update 주기 변경하기(SETUP.UpdateRATE)

TRACE32는 기본적으로 열어 놓은 윈도우의 내용을 10번 Update합니다. 만약 Update 주기 변경이 필요한 경우 해당 명령을 사용하면 되겠습니다.

주로 PXP/Veloce/ZEBU와 같은 Emulator 개발환경이나 NCsim과 RTL Simulation 개발환경과 같은 느린 Target에서 Debugging시 빈번한 Update는 많은 시간을 요구하기 때문에 TRACE32 UI응답에 영향을 미칠 수 있습니다. 이런 경우 Update 주기를 변경하면 좀더 빠른 UI 응답을 얻을 수 있습니다.

 

SETUP.UpdateRATE [시간|초당회수]

Ex) SETUP.UpdateRATE 20.         ; 초당 20번 Update

   SETUP.UpdateRATE 50ms      ; 50ms 마다 한번씩 Update

 

 

 

 

1.6.2.     CPU core 상태 체크 주기 변경하기(SYStem.POLLING.SLOW)

Emulator/Simulation과 같은 느린 Target에서의 개발환경에서는 CPU 상태를 Polling하는 주기가 빈번한 경우 TRACE32 UI 응답이 느린 경우가 발생 할수 있습니다. 이런 경우 Polling rate를 조절하여 응답을 개선할 수 있습니다.

 

SYStem.POLLING.[DEFault|FAST|SLOW]

Ex) SYStem.POLLING.SLOW       ; Target Processor 상태 Polling주기를 늘림

 

1.6.3.     특정 메모리 공간 TRACE32 접근 속성 변경하기(MAP.DenyAccess)

 

MAP.DenyAccess [Address Range]

Ex) MAP.DenyAccess 0x1000000++0xFFF  ; 지정된 영역의 TRACE32 Access를 무시하도록 설정

 

특정 메모리 dump창을 연 경우 TRACE32는 지정된 Address로부터 데이터를 읽어 보여주기를 시도합니다. 이때 해당 영역에 물리적으로 문제가 있다면 BUS-lock 상태를 초래하게 될 것이고 이와 같이 실수로 인해 디버깅하는데 불편함을 겪을 수 있습니다. 해당 영역의 메모리 Dump 창을 열더라도 TRACE32로 하여금 지정된 영역에 대하여 접근을 금지하도록 할 수 있게 합니다.

 

1.6.4.     특정 메모리 공간 TRACE32 접근 속성 변경하기(MAP.UpdateOnce)

TRACE32는 열린 메모리창의 값들을 [SETUP.UpdateRATE]에 의해 설정된 횟수만큼 주기적으로 Update 합니다. Emulator 또는 RTL simulator target과 같은 느린 시스템에서는 반복적인 Update가 속도 대비 많을 일들을 하게되면 TRACE32 UI 응답 특성이 매우 느려질수 있습니다. 이 때 반복적인 Update가 필요 없는 메모리와 같은 특정 구간에 대해 STEP이나 BREAK 이벤트 발생 시에만 Update하도록 하여 Target으로부터 데이터 접근양을 줄이도록 합니다.

 

MAP.UpdateOnce [Address Range]

Ex) MAP.UpdateOnce 0x10000000++0xFFFF         ; 한번만 Update할 구간 설정

 

1.6.5.     특정 메모리 공간 TRACE32 접근 속성 변경하기(MAP.NoUpdateOnce)

MAP.UpdateOnce 구간 중 특정 영역을 해당 속성을 해제하고자 할 때 사용하는 명령입니다.

 

MAP.NoUpdateOnce [Address Range]

Ex) MAP.UpdateOnce 0x10000000++0xFFFF         ; UpdateOnce구간 설정

MAP.NoUpdateOnce 0x10001000++0xFF       ; UpdateOnce구간 해제

 

1.6.6.     특정 메모리 공간의 데이터 영역에 Big Endian속성 주기(MAP.BE)

Code영역은 Little Endian을 사용하지만 데이터 영역에 대해 Big Endian 속성을 주어 Big Endian으로 보이도

록 하는 명령입니다. CortexM series에서 주로 사용합니다.

 

MAP.BE [Address Range]

Ex) MAP.BE 0x00000000++0xFFFFFFFF    ; 해당 영역중 데이터 영역에 대해 Big.Endian으로 관리하도록

1)    명령 전

 

 

2)    MAP.BE 0x00000000++0xFFFFFFFF 명령 후

 

 

 

1.6.7.     특정 메모리 공간 TRACE32 접근 속성관련 설정된 정보들 보기(MAP.List)

위의 MAP 명령들에 대한 설정이 있는 경우 해당 설정들에 대한 정보를 보여 줍니다.

 

MAP.List

 

아래 그림은 MAP.List 때 보여주는 명령 후 결과 예입니다.

 

 

1.6.8.     특정 메모리 공간 TRACE32 접근 속성 변경하기(SYStem.Option.SOFTLONG)

TRACE32는 일반적으로 Soft BreakPoint 설정 시 BreakPoint 명령어 Length에 따라 해당 bus width로 메모리에 접근하여 Breakpoint 명령을 삽입합니다. 그러나 어떤 경우에는 Hardware 제약 때문에 반드시 정해진 width로 접근해햐 하는 경우가 있는데 SYStem.Option.SOFTLONG 명령은 BreakPoint명령어 Length에 상관없이 항상 32bit 단위로 Access하도록 합니다.

 

SYStem.Option.SOFTLONG [ON|OFF]

Ex) SYStem.Option.SOFTLONG ON         ; breakpoint설정을 위해 반드시 32bit length로 Access함

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

< 부록 > 

1.  상황별 유용한 cmm script

1.1.   sYmbol Browser(source tree) 에 대한 설명

현재 로드된 ELF 파일의 sYmbol들에 대한 구조 및 내용에 대한 정보를 가지고 있는 윈도우입니다. 아래 그림과 같이 단축 아이콘 중 버튼을 클릭하면 해당 윈도우를 열수 있습니다. 아래 표기된 Text box안의 \\*\*\*는 해당 윈도우가 보여주는 내용을 의미하며 Default로 현재 로드된 모든 sYmbol들을 보여주도록 설정되어 있습니다. 여기서 *표시는 모든 것을 의미합니다.

 

 

만약 String “rodu”를 포함하는 sYmbol들만을 보고자 한다면 아래와 같이 입력하면 해당 string을 포함하는 sYmbol들만 모두 보이게 되므로 원하는 sYmbol들만 Filtering하여 볼 수 있습니다.

 

 

다음은 상위 구조를 확인하기 위해 화살표 위방향버튼()을 클릭합니다. 그러면 모듈이름(module name) 별로 보여주며 아래 그림과 같이 “Source” 항목의 체크박스를 선택하면 모듈이름(module name)이 소스파일 이름으로 표기됩니다. 특정 소스 파일을 선택 후 더블클릭하면 그 소스파일의 하위구조를 보여 주게 되며 해당 파일에서 선언된 함수 및 변수 정보들을 보여주게 됩니다. 그 다음 그림은 “a2mp.c” 파일을 더블클릭했을 때 보여주는 정보입니다. 해당 소스파일 내에서 선언된 sYmbol들을 보여주는 것을 알 수 있습니다. 다시 위방향화살표를 눌러 원래 소스파일 구조를 보이는 단계로 올라온 후 다시 한번  버튼을 클릭하면 맨 상위 구조를 보여주게 되는데 현재 libdvm과 vmlinux라는 두개의 sYmbol 이미지가 로

 

 

 

드된 것을 볼 수 있습니다. 만약 두개의 sYmbol들 중 하나의 sYmbol들만 보고 싶다면 해당 이미지만 더블클릭하면 하위구조로 가게되며 선택된 이미지의 소스파일들만 보여주게 될 것입니다.

 

 

다음 그림은 위 윈도우에서 libdvm이미지를 더블클릭했을 때의 상태를 보여주고 있습니다. libdvm 이미지의 모든 sYmbol들(\\libdvm\*)을 보여주고 있는 것을 알 수 있습니다.

 

 

 

1.2.   cmm 작성 및 실행법(do and cd.do)

Scirpt(.cmm)파일 작성 및 디버그 방법을 알아보고 작성한 cmm파일을 실행하는 밥법을 확인합니다.

 

1.2.1.     cmm파일 작성 및 디버그 방법(plist/pmacro)

1)    cmm 파일 만들어 Editing하기

cmm 파일 editor 실행 명령은 ”pedit”를 사용합니다. 명령 형식은 아래와 같고 만약 파일에 path가 기술되지 않으면 현재 작업 directory로부터 파일을 찾아 Editor를 열게 됩니다. 만약 파일이 없으면 만들어 열게 됩니다. 참고로 현재 작업 Directory의 확인은 TRACE32 Command line에서 “pwd”라는 명령을 통해 확인할 수 있습니다.

 

PEDIT [filename.cmm]

 

Ex) pedit C:\T32\test.cmm             ; C:\T32\test.cmm파일과 함께 cmm file editor를 엽니다.

Ex) pedit test.cmm              ; 현재 작업 dirctory로부터 test.cmm 파일을 cmm file editor로 엽니다.

 

일반 Editor와 Peditor의 차이점은 Script 파일을 수정하고 바로 실행하고 Debugging 할 수 있는 추가 기능을 아래와 같이 더 가지고 있는 것입니다.

 

 

만약 이미 파일이 만들어져 있다면 TRACE32 메뉴에서 File>>Edit Batch File... 을 클릭하면 File Browse box가 뜨는데 이를 이용하여 Editor를 열수도 있습니다.

 

2)    만든 실행파일 실행 및 debug하기

Script(cmm)파일도 만들다 보면 문법 error 또는 의도하지 않은 결과가 나올때가 있는데 이를 위해 TRACE32는 Script파일 Debugger를 제공하고 있습니다. 아래 그림과 같이 Peditor 윈도우에서 ”Debug” 버튼을 클릭하면 해당 Script의 Debug 윈도우를 띄울 수 있습니다.

 

 

디버그 윈도우를 띄우면 기본적인 Debug 기능을 하는 Step/Over/Continue(Run)/Stop(Break) 버튼들을 확인 할 수 있습니다. ”Enddo” 버튼은 현재 Debug 실행 중인 Script 파일의 검증을 종료하겠다는 기능을 갖습니다.

 

 

TRACE32 Comman Line에서 ”plist” 명령을 입력하면 현재 실행(debugging) 중인 Script의 Debug 윈도우를 열어 줍니다. 혹, 특정 Script를 실행하다 Error가 발생한 경우 그 위치를 알고자 한다면 간단히 ”plist” 명령을 실행하면 Error가 발생된 위치를 쉽게 확인할 수 있습니다. 실행 중 Error가 발생한 경우 Script 실행을 멈추기 때문입니다.

아래 그림은 Script를 실행하다 Error가 발생하여 실행을 멈춘 예를 보여주고 있습니다. TRACE32가 알지 못하는 명령 “!”에 의해 발생된 Error인 것을 확인할 수 있습니다.

 

 

Script Debug(“plist”) 윈도우에서 “Macro” 버튼은 Script 실행 중 Script 내의 Script 변수 값과 cmm call 관계를 보여주는 윈도우입니다. 따라서 Script의 Global/Local 변수들을 모두 확인할 수 있습니다.

 

Script Debugging 중 BreakPoint를 설정할 수 있으며 설정하고자 하는 Script 라인에 더블클릭하는 것으로 간단히 할 수 있습니다. 설정한 경우 “plist” 윈도우의 좌측에 밤색의 수직 바가 생성되어 BreakPoint가 설정되었음을 알려줍니다.

Script에서 여러 개의 BreakPoint 설정은 TRACE32 SW 버전 2013.10 이후부터 가능하며 “plist” 윈도우에서  “BreakPoints” 버튼을 클릭하는 것으로 현재 설정된 Script BreakPoint들에 대한 정보를 확인 할 수 있습니다.

 

 

1.2.2.     cmm파일 실행명령(do/cd.do)

1)    .cmm 파일 실행명령 

 

DO [filename.cmm]

 

cmm 파일 실행 명령은 “do”를 사용합니다. 만약 filename앞에 path를 지정하지 않으면 현재 directory로부터 파일을 찾아 실행하게 됩니다. 현재 path의 확인은 Command line에서 “pwd”라는 명령을 통해 확인할 수 있습니다.

 

2)    작업 directory 변경과 동시에 선택된 cmm파일 실행명령

 

CD.DO [filename.cmm]

 

CD는 ChangeDirectory 약어로 DO 명령과 함께 사용하면(CD.DO) 정의된 .cmm파일이 위치한 Path를 현재 작업 directory로 변경하는 기능과 동시에 해당 .cmm파일을 실행하게 됩니다.

 

 

1.3.   Built in device driver Init함수 하나씩 실행하고 Debugging

Linux에서는 booting중 built in device driver Init 함수와 같은 한번씩 Call 되어 실행되어야 하는 함수들을 do_one_initcall()이라는 함수에 의해 call하여 실행하게 됩니다. 따라서 do_one_initcall()를 이용해 __Initcall_start[]에 등록된 초기화가 필요한 함수들을 call하여 실행하는 과정을 따라가며 검증해 볼 수 있습니다.

1)    우선 iTSP가 설치된 폴더의 OS\Linux\do_one_initcall.cmm을 열어 실행합니다.

 

 

2)    해당 Script를 실행하면 do_one_initcall()에 Breakpoint가 설정되며 __Initcall_start[]에 등록된 함수 이름들을 보여 줍니다.

 

 

3)    Go 하게되면 do_one_initcall()에서 멈추게 되며 Break.List윈도우는 노랑색 바탕으로 BreakPoint가 Trigger되었음을 알려주며 call될 init 함수의 윈도우가 열립니다. do_one_initcall()의 parameter인 “fn”은 다음에 call될 ipc_ns_init()을 가리키는 pointer임을 알수 있습니다.

 

 

Call될 ipc_ns_init() 함수까지 실행하고 해당 함수가 정상적으로 실행되는지 확인합니다.

 

 

4)    다음 init 함수의 실행과정을 보고자 한다면 다시 Go하여 do_one_initcall()에서 멈추게 하고 앞의 3)과 같은 순서를 반복합니다.

5)    만약 __Initcall_start[]에 등록된 특정 함수부터 실행 과정을 보고자 한다면 먼저 아래 그림과 같이

“Disable All” 버튼을 눌러 기존 BreakPoint를 모두 disable시킵니다.

 

 

6)    다음은 __initcall_start[] 변수 윈도우의 함수 call list에서 원하는 함수 선택 후 우클릭하면 PopUp 메뉴가 나타나게 되며 >> Display Memory 클릭 >> PopUp에서 Indirect List를 클릭합니다.

 

 

7)    해당 함수 윈도우가 열리면 함수이름을 선택한 후 우클릭하여 “Go Till”을 클릭하면 선택한 함수까지 실행하고 오게 됩니다.

 

 

 

 

 

8)    다음은 “Enable All” 버튼을 눌러 do_one_initcall()에 설정된 BreakPoint를 활성화 하고 3) 과정을 반복합니다.

 

 

 

 

2.  기타

2.1.   PowerView 윈도우를 text 파일로 저장하는 방법

TRACE32 PowerView의 윈도우를 Text 파일로 저장하여 공유하고 싶은 경우가 가끔 있습니다. 물론 메모리 윈도우와 같이 윈도우에 보이지 않는 영역까지도 그렇게 하고 싶은 경우가 있습니다. 해당 기능은 아래 3개 명령의 조합으로 가능합니다. Printer를 Open하고 Print하고 Printer를 Close하는 순으로 이루어 집니다.

 

PRinTer.OPEN [filenameTosave.txt]

WinPrint.[Window Name]

PRinTer.CLOSE

 

Ex) PRinTer.OPEN MemDump.txt                   ; 명령을 이용해 저장할 text 파일을 지정합니다.

WinPrint.Data.Dump 0xC0008000++0xFF    ; 저장할 윈도우를 지정합니다.

PRinTer.CLOSE                                      ; 열었던 Printer와 저장파일을 Close합니다.

EDIT MemDump.txt                               ; 저장된 text 파일을 엽니다.

 

다음은 위 예제의 결과입니다.

 

 

2.2.   break points 설정을 파일로 저장해 두고 다음에 사용하는 방법

1)    TRACE32 Command line에서 “Break.List” 명령을 입력하거나 단축아이콘 중 버튼을 클릭하면 현재 설정된 BreakPoint 정보를 담고 있는 BreakPoint List 윈도우가 열립니다.

 

 

 

2)    “Break.List”윈도우에서 “Store”버튼을 눌러 File Browse box가 뜨면 현재 설정된 Break List를 .cmm 파일로 저장합니다.

3)    작업하다 저장해 놓았던 BreakPoint 들을 다시 로드하여 사용하길 원한다면 “Break.List” 윈도우에서 “Load” 버튼을 클릭해 저장해 놓았던 .cmm파일을 선택합니다. 그러면 .cmm에 저장되었던 BreakPoint들을 복원해 주게 됩니다. 또는 “DO” 명령을 사용해서 저장해 놓았던 .cmm파일을 실행하는 것도 한 방법입니다.

 

2.3.   watch window 설정을 파일로 저장해 두고 다음에 사용하는 방법

1)    먼저 변수 등록 윈도우(Var.Watch)에 원하는 변수들을 등록합니다.

2)    Window 메뉴 >> Store Windows to …. 을 클릭하여 File Browse 윈도우가 열리면, “Var.Watch” 윈도우를 포함한 현재 열린 윈도우들을 .cmm파일로 저장합니다. 그러면 “Var.Watch”에 등록된 변수정보와 함께 윈도우 정보를 저장하게 됩니다.

 

 

3)    만약 저장해 두었던 변수들에 대한 정보를 다시 로드하고 싶다면 Window 메뉴 >> Load Windows from …. 을 클릭하여 File Browse 윈도우가 열리면 저장했던 cmm을 선택하여 실행합니다. 실행하면 저장되었던 윈도우들과 “Var.Watch” 추가되었던 변수들이 그대로 복원 됩니다.

4)    만약 변수정보만 cmm파일로 저장해 놓고 사용하고 싶다면 이전에 저장했던 .cmm을 연 후 각 라인들 중 VAR.ADDWATCH를 포함하는 라인들만 제외하고 모두 지우면 되겠습니다.

 

2.4.   Lock-up 시 마지막 PC 값 확인하기

CortexA9/A15/A7 등의 Debug Register에는 PCSR(Program Counter Sampling Register)라고 있는데 이를 이용하여 SNOOPer Trace라고하는 기능을 사용할 수 있습니다. 이는 특정시간마다 PC값을 Sample하여 Code의 실행 궤적과 실행 빈도등을 분석할 수 있으며 Lock-Up시 마지막 실행했던 명령어의 PC 값을 확인 할 수도 있습니다.

2.4.1.     Lock-Up시 PC 값 확인하기

1)    우선 Target 연결을 위한 설정 후 “SYStem.Mode Attach”로 연결합니다. Lock-Up이라 하더라도 APB BUS가 죽지 않는 한 Attach는 문제가 없는 것이 보통입니다.

2)    Trace 메뉴 >> Configuration을 클릭하면 Trace 윈도우가 열립니다.

3)    Trace 윈도우에서 MOTHOD >> SNOOPer 선택, Mode >> PC 선택, state >> OFF 선택

4)    Trace 윈도우에서 state >> Arm 으로 선택하면 sample된 PC 값들을 저장하게 됩니다.

 

 

5)    state >> OFF로 선택하여 PC 값 저장을 멈춘 후 “List” 버튼을 클릭하면 Lock-Up된 Target이라면 고정된 PC 값들이 Sample되어 Recording되어 있는 것을 확인 할 수 있습니다. 다시말해 List내에 보이는 값들이 Lock-Up당시의 PC 값들이 됩니다. 좌측의 “run” 열은 Multi-Core인 경우 Core 번호를 의미하며 아래 그림에서 Lock-Up시 Core0의 PC 값은 0xC3E44060이며 Core1의 PC 값은 0x00000158입니다.

 

 

2.4.2.     Code 실행 궤적 구하기

1)    Trace 메뉴 >> Configuration을 클릭하면 Trace 윈도우가 열립니다.

2)    Trace 윈도우에서 MOTHOD >> SNOOPer 선택, Mode >> PC 선택, state >> OFF 선택

3)    Target을 Go(Run)시키면 PC값 Sample을 시작하게 되고 Target을 Stop시키면 Sample을 멈추게 됩니다.

4)    다음은 Trace 윈도우에서 “List” 버튼을 클릭하여 Sample된 PC값들을 확인합니다. PC 값만으로 분석이 어려우므로 “SNOOPer.List” 윈도우의 “Chart” 버튼을 클릭하여 함수 Chart로 대략적인  Code 실행 궤적을 확인합니다. 특정 시간마다의 PC 값 Sample이므로 대략적인 궤적이 되겠습니다.

 

2.5.   TRACE32 prompt 에서 사용 가능한 OS 명령

TRACE32내에서 사용되는 OS specific 명령에 대해 알아봅니다.

2.5.1.     TRACE32에서 OS file system에 있는 실행파일 실행하기

OS라는 명령을 이용하여 OS file system에 있는 실행파일을 실행할 수 있습니다. 파일명 기술 시 Space Bar가 있는 경우 ” ”로 감싸 주시기 바랍니다.

 

OS [실행파일명]

 

Ex) If OS.FILE(”C:\ComPAS\app\ComPAS_Viewer\compas.exe”)

         OS ”C:\ComPAS\app\ComPAS_Viewer\compas.exe”         ; 해당 파일이 있으면 실행합니다.

2.5.2.     PWD

 

PWD ; 현재 작업폴더 Path를 보여줍니다.

2.5.3.     ChDir/ChDir.DO

현재 작업 폴더를 다른 곳으로 변경할 때 사용합니다.

 

ChDir [PathName]       ; 작업 폴더를 정의한 Path로 변경합니다. 

ChDir.DO [FileName]   ; 작업폴더를 FileName이 위치한 Path로 변경합니다.

 

Ex) CD ..                     ; 상위 폴더로 이동합니다.

   CD WORK               ; WORK 폴더로 이동합니다.

   CD C:/T32/WORK     ; 작업폴더를 C:/T32/WORK

   CD.DO C:/T32/Work/test.cmm        ; test.cmm 파일이 위치한 폴더로 현재 작업 폴더를 변경하고 파일을 실행합니다.

2.5.4.     DIR/LS

DIR [PathName] ; PathName이 없다면 현재 작업폴더의 내용을 보여 주며 있으면 Path내용을 보여줍니다.

LS[PathName]   ; PathName이 없다면 현재 작업폴더의 내용을 보여 주며 있으면 Path내용을 보여줍니다.

 

2.5.5.     COPY/MV/REN

COPY [SourceFile] [DestinationFile]      ; SourceFile을 DestinationFile로 Copy합니다.

Ex) COPY /T32/old.t32 ./new.t32             ; 해당 path의 old.t32파일을 현재 path에 new.t32로 copy합니다.

 

MV [OldName] [NewName]     ; OldName을 NewName으로 변경합니다.

Ex) MV old.t32 new.t32             ; old.t32의 file이름을 new.t32로 변경합니다.

 

REN [OldName] [NewName]    ; OldName을 NewName으로 변경합니다.

Ex) REN old.t32 new.t32            ; old.t32의 file이름을 new.t32로 변경합니다.

 

2.5.6.     DEL/RM

DEL [FileName]           ; FileName을 지웁니다.

RM [FileName]            ; FileName을 지웁니다.

Ex) DEL c:\t32\test.bak

RM c:\t32\test.bak

 

2.5.7.     EDIT

EDIT [FileName]                     ; FileName을 text editor로 엽니다.

Ex) edit text.txt            ; text.txt파일과 함께 TRACE32에 text editor를 엽니다.

 

2.5.8.     HISTory

HISTory          ; 그동안 사용했던 명령 History를 보여줍니다.

그동안 사용했던 History 윈도우가 열린 후 List 중 원하는 명령에 더블클릭하면 해당 명령을 다시 실행하게 됩니다.

 

2.5.9.     MKDIR

MKDIR [PathName]     ; PathName을 갖는 폴더를 만듧니다.

RMDIR [PathName]     ; PathName을 갖는 폴더를 지웁니다. 해당 폴더는 비어 있어야 합니다.

Ex) MKDIR SubDir         ; SubDir이란 폴더를 만듧니다.

   RMDIR SubDir         ; SubDir 폴더를 지웁니다.

2.5.10.  QUIT

TRACE32 GUI(PowerView)를 닫습니다.

 

2.5.11.  TITLE

TITLE %String [”TitleName”]    ; TRACE32 GUI title을 TitleName으로 변경합니다.

Ex) TITLE %String "TRACE32 Debugger for CPU0"  ; TRACE32 PowerView Title을 해당 String으로 변경합니다.

 

 

2.6.   함수 수행 시간 알아내는 방법

함수 실행시간을 알아보는 방법은 크게 3가지 정도 있겠습니다.

 

1)    PC의 SW timer를 이용해 측정하는 방법

2)    BMC(PMU)기능을 이용하여 측정하는 방법

3)    ETM을 비롯한 CoreSight logic을 이용해 측정하는 방법

 

3)번 항목의 경우 ETM Trace 데이터를 저장할 수 있는 장비가 있어야 하므로 여기서는 1)/2)에 대한 설명을 진행하도록 하겠습니다.

 

2.6.1.     PC의 SW timer를 이용해 측정하는 방법

TRACE32 명령 중 RunTime이라는 명령을 이용합니다.

1)    Command line에서

RunTime.RESet

RunTime

을 입력합니다.

 

 

2)    BreakPoint와 같은 TRACE32 기능을 이용하여 원하는데까지 실행한 후 멈추게 되면 아래와 같이 시간 정보들이 보이게 된다. 아래 빨간 박스로 표기한 항목이 실행하는데 걸린 시간을 의미 합니다. 다만 이시간은 PC의 Software Timer를 사용하기 때문에 ms단위의 오차 범위를 갖습니다. 따라서 매우 큰단위 시간을 측적할 때 의미가 있겠습니다.

 

2.6.2.     BMC(BenchMark Counter) 기능을 이용해 측정하는 방법

BMC는 ARM에서 제공하는 PMU(Performance Monitoring Unit)의 Event Couter를 이용하여 Target Hardware로 부터 동작 정보를 얻어내는 기능입니다.

 

1)    TRACE32 Command line에서 ”BMC” 명령을 입력합니다. BMC 윈도우가 열리면 ”AutoInit”을 체크하고 ”CLOCK”항목을 CPU core 동작 clock(가급적 정확한 값 설정할 것)으로 설정합니다.

 

 

2)    다음은 BMC의 ”Event”를 ”Clockcycles”로 설정합니다. 이는 실행 중 몇 개 Clockcycles을 사용했는지 세는 Counter Event 설정을 위한 것입니다. ”ratio” 항목은 ”X/CLOCK”으로 설정합니다.

 

 

3)    BreakPoint와 같은 TRACE32 디버깅 기능을 이용하여 현재 시점부터 측정하고자 하는 코드나 데이터 Read/Write 조건을 걸어 Target를 Go(Run)시켜 측정하고자 하는 곳까지 실행 후 멈추도록 합니다. 그러면 BMC는 아래와 같이 실행시간동안 발생된 설정 Event의 숫자를 세어 기록해 줍니다.

아래 그림을 보면 Core0의 실행시 Clock 소요 수는 313861626이며 시간은 392.327ms가 됩니다. Core1의 경우 Clock 수는 3601이며 차이가 Core1과 차이가 나는 것은 Core1이 Sleep상태에 들어가기 때문입니다. 즉 BMC를 이용한 시간 측정은 Core가 살아있는 상태의 시간만을 측정할 수 있으며 Frequency Scaling 을 사용한 경우 시간 오차가 발생하게 됩니다.

 

 

 

2.7.   각 정보(Ex. Register/ Data.Dump/ Var.Watch) 윈도우의 변동된 값 Highlight하기

TRACE32 PowerView는 열려 있는 각 윈도우에 속성을(옵션을 통해) 추가할 수 있게 되어 있습니다.

2.7.1.     Register/Data.Dump 윈도우의 변경된 값 Highlight하기

속성을 추가하는 방법은 아래 그림과 같이

1)    속성을 변경하고자 하는 윈도우 헤더에 커서를 가져간 후 우클릭하면 윈도우 테그(곧 그 윈도우를 여는 명령)가 Command line으로 내려오게 됩니다.

 

 

 

2)    해당 명령에 한칸 띄운 후 “/”를 하면 아래 그림과 같이 “/” 밑에 올 수 있는 옵션들이 버튼 형식으로 재 구성되어 보이게 됩니다. 여기서 “SpotLight” 옵션을 추가한 후 “Enter”를 입력합니다. 만약 “SpotLight” 옵션이 없다면 해당 윈도우에는 “SpotLight” 옵션을 지원하지 않는 경우입니다. 다시말해 해당 옵션을 지원할 필요가 없는 윈도우인(Ex. Data.List) 경우 입니다.

 

 

3)    프로그램 프로그램 Go(Run)를 한다든지 Step 등을 실행하면 해당 윈도우의 값들이 변경될 경우 변경된 값들은 Highlight되어 표시됩니다.

 

 

 

4)    Memory Dump(Data.Dump) 윈도우에 해당 옵션을 추가하는 방법 역시 Register 윈도우와 동일한 방법과 순서에 따라서 적용하시면 되겠습니다.

 

 

2.7.2.     변수(Var.Watch 등) 윈도우의 변경된 값 Highlight하기

변수윈도우 경우는 변수 별로 ”보기 Format”을 각각 지정할 수 있기 때문에 윈도우의 옵션(“/”)으로 ”SpotLight” 속성을 설정하는 것이 아니라 Format(”%”)으로 속성을 지정합니다.

 

1)    변수 윈도우 헤더에 우클릭 후 Command line에 해당 명령이 내려 오면 ”formats” 버튼을 클릭하거나

 

“%”를 입력하면 추가할 Format 관련 버튼들이 재구성 됩니다. ”SpotLight” 버튼을 클릭하거나 명령어 뒤에 ”%SpotLight”를 직접 입력하고 ”Enter”하면 변수윈도우에 ”SpotLight” 속성이 적용됩니다. 이후 확인하고자 하는 변수들을 변수 윈도우에 추가합니다.

2)    프로그램 Go(Run)를 한다든지 Step 등을 실행하면 해당 윈도우의 값들이 변경될 경우 변경된 값들은 Highlight되어 표시됩니다.

 

 

2.7.3.     변수/메모리윈도우를 열 때 HighLight 속성을 기본 속성으로 갖도록 설정하기

TRACE32 PowerView는 각 윈도우 들에 대한 속성뿐아니라 PowerView 환경에 대한 기본 설정 값들을 변경하는 ”SETUP” 명령을 가지고 있습니다. 여기서는 변수/메모리 윈도우 속성에 대한 부분만 설명하도록 합니다.

 

SETUP.DUMP /SpotLight       ; 메모리 윈도우에 ”SpotLight” 속성 지정

SETUP.Var %SpotLight          ; 변수 윈도우에 ”SpotLight” 속성 지정

 

TRACE32 실행 후 상기 명령을 한번 실행한 후 메모리 윈도우나 변수 윈도우들을 열게될 경우 기본적으로 ”SpotLight” 속성이 적용된 상태가 되도록 합니다.

아래 그림은 상기 명령들을 실행한 후 윈도우를 연 예제이며 ”/SpotLight” 옵션이 윈도우에 적용되어 있지 않더라도 값들이 Highlight되어 표시되는 것을 볼 수 있습니다.

TRACE32를 매번 실행할 때마다 위 명령들을 실행하면 많이 불편하므로 설치 폴더에 있는 t32.cmm 파일의 마지막 라인 ”ENDDO” 앞에 위 두 명령을 삽입해 놓으면 TRACE32를 실행할 때마다 t32.cmm를 실행하기 때문에 자동으로 관련 속성이 적용될 것이므로 유용하게 사용할 수 있을 것입니다.

 

 

 

 

 

 

 

 

2.8.   Frame buffer 의 image 확인

2.8.1.     Linear한 Address 공간에 Image Data가 있는 경우

특정 메모리 공간에 있는 Frame Buffer Image를 PC에서 그림으로 보여주는 기능을 가지고 있습니다. 해당기능을 하는 명령은 다음과 같습니다.

 

Data.IMAGE [Image Address] [Lines] [Rows] [Image Format]

Ex) Data.Image A:0xC3F00000 320. 240. /RGBX888LE

 

Image Address: “Memory Class”를 기술하지 않으면 현재 CPU의 상태를 default로 적용합니다. 

Imgge format: 아래그림과 같이 Command line에 명령을 입력하면 지정할 format을 확인할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

2.9.   TRACE32 maintenance

2.9.1.     TRACE32 Version 확인

TRACE32 Help 메뉴 >> About TRACE32를 클릭하거나 Command line에서 “VERSION” 명령을 입력하여 다음 윈도우를 띄웁니다. 크게는 Software Version/License Info./Hardware Version항목으로 나뉘어 있습니다. ”More” 버튼 클릭으로 추가 정보를 보여 줍니다.

1)    Software Version: 현재 사용하고 있는 TRACE32 PowerView 버전 정보를 알려줍니다.

2)    License: 현재 사용되고 있는 JTAG License Cable(License Module)에 License 정보를 보여 줍니다. 여기

는 Debugger License 종류와 License maintenance 기간을 보여줍니다. License maintenance

기간은 해당 기간 내 Software Version을 무기한 사용할 수 있다는 의미를 갖습니다.

3)    Hardware: 연결된 Hardware 장비(ICD, License Module)에 대한 정보를 보여 줍니다.

 

 

2.9.2.     TRACE32 SW Update 방법

Software Update방법은 TRACE32 UPDATE Manger라고 하는 TRACE32 SW Management tool을 이용하는 방법과 수동으로 하는 방법이 있습니다.

자세한 방법은 앞장의 <2.2.1 TRACE32 UPDATE Manager를 이용한 iTSP 설치 및 TRACE32 Upate> 항목을 참고하시기 바랍니다.