Ozone是SEGGER免費的嵌入式軟件調試器。它是一個強大的工具,可以讓你深入了解嵌入式系統中發生的事情。它在調試nRF9160 Zephyr應用程序時特別有用。整理多個線程和多映像構建可能很困難,但這就是你想要的工具。
在我們之前的博文《采取下一步:在Zephyr上使用SEGGER Ozone和SystemView進行調試》中,Chris Gammell撰寫了有關如何設置SEGGER Ozone項目,以調試在i.MX RT1060評估套件上運行的Zephyr應用程序。這是在Ozone中調試Zephyr應用程序和分析RTOS運行時行為的一個很好的介紹。
當我嘗試設置一個類似的Ozone項目來調試Nordic nRF9160 SIP開發板時,我在此過程中遇到了一些困難。今天,我將分享我所學到的知識。
在本文中,我將介紹如何:
? 配置nRF9160 Zephyr應用程序以進行線程感知調試。
? 使用新建項目向導為nRF9160創建Ozone項目。
? 修改Ozone工程以支持調試nRF9160多映像構建。
硬件配置
在下面的示例中,我將使用Nordic nRF9160 DK板。這款來自Nordic的開發套件在電路板中內置了SEGGER J-Link OB調試器,因此不需要外部J-Link調試器來跟進示例(SEGGER Ozone需要J-Link支持)。
Zephyr中的線程感知的支持
在使用Golioth Zephyr SDK構建的典型Zephyr應用程序中,將有多個線程。例如,一個用于應用程序的主循環,一個用于Golioth系統客戶端,其他用于UART shell、日志記錄子系統、網絡管理等。
SEGGER為Ozone提供了一個Zephyr RTOS插件,可以顯示每個線程的狀態,但它要求Zephyr固件在構建時支持線程感知調試。Zephyr提供了一個CONFIG_DEBUG_THREAD_INFO Kconfig符號,該符號指示內核維護所有線程的列表,線程名稱在Ozone中可見。
雖然你可以簡單地將CONFIG_DEBUG_THREAD_INFO=y添加到應用程序的prj.conf文件中,但你可能只想在構建時啟用這些額外的調試信息。我們可以創建一個額外的debug.conf Kconfig文件,只有當我們將-DEXTRA_CONF_FILE=debug.conf參數傳遞給構建系統時,該文件才會被合并。
由于本文是關于使用Ozone進行線程感知調試的,因此我們將使用nRF Connect SDK Zephyr存儲庫中的zephyr/samples/basic/threads/應用程序作為本文的示例應用程序。
如果這是你第一次構建Zephyr示例應用程序之一,請確保先完成nRF Connect SDK安裝,并確保你的開發環境設置正確。
如何啟用線程感知
首先創建一個zephyr/samples/basic/threads/debug.conf文件并添加以下命令行:
zephyr/samples/basic/threads/debug.conf
CONFIG_DEBUG_THREAD_INFO=y # CONFIG_DEBUG_THREAD_INFO needs the heap memory pool to # be defined for this app CONFIG_HEAP_MEM_POOL_SIZE=256
接下來,構建固件,指定需要的debug.conf文件并合并到構建配置中:
cd/ west build -p -b nrf9160dk_nrf9160_ns zephyr/samples/basic/threads/ -- - DEXTRA_CONF_FILE="debug.conf"
如果構建成功完成,你將看到我們在Ozone中啟動調試會話所需的build/zephyr/zephyr.elf 文件
創建Ozone項目
現在我們已經構建了固件,可以啟動Ozone并使用New Project Wizard創建一個Ozone項目:
選擇nRF9160_xxAA芯片。
選擇使用J-Link仿真器。
選擇build/zephyr/zephyr.elf該文件在前面討論中構建生成。
其他這些選擇缺省。
單擊“Finish”后,您將看到Ozone項目窗口出現。在“Console”窗口中,運行以下命令以加載Zephyr RTOS插件:
Project.SetOSPlugin("ZephyrPlugin.js");
現在,應該在Ozone項目中看到一個新的“Zephyr”窗口(如果沒有,請單擊“View”→“Zephyr”以顯示該窗口):
最后,保存項目文件,點擊“File”→“Save Project as…”:
啟動調試會話
現在我們已經配置了Ozone項目,我們可以啟動調試會話了。
點擊“Debug”→“Start Debug Session”→“Download& Reset Pro”
奇怪的是,當固件開始運行時,將看到一個彈出窗口,指示目標已停止在HardFault異常狀態!
此時,您可能想知道這里發生了什么......
這里有一個提示:答案與多映像構建有關。
缺少的步驟:
燒入合并的文件映像
你可能已經注意到,我們傳遞給west build(nrf9160dk_nrf9160_ns)的board參數以_ns結尾。此后綴表示固件將使用Trusted Firmware-M(TF-M)構建。這是ARM的IoT安全框架的參考實現,稱為平臺安全架構(PSA)。
TF-M使用nRF9160的Cortex-M33 MCU的ARM TrustZone安全功能將MCU劃分為安全處理環境(SPE)和非安全處理環境(NSPE)。
簡而言之,引導過程的工作原理如下:
1. 當MCU啟動時,它開始在安全環境(SPE)中執行。
2. 引導過程可以選擇從使用NSIB和/或MCUboot的安全引導加載程序鏈開始。
3. 如果使用,引導加載程序會啟動TF-M,這會將MCU內存和外設的一部分配置為非安全。
4. TF-M啟動在非安全環境(NSPE)中運行的Zephyr應用程序。
當我們針對_ns構建目標進行構建時,TF-M鏡像會自動構建并與Zephyr應用程序鏈接。如果查看build/zephyr/輸出目錄,您將看到一個名為merged.hex的文件,這是一個合并文件,其中包含MCUboot引導加載程序(可選)、TF-M安全映像和非安全Zephyr應用程序。
修復Ozone項目文件
我們將直接在Ozone項目文件中進行一些更改,該文件可以通過單擊“File”→“Edit Project File”在Ozone中打開:
燒寫合并的映像
導航到Ozone項目文件的TargetDownload部分并添加以下內容,以將Ozone配置為刷寫合并的圖像(更改路徑以匹配項目中的合并映像文件):
/********************************************************************* * * TargetDownload * * Function description * Replaces the default program download routine. Optional. * ********************************************************************** */ void TargetDownload(void) { Exec.Download("$(ProjectDir)/build/zephyr/merged.hex"); }
修復矢量表和PC地址
導航到Ozone項目文件的_SetupTarget部分,然后進行以下更改:
1. 將vector table地址設置為0
2. 從vector表中讀取入口點程序計數器地址
/********************************************************************* * * _SetupTarget * * Function description * Setup the target. * Called by AfterTargetReset() and AfterTargetDownload(). * * Auto-generated function. May be overridden by Ozone. * ********************************************************************** */ void _SetupTarget(void) { unsigned int SP; unsigned int PC; unsigned int VectorTableAddr; VectorTableAddr = 0; // // Set up initial stack pointer // SP = Target.ReadU32(VectorTableAddr); if (SP != 0xFFFFFFFF) { Target.SetReg("SP", SP); } // // Set up entry point PC // PC = Target.ReadU32(VectorTableAddr + 4); if (PC != 0xFFFFFFFF) { Target.SetReg("PC", PC); } else { Util.Error("Project script error: failed to set up entry point PC", 1); } }
保存項目文件時,您應該會看到一個模式彈出窗口,詢問您是否要重新加載項目。
選擇“Yes”:
啟動調試會話
映像文件燒入到芯片后,你應該可以看到調試器停在main位置:
點擊“Debug”→“Continue”:
這次固件可以正常運行沒有出現異常。
總結
希望這可以幫助你開始使用Ozone調試nRF9160。nRF9160在Zephyr項目中獲得了完全支持,并在Golioth物聯網設備管理平臺中具有最高級別的支持。借助Golioth,你可以連接和保護設備、將傳感器數據發送到Web、無線更新固件,以及使用IoT云擴展你的覆蓋度。
麥克泰技術是SEGGER產品在中國的代理商,具有超過20年嵌入式實時操作系統和工具的市場、服務和培訓經驗,已經錄制許多SEGGER視頻課程撰寫博客文章,了解更多產品聯系麥克泰技術[email protected]。
-
嵌入式
+關注
關注
5141文章
19537瀏覽量
315022 -
調試
+關注
關注
7文章
607瀏覽量
34518 -
開發板
+關注
關注
25文章
5530瀏覽量
102335 -
應用程序
+關注
關注
38文章
3322瀏覽量
58733 -
Zephyr
+關注
關注
0文章
35瀏覽量
6234
原文標題:使用Ozone調試基于nRF9160 Zephyr應用程序
文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
恩智浦分享Zephyr調試技巧
Nordic nRF9160 SiP LTE-M/NB-IoT模塊成功通過一系列主要資格和認證
9160 gps 定位需要多長時間呢?
NRF9160低功耗蜂窩IOT方案
SEGGER Ozone調試器使用攻略!
你們有使用過Nordic的NRF9160來做遠距離通訊嗎?
如何在Eclipse中配置K64F Zephyr/項目的調試?
Nordic nRF9160 SiP提供了強大的數據處理能力 并能透過云端進行分析
nRF9160 SiP認證世界最大型NB-IoT網絡
如何開發你的第一個NCS(Zephyr)應用程序

Nordic Semiconductor宣布推出nRF 云定位服務
如何使用Ozone的調試功能
Nordic超低功耗窄帶蜂窩nRF9160的典型應用
使用Percepio View免費跟蹤工具分析Zephyr應用

評論