Raspberry Pico: 단일 장치로 간단한 디버깅 수행
25477 단어 microcontrollerraspberrypipico
CSDK를 사용하고 싶다면, 구축 도구, Cmake 설치, SDK 다운로드, SDK 경로 정의, 프로젝트에 Cmake 파일 추가, 필요한 라이브러리 추가 등 해야 할 일이 많다. UF2 파일을 컴파일해서 피코에 수동으로 업로드해야 하는 편안함도 있다.
얘가 더 좋고 쉬울 수 있을까요?맞아요!위대한 wizio-pico 프로젝트에 감사 드립니다. VS 코드 통합은 당신의 피코에 직접 업로드하는 것을 포함합니다.pico-debug project를 고려할 때 프로그램의 완전한 디버깅 기능을 통합할 수 있습니다.
이 블로그는 Pico 설치 시리즈의 계속으로, VS Studio 코드에 완전히 작동하는 디버거를 설치하는 방법에 대해 자세히 설명합니다.이러한 절차는 최종적으로pico-debug project와wizio-pico의 해석을 바탕으로 하지만 설정이 복잡하기 때문에 저는 총괄적인 블로그 글을 썼다는 것을 기억하세요.간단한 부팅 버튼 하나만 누르면 Pico C 프로그램을 디버깅할 수 있습니다.
본문은 최초로 발표되었다my blog.
도구 개요
우리가 완전히 통합된 디버깅 해결 방안을 달성하기 전에, 우리가 힘든 일을 완성할 수 있는 도구를 이해하는 것이 매우 중요하다.
JTAG standard는 집적회로를 어떻게 디버깅하는지 설명했다.이 표준은 회로에 접근하는 레지스터와 버스 시스템의 통신 프로토콜을 정의한다.직렬 포트와 같이 회로에 액세스하는 전기 인터페이스도 설명합니다.SWD(직렬선 디버깅) 프로토콜은 전용 포트를 사용할 필요가 없고 두 개의 트랙만 사용하면 ARM칩과 인터페이스 디버깅을 할 수 있다.이 표준은 도구OpenOCD에서 사용하며, 이 도구는 필름 디버거의 알파벳 줄임말이다.그것은 JTAG 표준을 사용하여 집적 회로를 만드는 디버깅 세션입니다.마지막으로 GNU Project Debugger GDB는 디버깅 프로그램의 소스 오픈 도구로 C, C++ 등을 지원합니다.GDB는 디버깅을 시작하기 위해 OpenOCD 세션에 연결할 수 있습니다.GDB 자체는 최종적으로 CLI 응용 프로그램으로 프로그램을 불러오고 인터럽트와 변수를 설정하는 전용 언어를 제공한다.현대 IDE는 GDB와 인터페이스를 연결하고 강력한 시각적 디버깅 체험을 제공할 것이다.
이 도구를 사용하려면 ARM 코드, GDB, OpenOCD를 만드는 컴파일러를 설정해야 합니다.우리 시작합시다!
컴파일러 & GDB
ARM 코드를 생성할 수 있는 교차 컴파일러
gcc-arm-none-eabi
를 설치해야 합니다.이 컴파일러와 기타 필요한 도구를 설치하려면 아래 명령을 실행하십시오.$> sudo apt update
$> sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
도구가 올바르게 설치되었는지 테스트합니다.$> arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-none-eabi/9.2.1/lto-wrapper
Target: arm-none-eabi
GDB를 설치하는 방법:apt install gdb-multiarch
또한 제대로 설치되었는지 테스트해야 합니다.$> db-multiarch -v
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
OpenOCD
pico-debug project의 설명에 따라 복분자 피코를 지원하는 특수 버전의 OCD를 설치할 것입니다.
우선 일반적인 Linux 패키지를 설치합니다...
$> sudo apt install automake autoconf texinfo libtool libhidapi-dev libusb-1.0-0-dev
...그리고 Git 메모리 라이브러리를 복제해서 맞춤형 OCD 버전을 컴파일하고 만들 것입니다.$> git clone https://github.com/majbthrd/openocd.git --recursive --branch rp2040_cmsisdap_demo --depth=1
$ cd openocd
$ ./bootstrap
$ ./configure --enable-cmsis-dap
$ make -j4
$ sudo make install
설치 성공 여부를 다시 테스트했습니다.$> openocd -h
Open On-Chip Debugger 0.10.0+dev-gb4af1af-dirty (2021-03-21-10:40)
Licensed under GNU GPL v2
Pico 준비
도구 체인의 설치와 테스트에 따라 Pico 자체를 계속 준비할 수 있습니다.마찬가지로 두 가지 임무를 완성해야 한다.
디버그 UF2 이미지 설치
먼저 https://github.com/majbthrd/pico-debug/releases에서 최신 UF2 이미지를 캡처한 다음 파일을 대용량 스토리지 모드에 설치된 Pico로 드래그합니다.이것은 복분자 Pico를 CMSIS-DAP 장치로 안내합니다.이 알파벳 줄임말은 Cortex 마이크로컨트롤러 소프트웨어 인터페이스 표준인 디버깅 액세스 포트를 대표하는데 이것은 프로토콜 규범일 뿐만 아니라 구체적인 하드웨어이기도 하다.기술적으로는 Picos의 직렬선 디버깅 인터페이스를 포장하고 USB 아날로그 디버깅을 통해 포트(DAP)에 접근한다.이 표준화된 인터페이스는 디버거를 실행하는 연결 호스트에서 사용할 수 있다.
그림 처리가 정확한지 봅시다.
dmesg
를 실행하면 다음과 같은 출력이 표시됩니다.[50852.541543] usb 1-2: new full-speed USB device number 70 using xhci_hcd
[50852.690691] usb 1-2: New USB device found, idVendor=1209, idProduct=2488, bcdDevice=10.02
[50852.690696] usb 1-2: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[50852.690698] usb 1-2: Product: CMSIS-DAP
피코 준비 다 됐습니다.현재, 우리는 디버깅을 위해 프로그램을 컴파일합니다.컴파일 대상 프로그램
내가 이 글을 쓰기 시작했을 때, 나는 네가 플랫폼에서 작은 변화를 하기만을 바란다.ini 파일, 디버깅 가능한 버전의 프로그램을 컴파일하고 가지고 있습니다.그러나 상황은 그렇지 않다.Pico 하나만 사용하여 디버깅을 하려면 특수 SDK를 사용하여 프로그램을 컴파일해야 합니다.이 SDK는 USB 시스템 초기화의 일부 문제를 해결했습니다. 그렇지 않으면 디버깅을 방해할 수 있습니다.자세한 내용은 github thread를 참조하십시오.
더 좋은 해결 방안을 찾기 전에, 우리는 특수한 CMake 컴파일 파일을 추가해야 한다.
이제 최종 카탈로그 레이아웃을 살펴보겠습니다.
.
├── debug
│ ├── build
│ ├── CMakeLists.txt
│ ├── pico-debug.uf2
│ ├── pico_sdk_import.cmake
│ └── src -> /home/work/development/pico2/src/
├── include
│ ├── pico
│ │ └── config_autogen.h
│ └── README
├── lib
│ └── README
├── LICENSE.txt
├── platformio.ini
├── README.md
├── src
│ ├── CMakeLists.txt
│ └── main.c
└── test
└── README
구체적인 단계는 다음과 같습니다.build
및 debug
debug
에서 특수한 uf2 파일을 복사하고 src
디렉터리debug
에 이 CMakeLists.txt
파일을 넣으세요.cmake_minimum_required(VERSION 3.12)
# Pull in SDK (must be before project)
include(pico_sdk_import.cmake)
project(pico_examples C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(PICO_EXAMPLES_PATH ${pwd})
# Initialize the SDK
pico_sdk_init()
add_subdirectory(src)
src/
폴더에 이 CMakeLists.txt
파일을 추가합니다.add_executable(main
main.c
)
# Pull in our pico_stdlib which pulls in commonly used features
target_link_libraries(main pico_stdlib)
# create map/bin/hex file etc.
pico_add_extra_outputs(main)
이제 우리는 프로그램을 컴파일할 수 있다.PICO_SDK_PATH
를 특수 SDK로 설정export PICO_SDK_PATH=/home/work/development/pico-debug-sdk/
cmake -DCMAKE_BUILD_TYPE=Debug -g0 ..
컴파일 프로세스가 시작되고 다음과 같은 출력이 표시되어야 합니다.Using PICO_SDK_PATH from environment ('/home/work/development/pico-debug-sdk/')
PICO_SDK_PATH is /home/work/development/pico-debug-sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
PICO compiler is pico_arm_gcc
PICO_GCC_TRIPLE defaulted to arm-none-eabi
-- The C compiler identification is GNU 9.2.1
-- The CXX compiler identification is GNU 9.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
Using regular optimized debug build (set PICO_DEOPTIMIZED_DEBUG=1 to de-optimize)
Defaulting PICO target board to pico since not specified.
Using board configuration from /home/work/development/pico-debug-sdk/src/boards/include/boards/pico.h
-- Found Python3: /usr/bin/python3.8 (found version "3.8.5") found components: Interpreter
TinyUSB available at /home/work/development/pico-debug-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; adding USB support.
Compiling TinyUSB with CFG_TUSB_DEBUG=1
-- Found Doxygen: /usr/bin/doxygen (found version "1.8.17") found components: doxygen dot
ELF2UF2 will need to be built
-- Configuring done
-- Generating done
-- Build files have been written to: /home/work/development/pico2/debug/build
debug/build
- 이 디렉토리로 전환하고 실행build
cd src/
make
다음 출력이 표시되어야 합니다.Scanning dependencies of target ELF2UF2Build
[ 1%] Creating directories for 'ELF2UF2Build'
[ 3%] No download step for 'ELF2UF2Build'
[ 5%] No patch step for 'ELF2UF2Build'
[ 6%] No update step for 'ELF2UF2Build'
[ 8%] Performing configure step for 'ELF2UF2Build'
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
...
-- Build files have been written to: /home/work/development/pico2/debug/build/elf2uf2
[ 10%] Performing build step for 'ELF2UF2Build'
Scanning dependencies of target elf2uf2
[ 50%] Building CXX object CMakeFiles/elf2uf2.dir/main.cpp.o
[100%] Linking CXX executable elf2uf2
[100%] Built target elf2uf2
[ 11%] No install step for 'ELF2UF2Build'
[ 13%] Completed 'ELF2UF2Build'
[ 13%] Built target ELF2UF2Build
Scanning dependencies of target bs2_default
[ 15%] Building ASM object pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/boot2_w25q080.S.obj
[ 16%] Linking ASM executable bs2_default.elf
...
[100%] Linking CXX executable main.elf
[100%] Built target main
완성!이제 프로그램이 디버깅 가능한 버전으로 연결되어 있는 Pico에서 실행됩니다.CLI에서 디버깅
우리는 이미 공구 체인을 설치했다.우리는 이미 피코를 준비했다.이제 우리는 디버깅 과정을 시작할 수 있다.이 섹션에서는 CLI 도구를 직접 사용합니다.다음 섹션에서는 이러한 도구를 VisualStudio 코드에 통합합니다.
OpenOCD: 일반 사용자로 실행
일반 사용자로 OpenOCD를 실행하기 위해서는 OpenOCD 시작 파일을 만들고 일반 사용자를 특수 그룹에 추가해야 합니다.이 절차의 참고 자료는 다음과 같다stackexchange post.
파일
src
을 만들고 다음을 추가합니다.ACTION!="add|change", GOTO="openocd_rules_end"
SUBSYSTEM!="usb|tty|hidraw", GOTO="openocd_rules_end"
ATTRS{product}=="*CMSIS-DAP*", MODE="664" GROUP="plugdev"
LABEL="openocd_rules_end"
그런 다음 새 Linux 그룹을 만들고 개별 사용자를 그룹에 추가합니다.$> sudo groupadd plugedev
$> sudo gpasswd -a devcon plugdev
$> sudo udevadm control --reload
예전처럼 이걸 테스트해 봅시다.사용자가 새로 만든 그룹의 구성원인지 확인합니다.$> groups
devcon adm dialout cdrom sudo dip plugdev lpadmin lxd sambashare
OpenOCD 시작
이제 OpenOCD 서버를 수동으로 시작합니다.동일한 디렉토리를 구성하는 동안 다음 명령을 실행합니다.
$> cd openocd/tcl
$> openocd -f interface/cmsis-dap.cfg -f target/rp2040-core0.cfg -c "transport select swd" -c "adapter speed 4000"
이 명령이 무엇을 의미하는지 나처럼 궁금하다면:make
로고는 설정 파일의 로드를 지시합니다. 여기에 디버깅 액세스 포트(DAP) 설정과 피카(RP2040) 설정/etc/udev/rules.d/98-openocd.rules
표지판은 운행하는 다른 명령을 지시한다. 우리는 직렬선을 통해 연결을 디버깅하고 호스트와 Pico 간의 연결 속도(kHz 단위)를 설정할 것이다.Open On-Chip Debugger 0.10.0+dev-gb4af1af-dirty (2021-03-21-10:40)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
swd
adapter speed: 4000 kHz
Info : Hardware thread awareness created
Info : RP2040 Flash Bank Command
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD Supported
Info : CMSIS-DAP: FW Version = 2.0.0
Info : CMSIS-DAP: Interface Initialized (SWD)
Info : SWCLK/TCK = 0 SWDIO/TMS = 0 TDI = 0 TDO = 0 nTRST = 0 nRESET = 0
Info : CMSIS-DAP: Interface ready
Info : clock speed 4000 kHz
Info : SWD DPIDR 0x0bc12477
Info : SWD DLPIDR 0x00000001
Info : rp2040.core0: hardware has 4 breakpoints, 2 watchpoints
Info : starting gdb server for rp2040.core0 on 3333
Info : Listening on port 3333 for gdb connections
두 번째 터미널 창을 열고 Pico 프로젝트를 컴파일하는 디렉토리로 이동합니다.그런 다음 GDB 세션을 시작합니다.$> cd debug/build/src
$> gdb-multiarch main.elf
다음 출력이 표시되어야 합니다.gdb-multiarch main.elf
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from src/main.elf...
GDB 세션이 열리면 디버깅을 수행하기 위해 명령을 실행할 수 있습니다.GDB는 콘솔 기반의 간단한 디버그 세션을 구동하는 주요 명령을 중점적으로 소개하는 정교한 언어를 가지고 있다.(gdb) target remote localhost:3333
Remote debugging using localhost:3333
main () at /home/work/development/pico2/debug/src/main.c:37
37 int main() {
(gdb) load
Loading section .boot2, size 0x100 lma 0x10000000
Loading section .text, size 0x4b10 lma 0x10000100
Loading section .rodata, size 0xd84 lma 0x10004c10
Loading section .binary_info, size 0x20 lma 0x10005994
Loading section .data, size 0xa04 lma 0x100059b4
Start address 0x100001e8, load size 25528
Transfer rate: 8 KB/sec, 4254 bytes/write.
(gdb) monitor reset init
target halted due to debug-request, current mode: Thread
xPSR: 0xf1000000 pc: 0x000000ee msp: 0x20041f00
(gdb) b main
Breakpoint 1 at 0x100003d8: file /home/work/development/pico2/debug/src/main.c, line 37.
(gdb) c
Continuing.
Note: automatically using hardware breakpoints for read-only addresses.
Breakpoint 1, main () at /home/work/development/pico2/debug/src/main.c:37
37 int main() {
(gdb) n
38 setup();
(gdb) n
40 printf("Hello World\n");
(gdb) n
43 printf(".");
(gdb) n
44 blink();
(gdb) n
42 while (true) {
(gdb) p LED_GREEN
$1 = 15
(gdb)
만약 당신이 이미 이 점을 해냈다면, 몇 걸음만 더 가면 IDE로 디버깅을 할 수 있습니다.추가 VsCode 확장 설치
C/C++ Extension Pack (by Microsoft)
Cortex-Debug (by marus25)
CMake Tools (by Microsoft)
파일-f
을 만들고 다음을 입력합니다.{
"version": "0.2.0",
"configurations": [
{
"name": "Pico Debug",
"device": "RP2040",
"gdbPath": "gdb-multiarch",
"cwd": "${workspaceRoot}",
"executable": "${workspaceRoot}/debug/build/src/main.elf",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"configFiles": ["interface/cmsis-dap.cfg", "target/rp2040-core0.cfg"],
"openOCDLaunchCommands": ["transport select swd", "adapter speed 4000"],
"svdFile": "${env:PICO_SDK_PATH}/src/rp2040/hardware_regs/rp2040.svd",
"searchDir": ["/home/work/development/openocd/tcl"],
"runToMain": true,
"postRestartCommands": ["break main", "continue"]
}
]
}
중요한 변경 사항은 다음과 같습니다.-c
: 디버깅이 완료된 컴파일러 파일을 가리켜야 합니다.vscode/launch.json
: SVD는 마이크로 컨트롤러의 세부 사항을 포함하는 파일 형식으로 Openocd는 이 파일을 사용하여 하드웨어와 관련된 디버깅 정보를 제공한다.executable
: OpenOCD 설치 tcl 경로로 구성svdFile
를 클릭하면 몇 초 후에 다음 창이 표시됩니다.IDE의 모든 편의가 있으니 이제 디버깅을 할 수 있습니다.
결론
이 블로그는 몇 가지 측면에서 더 많은 시간을 들였다. 그것은 글을 쓰는 시간, 모든 옵션을 테스트하는 시간, 그리고 이 글의 길이였다.모든 설정이 완료되면 통합된 IDE에서 Pico 프로그램을 작성하여 코드 하이라이트 디스플레이, 라이브러리 함수 탐색, 재구성 옵션의 모든 편의를 누릴 수 있습니다.또한 원클릭 업로드 기능을 사용하면 아두노처럼 프로그래밍을 할 수 있다.또한 프로그램의 디버그 버전을 컴파일하고 Visual Studio 코드에서 디버거를 실행할 수 있습니다.이것은 당신의 개발 효율을 크게 높일 것입니다.
향후 프로젝트를 시작하는 데 도움이 되려면 내 pico-project-setup repo on Github를 참조하십시오.
Reference
이 문제에 관하여(Raspberry Pico: 단일 장치로 간단한 디버깅 수행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/admantium/raspberry-pico-simple-debugging-with-just-one-device-4ce7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)