0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Ozone调试基于nRF9160 Zephyr应用程序

麦克泰技术 来源:麦克泰技术 2025-02-25 17:07 次阅读

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支持)。

b0f4feb0-f325-11ef-9310-92fbcf53809c.png

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项目:

b18c1278-f325-11ef-9310-92fbcf53809c.png

选择nRF9160_xxAA芯片。

b1a14698-f325-11ef-9310-92fbcf53809c.png

选择使用J-Link仿真器

b1bd57d4-f325-11ef-9310-92fbcf53809c.png

选择build/zephyr/zephyr.elf该文件在前面讨论中构建生成。

b1c939be-f325-11ef-9310-92fbcf53809c.png

其他这些选择缺省。

b1e6d38e-f325-11ef-9310-92fbcf53809c.png

单击“Finish”后,您将看到Ozone项目窗口出现。在“Console”窗口中,运行以下命令以加载Zephyr RTOS插件:

Project.SetOSPlugin("ZephyrPlugin.js");

b20115f0-f325-11ef-9310-92fbcf53809c.png

现在,应该在Ozone项目中看到一个新的“Zephyr”窗口(如果没有,请单击“View”→“Zephyr”以显示该窗口):

b21d8622-f325-11ef-9310-92fbcf53809c.png

最后,保存项目文件,点击“File”→“Save Project as…”:

b22c161a-f325-11ef-9310-92fbcf53809c.png

启动调试会话

现在我们已经配置了Ozone项目,我们可以启动调试会话了。

点击“Debug”→“Start Debug Session”→“Download& Reset Pro”

b2544478-f325-11ef-9310-92fbcf53809c.png

奇怪的是,当固件开始运行时,将看到一个弹出窗口,指示目标已停止在HardFault异常状态!

b26836cc-f325-11ef-9310-92fbcf53809c.png

此时,您可能想知道这里发生了什么......

这里有一个提示:答案与多映像构建有关。

缺少的步骤:

烧入合并的文件映像

你可能已经注意到,我们传递给west build(nrf9160dk_nrf9160_ns)的board参数以_ns结尾。此后缀表示固件将使用Trusted Firmware-M(TF-M)构建。这是ARMIoT安全框架的参考实现,称为平台安全架构(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中打开:

b29a3d3e-f325-11ef-9310-92fbcf53809c.png

烧写合并的映像

导航到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”:

b2b5a236-f325-11ef-9310-92fbcf53809c.png

启动调试会话

b2544478-f325-11ef-9310-92fbcf53809c.png

映像文件烧入到芯片后,你应该可以看到调试器停在main位置:

b2dfa69e-f325-11ef-9310-92fbcf53809c.png

点击“Debug”→“Continue”:

b2fd4ad2-f325-11ef-9310-92fbcf53809c.png

这次固件可以正常运行没有出现异常。

总结

希望这可以帮助你开始使用Ozone调试nRF9160。nRF9160在Zephyr项目中获得了完全支持,并在Golioth物联网设备管理平台中具有最高级别的支持。借助Golioth,你可以连接和保护设备、将传感器数据发送到Web、无线更新固件,以及使用IoT云扩展你的覆盖度。

麦克泰技术是SEGGER产品在中国的代理商,具有超过20年嵌入式实时操作系统和工具的市场、服务和培训经验,已经录制许多SEGGER视频课程撰写博客文章,了解更多产品联系麦克泰技术Info@bmrtech.com。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5122

    文章

    19423

    浏览量

    312743
  • 调试
    +关注

    关注

    7

    文章

    601

    浏览量

    34392
  • 开发板
    +关注

    关注

    25

    文章

    5378

    浏览量

    100632
  • 应用程序
    +关注

    关注

    38

    文章

    3312

    浏览量

    58507
  • Zephyr
    +关注

    关注

    0

    文章

    33

    浏览量

    6171

原文标题:使用Ozone调试基于nRF9160 Zephyr应用程序

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    恩智浦分享Zephyr调试技巧

    前面几期中,我们着重给大家介绍了如何搭建Zephyr开发环境,以及如何添加自己的应用代码。今天让我们开始一个新的篇章:Zephyr调试技巧以及介绍Ozone进行
    的头像 发表于 03-13 09:05 833次阅读

    使用GDB调试Linux应用程序

    本篇讲解使用GDB调试Linux应用程序,以下以 `hellowld.c` 为例介绍 GDB 的调试入门。
    发表于 06-27 15:48 541次阅读

    Nordic nRF9160 SiP LTE-M/NB-IoT模块成功通过一系列主要资格和认证

    Nordic Semiconductor宣布其nRF9160 SiP LTE-M/NB-IoT和GPS蜂窝IoT模块已成功地通过了一系列主要资格和认证。
    发表于 07-05 16:20 5760次阅读

    NRF9160低功耗蜂窝IOT方案

    nRF9160 整合應用 MCU、全 LTE 數據機、接收器前端 (RF) 和電源管理,以 10 mm x 16 mm x 1 mm 的封裝,為行動 IoT (cIoT) 提供小型解決方案。此元件
    发表于 01-23 15:56

    SEGGER Ozone调试器使用攻略!

    )设置PC和堆栈指针的初始值如何获取,可以从文件中获取或者手动指定。如无特殊要求,保持默认选择即可。(5)烧录文件并进入调试工作窗口。点击左上角的绿色图标,下载并复位应用程序。图标右侧的箭头为常规的全速
    发表于 08-11 17:10

    你们有使用过Nordic的NRF9160来做远距离通讯吗?

    针对出口到欧美的手表,需要GPS+LTE-M传输数据,手表尺寸要小,而且足够省电,是否有合适的模块呢? 大家看看NRF9160是否可以符合使用呢?Nordic Semiconductor宣布推出
    发表于 05-14 15:11

    如何在Eclipse中配置K64F Zephyr/项目的调试

    Target 说:zephyr/zephyr.elf。我的方法是复制本机项目的调试配置,而不是更改条目以使其适合 Zephyr 构建的应用程序
    发表于 03-29 08:58

    如何使用ozone调试双核应用?

    在第二个core的ozone中, 点击开始调试, 就不正常了
    发表于 05-26 08:11

    Nordic nRF9160 SiP提供了强大的数据处理能力 并能透过云端进行分析

    Nordic Semiconductor宣布总部位于日本东京的能源解决方案企业West Group,选择具有整合式LTE-M/NB-IoT调制解调器和GPS的nRF9160低功耗系统级封装(SiP
    的头像 发表于 03-10 14:55 4693次阅读

    nRF9160 SiP认证世界最大型NB-IoT网络

    nRF9160 SiP认证可让物联网产品开发人员受惠于世界最大型NB-IoT网络。 *我们屡获殊荣并且集成了LTE-M/NB-IoT调制解调器和GPS的nRF9160低功耗系统级封装(SiP)产品
    的头像 发表于 10-19 10:12 3278次阅读

    如何开发你的第一个NCS(Zephyr)应用程序

    ,那么推荐使用nRF5 SDK 如果你选择的是Nordic最新产品系列,比如nRF53或者nRF9160,那么请选择NCS SDK 还有一种特殊情况,虽然你选择的是nRF52芯片,但需
    的头像 发表于 12-29 09:47 8420次阅读
    如何开发你的第一个NCS(<b class='flag-5'>Zephyr</b>)<b class='flag-5'>应用程序</b>

    Nordic Semiconductor宣布推出nRF 云定位服务

    服务”,这项云产品使得客户能够为自身的基于nRF9160系统级封装(SiP)的蜂窝物联网设备获取更丰富、快速和准确的商业定位服务。 nRF 云定位服务建立在Nordic多功能蜂窝物联网连接使能器
    的头像 发表于 08-16 15:22 2497次阅读

    MM32F013x——巧用Ozone调试MM32

    本文将向大家详细地介绍如何使用Ozone调试MM32 MCU,以及Ozone能给大家带来哪些便利性,体验这款工具的强大之处。
    发表于 02-08 16:23 0次下载
    MM32F013x——巧用<b class='flag-5'>Ozone</b><b class='flag-5'>调试</b>MM32

    如何使用Ozone调试功能

    Ozone是用于J-link和J-Trace的多平台调试,分析工具。独立的图形化界面,可加载IAR,Keil,Gcc,Clang/LLVM等工具链生成的Elf/Dwarf可执行文件,进行C/C++
    的头像 发表于 09-06 11:26 6051次阅读

    Nordic超低功耗窄带蜂窝nRF9160的典型应用

    nRF9160 在紧凑的 10x16x1.04 mm 的 SIP 封装中集成了 ArmCortex-M33 应用处理器、集成 RF 前端(RFFE)的多模式 LTE-M/NB-IoT 调制解调器、GPS 和电源管理。
    发表于 10-13 14:30 1198次阅读