首页 > 其他分享 >win10 openocd通过vscode远程调试stm32的uboot--Apple的学习笔记

win10 openocd通过vscode远程调试stm32的uboot--Apple的学习笔记

时间:2023-10-29 13:32:21浏览次数:57  
标签:openocd uboot Apple vscode section stlink gdb size

一,前言

我在uboot支持的cortex-M4内核启动流程分析--Apple的学习笔记中就说过了,我计划要单步调试uboot,但是我只有stlink,所以要基于openocd的gdb来调试,所以就做了尝试,花费约2天时间,虽然做了些无用功,专门还装了ubuntu18.04,且基于ubuntu还安装了openocd这些其实都无用的,但是就是这些过程, 让我了解了openocd这些命令的使用方法,最终我才能在win10上安装openocde,然后通过win10的vscode通过ssh连接ubuntu进行gdb单步调试环境搭建成功。

二,win10 openocd搭配ubuntu中的vscode调试

1,stlink连接开发板,且插入stlink。

2,打开一个cmd输入命令,然后可以看到正常识别到stlink,且等待gdb的3333端口。

openocd -f D:\program\OpenOCD-20231002-0.12.0\share\openocd\scripts\interface\stlink-v2.cfg -f D:\program\OpenOCD-20231002-0.12.0\share\openocd\scripts\target\stm32f4x.cfg -c "bindto 0.0.0.0"

3,用ubuntu本地的vscode来单步调试,作为gdb的客户端。launch.json设置如下

{
    "version":"0.2.0",
    "configurations":[
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "/work/STM32/LED.elf",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/work/tools/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-gdb",
            "miDebuggerServerAddress":"192.168.112.10:3333",
            /*"preLaunchTask":"build",*/
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }

    ]
}

通过本地vscode用-exec为前缀的gdb命令都是可行的。 注意,连接openocd后,先要暂停,否则报错如下

-exec load u-boot
Unable to perform this action because the process is running.

正常的调试信息如下

-exec load /work/STM32/LED.elf
Loading section .isr_vector, size 0x188 lma 0x8000000
1045+download,{section=".isr_vector",section-size="392",total-size="55434"}
1045+download,{section=".isr_vector",section-sent="392",section-size="392",total-sent="392",total-size="55434"}
Loading section .text, size 0xf1c lma 0x8000188
1045+download,{section=".text",section-size="3868",total-size="55434"}
Loading section .rodata, size 0x10 lma 0x80010a4
1045+download,{section=".rodata",section-size="16",total-size="55434"}
Loading section .ARM, size 0x8 lma 0x80010b4
1045+download,{section=".ARM",section-size="8",total-size="55434"}
Loading section .init_array, size 0x4 lma 0x80010bc
1045+download,{section=".init_array",section-size="4",total-size="55434"}
Loading section .fini_array, size 0x4 lma 0x80010c0
1045+download,{section=".fini_array",section-size="4",total-size="55434"}
Loading section .data, size 0x54 lma 0x80010c4
1045+download,{section=".data",section-size="84",total-size="55434"}
Loading section .mysec, size 0x4 lma 0x8001118
1045+download,{section=".mysec",section-size="4",total-size="55434"}
Start address 0x8000fc4, load size 4380
Transfer rate: 6 KB/sec, 547 bytes/write.
-exec b main
Note: breakpoints 1 and 2 also set at pc 0x80005e6.
Breakpoint 3 at 0x80005e6: file Src/Core/Src/main.c, line 77.
c
Cannot evaluate expression on the specified stack frame.

Breakpoint 1, main () at Src/Core/Src/main.c:77
halted: PC: 0x08000f44

Program received signal SIGINT, Interrupt.
0x08000f92 in HAL_GetTick () at Src/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:325
Kill the program being debugged? (y or n) [answered Y; input not from terminal]
[Inferior 1 (Remote target) killed]
The program '/work/STM32/LED.elf' has exited with code 0 (0x00000000).

三,win10 openocd搭配ssh连接的vscode远程调试

只是不清楚用ssh连接的远程vscode为什么不行,理论上本地vsocode可行,远程vscode也可行,我有了如上使用经验,也就是说了解了各种问题解决方案,于是又进行了尝试。

1,win上的操作和之前一样,且先将vscode和ubuntu14.04连接上。 a,stlink连接开发板,且插入stlink b xxx,打开一个cmd输入命令,然后可以看到正常识别到stlink,且等待gdb的3333端口。

openocd -f D:\program\OpenOCD-20231002-0.12.0\share\openocd\scripts\interface\stlink-v2.cfg -f D:\program\OpenOCD-20231002-0.12.0\share\openocd\scripts\target\stm32f4x.cfg -c "bindto 0.0.0.0"

2,vscode中launch脚本为

{
    "version":"0.2.0",
    "configurations":[
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "/work/v9/u-boot-2023.10/stm/u-boot",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/work/tools/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-gdb",
            "miDebuggerServerAddress":"192.168.112.10:3333",
            /*"preLaunchTask":"build",*/
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }

    ]
}

然后vscode中按F5,就连接上了远程openocd的3333,然后要先按暂停,之后laod 全路径才能成功下载u-boot,再reset和halt停止到入口,就可以单步或全速运行,通过界面方式打断点,也可以用-exec b来打断点调试。

-exec load /work/v9/u-boot-2023.10/stm/u-boot
-exec monitor reset halt

win10 openocd通过vscode远程调试stm32的uboot--Apple的学习笔记_openocd远程调试

四,小结

我的uboot单步调试目标终于完成了。因为之前qemu无法调试am335x,所以看到stm32F4居然也有uboot,而我是有此芯片的开发板加stlink-v2调试器的,只是应该需要修改设备树的,否则板子不同。所以我就想到用openocd作为调试器的gdbserver端口,然后vscode通过gdbclient来进行单步调试uboot核心流程,作为进一步深入理解的闭环验证工具链。调试环境搭建完工,不用再printf了,调试速度立马升级,分析代码的难度立马降级,哈哈~

标签:openocd,uboot,Apple,vscode,section,stlink,gdb,size
From: https://blog.51cto.com/AppleCai/8080218

相关文章

  • win10安装openocd进行ubuntu远程gdb调试--Apple的学习笔记
    一,win10版本的openocd+stlink调试环境搭建1,在官网下载openocd的win10版本解压即可,arm-none-eabi的win10版本解压即可,然后添加到环境变量。2,stlink连接开发板,且插入stlink。3,打开一个cmd输入命令,然后可以看到正常识别到stlink,且等待gdb的3333端口。openocd-fD:\program\OpenOCD-2......
  • ubuntu18.04安装openocd服务器独立进行gdb调试--Apple的学习笔记
    一,前言之前win10的openocd由于没添加loadelf导致无法调试,所以我就在ubuntu中也装了openocd环境,这样就不用依靠win10了。ubntu14.04无法编译openocd,所以换成ubuntu18.04安装openocd。二,ubuntu18.04安装openocd及gdb调试1,下载gitclonegit://git.code.sf.net/p/openocd/codeopenoc......
  • uboot中am335x的relocate分析--Apple的学习笔记
    一,前言今天我主要先分析下bbblack的relocate。至于为什么要分析这块内容,因为我个人理解,内存分布也是重要内容,最关键的是这些内容我3年前分析过TQ2440的,但是没分析过bbblack的,所以补上。二,实践先在board_f.c中添加#define_DEBUG1就支持debug函数打印信息了。U-Boot2023.10(Oc......
  • uboot支持的cortex-M4内核启动流程分析--Apple的学习笔记
    一,前言居然看到uboot支持stm32的cortex-M4的内核,所以就编译来看看,直接编译通过了,所以代表着我可以直接在真实的板子上连接jlink单步调试了,先看看上电流程的代码吧~二,编译下载了6.0版本以上的arm-none编译即可通过编译。exportPATH=$PATH:/work/tools/gcc-arm-none-eabi-9-2019-q4-......
  • Applescript实现无痕检测手机号或邮箱号是否注册iMessage服务,iMessage蓝号检测实现
    一、检测数据的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2.编写脚本控制Macos/iphon......
  • usb2.0协议复习--Apple的学习笔记
    一,前言10多年前买过一本圈圈教你usb,然后自己移植了代码到自己焊接的单片机最小系统,当时连原理图都是我自己画的,现在原理图软件已经不知道怎么用了,所以usb协议基本也忘记了。居然配置了usbhost那么简单,这样感觉都没有学习过什么,我还是希望要雁过留痕。所以下载了wiresharkusb抓包......
  • uboot的driver和uclass_driver的区别?
    一,前言之前看到关于设置gpio有多好api,这个c中的api可以,那个c中的api也可以,感觉有些混乱。所以我又细看了下,发现根本原因是我把uclass中的driver和uclass_driver弄乱了。二,分析1.device_bind_common中会创建device,其中name是哪里来的?答:其实就是driver结构体中的name成员值。a)dm_sc......
  • Apple开发_字符串后缀如果包含有数字,提取出字符串后缀全部的数字
    NSString分类@implementationNSString(GC)-(NSString*)suffix_Num{//匹配字符串末尾的数字NSString*pattern=@"\\d+$";NSError*error=nil;NSRegularExpression*regex=[NSRegularExpressionregularExpressionWithPattern:patternoptions......
  • Apple开发_打印一个实例对象中的属性与值,包括在父类中的
    #import<objc/runtime.h>//打印一个实例对象中的属性与值,包括在父类中的-(void)print_Self_Properties{//DEBUG模式下打印日志,当前行#ifdefDEBUGunsignedintcount=0;Classgc_class=[selfclass];GCLog(@"统计开始⌛️")NSMutabl......
  • uboot配置usbhost及代码初步分析--Apple的学习笔记
    一,前言之前uboot没配置过usb,但是现在uboot基于DM模型基本和linuxdriver类似了。那么为了学习linuxdriver,我可以先学习uboot来做技术储备也是一样的。而且usb在uboot上应该也有用武之地,所以有必要进行刻意练习。二,分析1,之前对发现driver用了wraper的方式来打包进行绑定,我理解唯一......