版本说明
1. 自驾仪:Holybro的Pixhawk 4
2. PX4版本:1.12
3. 宿主机:Thinkpad笔记本+Ubuntu 20.04.2 LTS
4. Eclipse:2022-03
5. Eclipse Embeded CDT:6.1.2
6. J-Link软件:V760
7. J-Link硬件:J-Link EDU mini。可在淘宝上购买,170元左右,买到的东西如下图:
一. 硬件接口连接部分
1.1 J-Link EDU mini接口和Pixhawk 4 Debug口的定义
参考px4官网:
SWD (JTAG) Hardware Debugging Interface | PX4 User Guide
1.1.1 J-Link EDU mini的10针接口定义
1.1.2 J-Link EDU mini与SWD连接示意
SWD是ARM定义的一种调试接口,Serial Wire Debug (SWD)
1.1.3 Pixhawk 4对FMU Debug接口和IO Debug接口的定义
PIXHAWK 4有两个Debug Port,一个是FMU Debug Port,另一个是IO Debug Port。两个口都提供了Pixhawk 标准6-Pin SH Debug Port。(6针)
1.2 Pixhawk 4的FMU Debug Port与J-Link EDU mini口连接
连线顺序描述:
参考官网:
SWD (JTAG) Hardware Debugging Interface | PX4 User Guide
对照上述1,J-Link EDU mini 10针口定义和PIXHAWK 4 FMU Debug口6针的连接如下:
FMU Debug Port | J-Link EDU mini |
---|---|
1 Vtref | 1 |
2 TX | - |
3 NC | - |
4 SWDIO | 2 |
5 SWDCLK | 4 |
6 GND | 3 或者 5 |
电缆描述:
J-Link到Pixhawk
Pixhawk 4的Debug port具有6针插座如下图:
需要采用6针电缆与之相连,Pixhawk 4线材包中有这根线,可以做两个,一个用在FMU debug口,另一个用在IO Debug口。另外也可以从得捷购买,网址:得捷电子
一头接Pixhawk,另一头需要接J-Link
J-Link端的10针插座如下:
接出的排线由J-Link厂家提供。需要将J-Link EDU mini接出的10 Pin排线按上述线序与Pixhawk 4提供的6针电缆焊接起来(只需要连接4根线),由于间距很小,所以焊接是个细活。 焊接完的样子如图,焊点用绿色电工胶布包起来了。
二. 软件部分
这里仅仅是利用Eclipse对PX4的源码进行调试,不做Eclipse环境下的编译工作,编译工作手动在命令行完成。
2.1安装SEGGER JLink软件
打开如下网页
SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace
在Linux选项中选择下载64-bit DEB Installer软件包,软件包将下载到Downloads目录中,
下载的文件名如下为Link_Linux_V760h_x86_64.deb,安装这个.deb软件包:
sudo dpkg -i ~/Downloads/Jlink_Linux_V760h_x86_64.deb
执行此命令后,SEGGER JLink软件包中的内容将存放在/usr/bin目录中,其中包括JLinkGDBServerCLExe软件,后面配置Eclipse时要用到。
2.2 安装具有Embeded CDT的Eclipse
旧的嵌入式Eclipse叫MCU Eclipse,有时也叫GNU MCU/ARM Eclipse,现在已经彻底把Eclipse Embeded CDT(CDT = C/C++ Development Tool )做好了,作为插件可以安装到任何Eclipse版本中。
下载最新的Eclipse IDE,然后用install new software安装Embeded CDT,如果已经有Embeded CDT了,可省略这一步。可在About Eclipse IDE中检查是否有Embeded CDT,见下图:
2.3在Eclipse中为PX4-Autopilot建立一个项目
File->Import->C/C++/Existing Code with Makefile Project,为这个项目起个名字,并将代码路径(Existing Code Location)指向PX4-Autopilot目录。
在Toolchain for Indexer Settings对话框中选择:Arm Cross GCC。
然后点击Finish,Eclipse就建立了一个源码指向PX4-Autopilot的项目。
2.4 安装CMSIS PACKs
CMSIS PACKs是一组压缩文件,每一个CMSIS Pack压缩文件中包含有很多文件,这些文件被用来支持各种工具使用某种CPU。Eclipse具备安装CMSIS PACK的方法,一旦安装好,你就可以将一个项目与一种CPU关联起来,CMSIS PACK索引数据将被Eclipse缺省保存在/home/xxx/.local/cmsis-packs目录中,也可以指定它的存储位置,在这里:Window/Preference/C/C++/MCU Packages。
首次安装CMSIS PACKS的方法,如下:
参见:The CMSIS Packs manager | Eclipse Embedded CDT (C/C++ Development Tools)™
点击CMSIS Pack棕色按钮或者菜单Window(窗口)下选择Perspective(视图),选择CMSIS Packs视图,然后点击黄色的update按钮。如果不是首次安装,在选择CMSIS Pack视图后,再选择Window/New Window,就打开了一个具有update按钮的视图。
点击update按钮后,Eclipse会出现更新进度对话框,你会遇到异常,在异常提示对话框中你应该选择ignore all选项,这样更新进度对话框会一直执行下去,直至所有芯片的CMSIS pack的索引数据安装完毕。
这个过程,网上说需要10-20分钟,我的经验是3个小时以上,需要耐心等待。当然一旦首次更新完成后,下次再点击update按钮,更新的速度相对来说就会快一些,因为update是一种增量更新。
可以在Keil文件夹中找到 STM32Fxx设备,然后鼠标右键选择Install,安装F7设备。
2.5 为PX4-Autopilot项目做Debug配置
2.5.1. 配置GDB Server的路径
配置PX4-Autopilot项目使用的SEGGER J-Link的GDB Server存放路径,也就是JLinkGDBServerCLExe的存放路径。
方法:鼠标右键点击PX4-Autopilot项目,在对话框中选择Properties, 然后选择SEGGER J-Link Path,在Executable中填写:JLinkGDBServerCLExe,在Path中填写:/usr/bin,然后Apply and Close这个对话框。
2.6.2 配置项目使用的CPU
鼠标右键点击PX4-Autopilot项目,在对话框中选择Properties, 在C/C++ Build/Settings对话框中,选择“Devices”,然后在“Device Selection”中选择你的Pixhawk FMU采用的CPU型号。然后Close and Apply。如下图:
2.6.3 配置Debug
在Eclipse中进入Debug Configuration,双击GDB SEGGER J-Link Debugging,这样就建立了一个Jlink调试配置页。这是SEGGER公司为在Eclipse下进行Jlink调试定制的一个Eclipse pluggin,其中大部分参数已经填好了,你只需要填几个特定的参数。
Debug Configuration对话框的配置内容出现在Main和Debugger页中,其他可不用管。
-
在Main页中,需要指定项目在宿主机上的elf文件的名字以及路径(我的elf文件是px4_fmu-v5_default.elf),调试时使用的源程序符号表存放在宿主机的elf文件中。因为已经在命令行build好了,所以这里选择Disable Auto Build。
-
在Debugger页,在JLinkGDBSever栏目下大部分都填好了。注意几个数据就可以了。
-
Actual Executable:/usr/bin/JLinkGDBServerCLExe
-
Device name:STM32F765II(这是PIXHAW 4的FMU使用的芯片)
-
Interface:选择SWD(这是JLink EDU mini的接口)
-
Initial Speed:选择自动或者固定速率400Hz
-
GDB port:2331
-
-
在GDB Client Setup栏目中,Executable name要填上/opt/gcc-arm-none-eabi-9-2020-q2-update/bin/arm-none-eabi-gdb,这一项是填写arm工具链的gdb程序安装的地方。arm工具链需要自己安装。
-
在Startup页,将SWO的选择去掉。
-
其他数据不用管。
所有配置就完成了,连接好硬件,可以按下Debug按钮进行源码调试,如果没设任何断点,程序将会停止在源文件platforms/common/include/px4_platform_common/module.h的static int main(int argc, char *argv[])函数下,然而这个断点不一定是你想要的,去掉或修改它,在Startup的Run/Restart栏目中的Set Breakpoint设置。调试界面如下图: