CLI 환경에서 STM GDB-Server 사용

CLI 환경에서 GDB를 사용하기 위해서는 STM에서 제공하는 아래의 유틸리티를 설치하거나 STM32CubeIDE 함께 설치되는 플러그인을 사용하는 방법이 있다. 유틸리티 설치 여부 및 STM32CubeIDE 버전에 따라 링크 경로나 PATH 환경변수 경로가 틀릴 수 있을 수 있다.

 

1. STM32 Utility 설치

2. STM32CubeIDE 플러그인 사용 방법 (STM32CubeIDE 플러그인 확인 가능)

    • /opt/toolchains 디렉토리 생성
      $ sudo mkdir -p /opt/toolchains
    • ARM Cross Compiler 12.3 링크 생성
      $ sudo ln -s /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.macos64_1.0.100.202403111906/tools /opt/toolchains/arm-none-eabi-12.3
    • STM32CubeProgrammer 링크 생성
      $ sudo ln -s /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.ide.mcu.externaltools.cubeprogrammer.macos64_2.1.201.202404072231/tools /opt/toolchains/stm32prog
    • ST-Link-Server 링크 생성
      $ sudo ln -s /Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.ide.mcu.externaltools.stlink-gdb-server.macos64_2.1.200.202401191126/tools /opt/toolchains/stlink-gdb

3. PATH 및 LD_LIBRARY_PATH 설정

어디서든 실행하기 위해 실행경로(PATH 환경변수)를 설정해야 하며, GDB-Server 실행시 동적 라이브러리(.so)를 참조하기 때문에 라이브러리 경로도 함께 등록해야 한다. 유틸리티 설치 방법에 따라 각자 설치된 경로를 지정하도록 한다. 이 글에서는 STM32CubeIDE과 함께 설치된 플러그인에 링크를 생성한 경로로 지정하였다.

 

또한, 각자 로그인쉘 종류에 따라 환경변수를 등록하는 파일이 다를 수 있다. 이 글에서는 zsh 쉘을 사용하는 환경이며 ~/.zshrc 파일을 아래와 같이 수정하였다.

$ vi ~/.zshrc

...
export PATH="/opt/toolchains/stm32prog/bin":$PATH
export PATH="/opt/toolchains/stlink-gdb/bin":$PATH

export LD_LIBRARY_PATH=/opt/toolchains/stlink-gdb/bin/native/mac_x64:$LD_LIBRARY_PATH
...

4. STM32 GDB-Server 스크립트 생성 및 권한 부여

GDB를 사용하기 위해서는 GDB-Server를 우선 실행해야 하며, 실행시 포트설정 및 elf 파일을 로딩하는 CubeProgrammer 실행 경로등을 옵션으로 주어어한다. 여러 입력 커맨드를 매번 실행하는 것이 번거로워 스크립트로 생성하여 명령어 하나로 실행하도록 한다.

 

스크립트 생성 위치는 macOS 경우는 /usr/local/bin과 같은 적당한 위치 생성하도록 한다. 이 글에서는 stlink-gdb/bin 디렉토리에 스크립트를 생성하였다. 

$ sudo vi /opt/toolchains/stlink-gdb/bin/stlink-gdb-server

#!/bin/sh
ST-LINK_gdbserver -p 61234 -r 15 -e -d -cp /opt/toolchains/stm32prog/bin
$ sudo chmod 755 /opt/toolchains/stlink-gdb/bin/stlink-gdb-server

5. GDB Client 실행방법

타겟보드에서 elf 파일을 올리는 주체는 GDB-Server이며, GDB를 사용하기 위해서는 가장 먼저 GDB-Server를 먼저 실행하도록 한다. GDB-Server를 실행하였다면 GDB Client를 사용할 수 있으며, Makefile에 실행하는 타겟(stgdb)을 추가하였고 stgdb 타겟 명령어를 사용하여 실행할 수 있다.

(gdb) target extended-remote localhost:61234
(gdb) b main
(gdb) c

 

참고로 GDB-Server가 직접 클라이언트에서 지정한 elf 파일을 전송받아 타겟보드에 올리는 방식이므로,  타겟보드에 이미지를 다운로드 할 필요는 없다. 초기 보드 브링업 단계에서 메모리 크래쉬나 lock-up을 잡는데 GDB가 매우 유용하여 간단히 블로그에 정리해둔다. 

 

GDB에서 자주 사용하는 명령어는 아래 문서를 참고하도록 한다.

gdb-quick_reference.pdf
0.07MB