본문 바로가기
프로그래밍/리눅스

프로그래밍 「 리눅스 편」Linux의 JetBrains CLion(2023)에서 OpenOCD를 사용한 임베디드 Rust 개발

by grapedoukan 2023. 6. 15.
728x90

이 글을 쓰는 시점(4년 2023월 <>일)을 기준으로 JetBrains CLion은 Rust에 대한 플러그인 지원과 임베디드 개발에 대한 기본 지원을 제공하지만 이 둘에 대한 기본 또는 플러그인 지원은 결합하지 않습니다. 그러나 OpenOCD 지원 및 사용자 지정 빌드 도구를 사용하여 CMake 래퍼에 의존하지 않고도 합리적인 빌드 및 디버깅 경험을 얻을 수 있습니다.

다음은 STM32F3VCT32VCT303 MCU를 사용하는 STM6F<> 디스커버리 보드의 기본 설정에 대해 설명하지만 OpenOCD를 사용하여 프로그래밍 및 디버깅할 수 있는 모든 보드에 적용되어야 합니다. 나는 최근에 장난감 프로젝트에서 그것을 사용했다.

STM32F3 디스커버리 블로그 게시물은 LED 룰렛 예제의 GIF 없이는 완성되지 않습니다.

Rust 환경 준비

이 글은 특히 CLion에 초점을 맞추고 있으므로, The Embedded Rust Book을 팔로우하여 시작하는 것이 좋습니다. STM32F3 Discovery용으로 특별히 사용할 수 있는 이전 버전의 책도 있으며 여기에서 읽을 수 있습니다.

특히 다음이 필요합니다.

  • 적절한 Rust 타겟이 설치되어 있어야 합니다(예: thumbv7em-none-eabi).
  • OpenOCD 설치,
  • GDB Multi-Arch (또는 대상 플랫폼의 GDB)가 설치되어 있습니다.
  • UDEV 규칙 설정 및
  • UART 디바이스와 통신할 수 있는 사용자 권한입니다.

이 책은 이 모든 것을 안내할 것입니다.

대상 도구 체인 설정

CLion에서 설정(Settings) > 빌드, 실행, 배포(Build, Execution, Deployment) > 도구 체인(Toolchains)으로 이동하여 새 도구 체인을 생성합니다. 이 창에서 하드웨어의 GDB를 선택합니다(이 경우 ). 이 단계는 나중에 유사한 선택을 할 것이기 때문에 엄격하게 요구되지는 않지만 일을 멋지고 깔끔하게 유지합니다.arm-none-eabi-gdb

툴체인 설정(빌드, 실행, 배포 > 툴체인 설정> 설정)

빌드 타겟 설정

Settings(설정) >Build, Execution, Deployment > Custom Build Targets(사용자 지정 빌드 대상)로 이동하여 빌드할 각 바이너리 및 플레이버에 대한 새 타겟을 생성합니다. 아래 그림에서 위에서 만든 툴체인을 만들고 타겟팅하고 선택했습니다. 빌드  정리 단계는 바로 뒤에 생성됩니다.Cargo DebugCargo Release

빌드 대상 설정(Settings > Build, Execution, Deployment > Custom Build Targets)

이 구성은 에 저장됩니다..idea/customTargets.xml

Build and Clean 옆에 있는 점 3개 버튼을 클릭하면 External Tools 대화상자가 나타납니다.

외부 도구

버튼을 클릭하고 빌드하려는 각 플레이버 또는 바이너리에 대해 하나씩 단일 타겟 Clean 및 여러 Build 타겟을 만듭니다. 그러면 편집 도구 대화 상자가 나타납니다.+

그룹 이름은 편집 도구 창에서 자유롭게 지정할 수 있으며 Rust Build를 선택했습니다. 빌드하는 각 바이너리에 대해 일반 이름 또는 특정 이름을 선택할 수 있습니다(예: 바이너리당 디버그 및 릴리스 빌드를 번들로 묶기 위해).

화물 청소 도구 구성.

cargo 빌드 도구 구성입니다.

프로젝트에서 구성과 함께 사용자 지정을 사용하는 경우 인수를 생략할 수 있습니다. 내 프로젝트는 다음을 사용합니다.--target ....cargo/config.tomlbuild.target

[build]
target = "thumbv7em-none-eabihf" # Cortex-M4 and Cortex-M7 (no FPU)

이와 같은 구성을 제공하지 않는 경우 Argument 값은 다음과 같아야 합니다.

build --target thumbv7em-none-eabihf

화물 작업공간

프로젝트를 단일 바이너리가 아닌 화물 작업공간으로 설정할 때 변수 확장은 유용하지 않습니다. 예를 들어, 는 작업 영역 디렉토리를 참조하지만 . 올바른 바이너리를 빌드하려면 에서 지정하거나 빌드 명령에 매개 변수를 구체적으로 제공해야 합니다.$ContentRoot$$ProjectFileDir$default-membersCargo.toml--bin your-project

인수의 전체 값은 다음과 같습니다.

build --target thumbv7em-none-eabihf --bin led-roulette

실행/디버그 구성

마지막으로 실행 구성을 설정해야 합니다. 이를 위해 Debug/Run Configuration(디버그/실행 구성) 선택에서 Edit Configurations(구성 편집)로 이동합니다. 놀랍게도 Run/Debug Configurations 대화 상자가 나타납니다.

여기에서 OpenOCD 다운로드 및 실행 유형의 구성을 만듭니다.

  • Target의 경우 위에서 만든 빌드 타겟을 선택합니다. 아래 예에서는 Cargo Debug를 선택했습니다.
  • Executable binary(실행 가능한 바이너리)의 경우 디렉터리에서 빌드 바이너리 아티팩트를 선택합니다. 필자의 경우, 바이너리는 프로젝트가 타겟을 위해 빌드 된 이후 하위 디렉토리에있었습니다.targettarget/thumbv7em-none-eavbihfdebugthumbv7em-none-eavbihf
  • 위에서 만든 도구 체인을 선택하거나 도구 체인을 만들지 않은 경우 디스크의 올바른 디버거를 가리켜 디버거를 선택합니다.
  • Board 구성 파일의 경우 Assist 버튼을 클릭합니다. 그러면 보드 구성 파일 선택 대화 상자가 나타나 관련 구성을 선택할 수 있습니다.
  • GDB 포트 및 텔넷 포트는 다른 컨피그레이션과 충돌하지 않는 한 그대로 둡니다.
  • [Download]에서 [Always] 또는 [If updated]를 선택합니다.
  • Reset(재설정)에서 Halt(중지)를 선택합니다. 어쨌든 이것은 나에게 최고의 디버깅 경험을 제공했습니다.
  • [Before launch]에서 [Build]를 유지합니다.

실행/디버그 구성

보드 구성 파일 선택 대화 상자에서 올바른 보드 구성을 선택하십시오.

보드 구성 파일 선택 도우미

응용 프로그램 플래싱 및 실행

선택한 실행/디버그 구성을 시작하면 디버그 창이 열립니다. 툴팁은 OpenOCD를 통해 업로드되는 펌웨어에 대해 알려주며 이제 자유롭게 중단점을 배치하고 평소와 같이 단계별로 실행할 수 있습니다.

경우에 따라 디버거를 다시 시작하면 컴파일 통신 오류가 발생합니다. 디버깅 세션을 두 번째로 다시 시작하면 이러한 문제가 해결됩니다.

시스템 뷰어 설명(SVD)

디버그 보기의 주변 장치 탭에서는 보드와 관련된 SVD 파일을 선택할 수 있습니다. github.com/stm32-rs/stm32-rs 저장소의 하위 디렉토리 ( here )에서 내 것을 선택했습니다.svd

GPIO32 ODR303이 LED 하이를 토글하도록 설정된 STM3F11 SVD.

레지스터 보기

마찬가지로, 디버그 보기의 레지스터 탭에서는 현재 레지스터 값을 검사할 수 있습니다.

OpenOCD 개발 경험의 보기를 등록합니다.

그게 다야

세계 최고의 개발은 아니지만 합리적인 출발점입니다. 재미있게 지내세요.

728x90