使用 Eclipse 單步調試 Zephyr 程序

使用 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安裝目錄,默認是 ~/eclipse/cpp-neon/eclipse,然後啓動 eclipse:
  1. cd ~/eclipse/cpp-neon/eclipse
  2. ./eclipse &

複製代碼
選擇工作空間


關閉歡迎界面

在菜單欄依次選擇 File->New->Makefile Project with Existing Code(Ubuntu 有菜單活動時無法截圖,所以就未截圖了)。
然後在新彈出的界面上點擊 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
請注意我上面加紅加粗的地方,它們三個所表示的意思是在 samples/hello_world 目錄下面執行命令 make BOARD=qemu_x86 qemu.



然後點擊 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 這一項,然後保存。

然後按下圖所示進行填充。


然後點擊 apply 按鈕保存(close和debug兩個按鈕先不要動)。

開始調試

理論上,我們現在就可以直接在eclipse裏面編譯,然後進行 debug 了,但是由於 eclipse 是單任務的,必須等編譯完成後才能進行下一個任務(調試),而編譯時會卡在qemu上面,由此造成了死鎖,所以我們不得不繞一個彎。我們先直接在終端中執行命令:
  1. make OARD=qemu_x86 debugserver
複製代碼
然後再在eclipse裏面點擊調試按鈕進行調試。在彈出的對話框中選擇 Proceed 和 Yes 按鈕。然後,終於可以了:

說明

理論上,直接用開發板也可以進行調試,參考:https://www.zephyrproject.org/doc/boards/x86/arduino_101/doc/board.html中的 Debugging 一小節。

調試啓動時默認是停留在 main 函數裏面,但是你也可以修改調試配置,讓它停留在內核的其它地方。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章