2016-11-28 3 views
2

문제 시나리오 : 간단히 말해서 대상에로드 된 ELF 파일에서 기호 (및 해당 내용)를 읽는 Trace32 명령이 있습니까? ELF 파일의 응용 프로그램 특정 디버그 기호가 ELF의 '.noload'섹션의 일부로 만들어지면 기호/내용이 ELF 파일의 일부임을 나타냅니다 (readelf -a xxxx를 사용하여 읽을 때 사용 가능). ELF 파일의 '.noload'섹션은 대상 메모리로 플래시되는 xxx.bin을 생성 할 때 제거됩니다.ELF 파일에서 기호 내용을 읽는 Trace32 명령

  • '.noload'섹션의 디버그 기호는 정적으로 값이 할당되며 런타임 중에는이 값이 변경되지 않습니다.
  • '.noload'섹션의 디버그 심볼 부분 (바이너리로 컴파일하고 Trace32로로드 한 후)을 읽으려고 할 때 trace32 팝업 창에 'MMU fail'플래그가 표시되어 trace32가 심볼 내용을 읽으려고합니다. '.noload'섹션의 심볼 부분은 주소가 매핑되었지만 전혀로드되지 않았으므로 메모리에서 가져올 수는 있지만 액세스 할 수 없습니다.

모든 입력 :
- 내가 직접 대상 메모리보다는 ELF 파일에서 심볼의 내용을 읽을 수있는 TRACE32 명령으로 도움이 필요합니다.
- 또한 'readelf'를 실제 스크립트에서 사용할 수 있을지 확실하지 않습니다. 위의 쿼리에 대한 해결책이 없다면이 방향에 도움이 될 것입니다.

답변

3

사용 명령

Data.LOAD.Elf myfile.elf [<optional address offset>] /NoCODE 

옵션/NoCODE에만 ELF에서 debgug의 기호를로드에 TRACE32를 지시하지만 대상에 코드를로드 할 수 없습니다. 명령 sYmbol.Browse을 사용하여 기호를 다룰 수 있습니다.

그러나 TRACE32를 사용하여 응용 프로그램을 대상에로드하는 경우 ELF에서 먼저 바이너리를 만들 필요가 없습니다. TRACE32를 사용하면 ELF의 PROGBITS 섹션을 타겟에 직접로드 할 수 있습니다. 이 경우에는/NoCODE 옵션없이 Data.LOAD.Elf 명령을 사용하면됩니다 (플래시 프로그래밍을 활성화 한 후).

MMU를 사용하고 있으므로 SYStem.Option.MMUSPACES ON 명령을 사용하여 논리 메모리 공간 ID를 활성화 할 수 있습니다. '공간-ID가'작업에 대한 당신 MMU에 의해 사용되는 공간 ID와 일치하고 '오프셋'보통 제로입니다 그리고

Data.LOAD.Elf myfile.elf <space-ID>:<offset> /NoCODE 

와 기호를로드.

임베디드 Linux에서 응용 프로그램을 디버깅하는 경우 Linux 및 Linux 심볼 자동 로더에 TRACE32 OS 인식 기능을 사용하여 심볼을 올바른 주소로로드해야합니다.

TRACE32에서 'readelf'를 사용해야하는 이유가 있다고 생각하지 않습니다. 어쨌든 OS.Area 또는 OS.Command 명령으로 모든 명령 행 프로그램을 호출 할 수 있습니다.

관련 문제