使用 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 函數裏面,但是你也可以修改調試配置,讓它停留在內核的其它地方。