使用 Eclipse 单步调试 Zephyr 程序
调试环境:Ubuntu+Qemu+Eclipse
目录
- 安装 eclipse CDT
- 创建工程
- 编译
- 调试
- 说明
安装 eclipse CDT
安装 jdk/jre
- sudo apt-get install default-jdk
从 官网 下载 eclipse 安装器
- wget http://mirror.rise.ph/eclipse/oomph/epp/neon/R2a/eclipse-inst-linux64.tar.gz
- tar xf eclipse-inst-linux64.tar.gz
- cd eclipse-installer/
- ./eclipse-inst
然后等待安装完成即可。
建立工程
进入你的eclipse安装目录,默认是 ~/eclipse/cpp-neon/eclipse,然后启动 eclipse:
- cd ~/eclipse/cpp-neon/eclipse
- ./eclipse &
关闭欢迎界面
然后在新弹出的界面上点击 Browse 按钮选择 zephyr 源码所在目录,并填好 Project Name,然后点击 Finish。
编译
对于每个不同的应用程序,我们都需要创建它自己的target,这里以 hello-world 例程为例。
找到 Build Target 栏(如果没有,在菜单栏依次选择 Window->Show View->Build Target)。可以看到,它是一个目录结构, 选择我们要创建的应用程序 hello-world 所在目录,然后右键,选择 New,在新弹出的对话框填上如下内容:
- Target name: 这个可以随便写,只是我们自己看的。
- Build Target: BOARD=qemu_x86 qemu(把括号的勾去掉)
- Build Command: make
然后点击 ok 按钮,此时会发现 Build Target 栏里面多了一项 test(即我们刚刚输入的 target name)。
然后我们可以双击该 test 目标进行编译。但是编译时可能会发现如下错误:
一眼就能看出来这是没有在zephyr的根目录下执行source操作。这个问题有两种解决办法:
- 关eclipse,在终端里先执行 source 操作,再在该终端里启动 eclipse 【推荐】
-
将 source 命令放到你的环境变量所在文件中去
但是还有一个坑,我们注意上图中右下角的两个地方,编译进度始终卡在那儿动,这是因为我们在编译时启动了qemu进行仿真,而系统运行结束后在等待我们输入 "ctrl+a, x" 来终止qemu。但是事实上,我们没办法在eclipse的控制台上面输入 "ctrl+a, x",所以我们需要强行终止编译过程。先点击右下角的小方块,然后在新弹出的界面中点击进度条右边的图标,结束编译过程。
配置调试环境
依次在菜单栏中选择 run->debug configuration,然后在弹出的界面中,双击 C/C++ remote Application 新建一个调试项目,并将其命名为 hello-world,然后再选择下面的 Select Other,在新弹出的界面中选择 Manual 这一项,然后保存。
开始调试
理论上,我们现在就可以直接在eclipse里面编译,然后进行 debug 了,但是由于 eclipse 是单任务的,必须等编译完成后才能进行下一个任务(调试),而编译时会卡在qemu上面,由此造成了死锁,所以我们不得不绕一个弯。我们先直接在终端中执行命令:
- make OARD=qemu_x86 debugserver
理论上,直接用开发板也可以进行调试,参考: https://www.zephyrproject.org/doc/boards/x86/arduino_101/doc/board.html中的 Debugging 一小节。
调试启动时默认是停留在 main 函数里面,但是你也可以修改调试配置,让它停留在内核的其它地方。