不废话 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
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 项目即可