HyperVisor/Secure/Nonsecure BreakPoint

TRACE32
이동: 둘러보기, 검색

1.1.   Hyervisor(EL2)/Secure/NonSecure Breakpoint 설정

Processor 동작 모드에 따라 Breakpoint 설정이 가능합니다(2015년 1월~ 버전). 아래 그림은 같은 Address이지만 Secure와 NonScure에 따라 다른 BreakPoint가 설정되어 있는 것을 볼 수 있습니다.

또한 동일 Address이지만 Source code도 다른 code가 보이는 것을 볼 수 있습니다. 즉 동작 Mode에 따라 동일 Address에 다른 Application이 동작할 수 있고 Debugger는 이런 환경에서 구분하여 Debugging할 수 있느 환경을 제공해 주어야 합니다.

 

 

1.1.1.     동작 Mode(or Exception Level)에 따른 BreakPoint 설정

기본적으로 Breakpoint를 설정하면 동작모드에 상관없이 설정됩니다. 그러나 어떤 경우에는 특정 동작 Mode에서만 유효하도록 설정할 수 있습니다. 특히 Secure OS를 Debugging 한다거나 Hypervisor Mode debugging을 효율적으로 하고자 할 경우 필요하게 될 것입니다.

사용방법은

1)    SYStem.Option.ZoneSPACES ON       ; 동작 Mode를 구분하여 BreakPoint 관리

2)    의도하는 동작 모드에 대해 BreakPoint를 설정

Ex) Break.Set H:0x30E000                ; Hypervisor Mode(EL2) SoftBreakpoint(RAM 공간인 경우)

    Break.Set N:0x202000                ; NonSecure World(EL1&EL0) SoftBreakpoint(RAM 공간인 경우)

    Break.Set Z:0x202004                ; Secure World(EL1&EL0) SoftBreakpoint(RAM 공간인 경우)

    Break.Set H:0x30E000 /Onchip     ; Hypervisor(EL2) Mode Onchip Breakpoint

    Break.Set N:0x202000 /Onchip    ; NonSecure(EL1&EL0) World Onchip Breakpoint

    Break.Set Z:0x202004 /Onchip     ; Secure World(EL1&EL0) Onchip Breakpoint

    Break.Set Z:0x300014 /Write       ; Secure World(EL1&EL0) data write breakpoint

 

1.1.2.     동작 Mode(or Exception Level)에 따라 구분하여 Symbol 다운로드 하기

기본적으로 Symbol을 다운로드하면 동작 Mode(or EL)에 상관없이 Symbol을 로드 합니다. 따라서 Linux와 Secure OS가 동시에 동작하는 Application과 같은 개발환경에서 두 동작 Mode를 동시에 Debugging하기 원한다면 매우 불편한 상황을 접하게 될 것입니다. 즉, 어드레스는 같지만 Secure/Non-Secure World에 따라 다른 코드가 위치될 수 있기 때문에 필요시마다 해당 동작모드에 대한 Symbol을 로드하여 사용해야 할 것입니다. 따라서 TRACE32는 동작모드에 따라 동일 어드레스라 할지라도 다른 Symbol을 다운로드하는 기능이 있어 이러한 번거러움을 해결해 줍니다.(2014년 11월~ 버전)

방법은 다음과 같습니다.

 

1)    SYStem.Option.ZoneSPACES ON       ; 동작 Mode를 구분하여 Symbol 관리

2)    동작 Mode(Exception Level)에 따라 Symbol 로드

Ex) Data.LOAD.Elf  HyperAppFileName.elf  H:  /nocode /noclear          ; @HyperVisor(or EL2)

     Data.LOAD.Elf  SecureAppFileName.elf  Z:  /nocode /noclear         ; @Secure World

     Data.LOAD.Elf  NonSecAppFileName.elf  N:  /nocode /noclear       ; @NonSecure World