不废话IDE的好处了,如果你做过stm32开发的话就知道一个程序如果能在线调试的话那是多么地美好.特别是像我这样的菜鸟.
通常情况下,芯片SDK里包含的交叉编译器gdb版本低,并且缺失某些功能,或是根本没有提供gdb,这里需要自已编译gdb,如果交叉编译器够新,gdb版本够高则不需要自已编译gdb
交叉编译gdb
主机环境准备
首先下载gdb:http://ftp.gnu.org/gnu/gdb/ 注:不一定要最新版本.像QT5.7要求gdb版本为 7.7
然后需要在主机上安装必要的支持库,特别注意需要 python2.7-dev pythonxx-dev
1 2 |
sudo apt-get install build-essential cmake u-boot-tools uboot-mkimage libusb-1.0-0 libusb-1.0-0-dev git wget fakeroot kernel-package zlib1g-dev libncurses5-dev libc6:i386 lib32stdc++6 lib32z1 python2.7-dev texinfo |
编译 gdb
解压gdb,并进入目录,然后用 ./config来生成makefile文件….肯定得加参数了..
./configure --target=arm-hisiv200-linux --program-prefix=arm-hisiv200-linux- --prefix=$PWD/gdb-build --with-python
./configure --target=aarch64-linux-gnu --program-prefix=aarch64-linux-gnu- --prefix=/work/lib/gdb --with-python=/usr/bin/python3
arm-hisiv200-linux
是目标板的交叉编译器前缀. arm-hisiv200-linux-
是生成文件的前缀,你也可以随便写. --prefix=$PWD/gdb-build
安装目录, --with-python
让gdb支持python, qt以及vscode调试需要这个.
config完成后 make 再 make install,则会在 $PWD/gdb-build
这个目录中生成一些文件,其中 arm-hisiv200-linux-gdb
就是最主要的文件,并且这个文件是在主机里运行的,qt eclipse等就是调用的它.
特别注意:编译好后不要移动程序的路径,不要删除源代码目录,狗日的QT调试时有绝对路径依赖.
编译 gdbserver
进行 gdb/gdbserver目录,再次config
./configure --target=arm-hisiv200-linux --host=arm-hisiv200-linux
自行将arm-hisiv200-linux
换成自已的交叉编译器前缀
make后会生成 gdbserver 可执行文件, 这个文件在目标板上运行. 我一般是把这个文件拷贝到需要调试的程序那个目录.
在目标板上运行gdbserver
编译好gdbserver后,我们把gdbserver拷贝到需要调试的程序相同目录.然后运行 ./gdbserver :1234 testprogram
其中 :1234
表示gdbserver端口为1234,testprogram
为被调试的程序.接下来就可以通过qt eclipse等链接过来进行远程debug了.
QT Creator配置
在构建和运行
选项里新环境就不多说了,只要注意debuggers
里新增的gdb得是新编译出来的那个gdb.
当程序通过编译后, 选择调试
->开始调试
->attach to Running Debug server
.其中 服务器端口即gdbserver的端口,Override server address
为目标板的IP,本地可执行档则是被调试的程序.其他可以不填,然后点击OK,不出意外的话就可以进行调试了.
eclipse 配置
CMAKE 转为 eclipse调试
在cmake工程中新建个目录 比如 cdt ,然后进入此目录,运行:cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ../
之后在eclipse中导入 maekfile项目即可