使用 Eclipse 单步调试 Zephyr 程序

时间:2022-01-13 03:34:51
使用 Eclipse 单步调试 Zephyr 程序

调试环境:Ubuntu+Qemu+Eclipse

目录
  • 安装 eclipse CDT
  • 创建工程
  • 编译
  • 调试
  • 说明

安装 eclipse CDT

安装 jdk/jre
  1. sudo apt-get install default-jdk

复制代码
安装 eclipse cdt
官网 下载 eclipse 安装器
  1. wget http://mirror.rise.ph/eclipse/oomph/epp/neon/R2a/eclipse-inst-linux64.tar.gz
复制代码
解压并执行安装文件 eclipse-inst
  1. tar xf eclipse-inst-linux64.tar.gz
  2. cd eclipse-installer/
  3. ./eclipse-inst

复制代码
在安装界面中选择 Eclipse IDE for C/C++ Developers,然后在新弹出的安装界面设置安装路劲,并安装。
使用 Eclipse 单步调试 Zephyr 程序

使用 Eclipse 单步调试 Zephyr 程序

然后等待安装完成即可。

建立工程
进入你的eclipse安装目录,默认是 ~/eclipse/cpp-neon/eclipse,然后启动 eclipse:
  1. cd ~/eclipse/cpp-neon/eclipse
  2. ./eclipse &

复制代码
选择工作空间
使用 Eclipse 单步调试 Zephyr 程序

关闭欢迎界面
使用 Eclipse 单步调试 Zephyr 程序
在菜单栏依次选择 File->New->Makefile Project with Existing Code(Ubuntu 有菜单活动时无法截图,所以就未截图了)。
然后在新弹出的界面上点击 Browse 按钮选择 zephyr 源码所在目录,并填好 Project Name,然后点击 Finish。
使用 Eclipse 单步调试 Zephyr 程序
然后工程就创建好了。
使用 Eclipse 单步调试 Zephyr 程序


编译

对于每个不同的应用程序,我们都需要创建它自己的target,这里以 hello-world 例程为例。

找到 Build Target 栏(如果没有,在菜单栏依次选择 Window->Show View->Build Target)。可以看到,它是一个目录结构, 选择我们要创建的应用程序 hello-world 所在目录,然后右键,选择 New,在新弹出的对话框填上如下内容:
使用 Eclipse 单步调试 Zephyr 程序
  • Target name: 这个可以随便写,只是我们自己看的。
  • Build Target: BOARD=qemu_x86 qemu(把括号的勾去掉)
  • Build Command: make
请注意我上面加红加粗的地方,它们三个所表示的意思是在samples/hello_world 目录下面执行命令 make BOARD=qemu_x86 qemu.



然后点击 ok 按钮,此时会发现 Build Target 栏里面多了一项 test(即我们刚刚输入的 target name)。


使用 Eclipse 单步调试 Zephyr 程序



然后我们可以双击该 test 目标进行编译。但是编译时可能会发现如下错误:
使用 Eclipse 单步调试 Zephyr 程序

一眼就能看出来这是没有在zephyr的根目录下执行source操作。这个问题有两种解决办法:
  • 关eclipse,在终端里先执行 source 操作,再在该终端里启动 eclipse 【推荐】
  • 将 source 命令放到你的环境变量所在文件中去
然后,我们再点击该按钮,终于可以编译了:
使用 Eclipse 单步调试 Zephyr 程序

但是还有一个坑,我们注意上图中右下角的两个地方,编译进度始终卡在那儿动,这是因为我们在编译时启动了qemu进行仿真,而系统运行结束后在等待我们输入 "ctrl+a, x" 来终止qemu。但是事实上,我们没办法在eclipse的控制台上面输入 "ctrl+a, x",所以我们需要强行终止编译过程。先点击右下角的小方块,然后在新弹出的界面中点击进度条右边的图标,结束编译过程。
使用 Eclipse 单步调试 Zephyr 程序
调试
配置调试环境
依次在菜单栏中选择 run->debug configuration,然后在弹出的界面中,双击 C/C++ remote Application 新建一个调试项目,并将其命名为 hello-world,然后再选择下面的 Select Other,在新弹出的界面中选择 Manual 这一项,然后保存。
使用 Eclipse 单步调试 Zephyr 程序
然后按下图所示进行填充。
使用 Eclipse 单步调试 Zephyr 程序
使用 Eclipse 单步调试 Zephyr 程序
然后点击 apply 按钮保存(close和debug两个按钮先不要动)。

开始调试

理论上,我们现在就可以直接在eclipse里面编译,然后进行 debug 了,但是由于 eclipse 是单任务的,必须等编译完成后才能进行下一个任务(调试),而编译时会卡在qemu上面,由此造成了死锁,所以我们不得不绕一个弯。我们先直接在终端中执行命令:
  1. make OARD=qemu_x86 debugserver
复制代码
然后再在eclipse里面点击调试按钮进行调试。在弹出的对话框中选择 Proceed 和 Yes 按钮。然后,终于可以了:
使用 Eclipse 单步调试 Zephyr 程序
说明

理论上,直接用开发板也可以进行调试,参考: https://www.zephyrproject.org/doc/boards/x86/arduino_101/doc/board.html中的 Debugging 一小节。

调试启动时默认是停留在 main 函数里面,但是你也可以修改调试配置,让它停留在内核的其它地方。