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

Nordic Semiconductor宣布推出nRF 云定位服務(wù)
如何使用Ozone的調(diào)試功能
Nordic超低功耗窄帶蜂窩nRF9160的典型應(yīng)用
使用Percepio View免費(fèi)跟蹤工具分析Zephyr應(yīng)用

評論