尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于 nRF9160 SiP 的蜂窝物联网开发板:Zephyr 中 innblue21 / innblue22 板级支持与 TrustZone-M 安全启动实战指南

基于 nRF9160 SiP 的蜂窝物联网开发板:Zephyr 中 innblue21 / innblue22 板级支持与 TrustZone-M 安全启动实战指南 基于 nRF9160 SiP 的蜂窝物联网开发板Zephyr 中 innblue21 / innblue22 板级支持与 TrustZone-M 安全启动实战指南【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr本文围绕 Zephyr 仓库中 boards/innblue 板卡目录所承载的 innblue21 与 innblue22 两块开发板展开系统讲解其硬件资源、引脚连接、安全特性IDAU/SPU 与 Secure boot以及最重要的——在 Zephyr 中为基于 nRF9160 的蜂窝物联网板构建 Secure / Non-Secure 双固件并合并烧录的完整流程。读完本文你将掌握 nRF9160 系列板卡的设备树组织结构、TrustZone-M 分区启动原理以及可复制的构建与烧录命令。板卡概览专为 NB-IoT / LTE-M 设计的传感开发平台innblue21 与 innblue22 是两块结构高度一致、均以 Nordic nRF9160 SiPSystem in Package为核心的蜂窝物联网传感器开发板板载 NB-IoT 与 LTE-M 蜂窝连接能力。官方板卡文档 innblue21 文档 与 innblue22 文档 均以 cellular IoT sensor development board 定位二者在 Zephyr 中的板级实现几乎镜像区别仅在于板卡命名V2.1 / V2.2与对应的 Kconfig 符号。从 board.yml 可以看到两块板卡的正式标识innblue21全名nRF9160 INNBLUE21SoC 为nrf9160并声明了nsNon-Secure变体innblue22全名nRF9160 INNBLUE22SoC 同样为nrf9160同样提供ns变体。其中ns变体的存在直接对应下文即将展开的 Secure/Non-Secure 双区启动架构这也是 nRF9160 板卡在 Zephyr 中最具代表性的使用场景之一。板载硬件资源根据板卡文档的 Hardware 章节两块板卡内置了以下主要元器件功能器件加速度计AccelerometerST LIS2DH12安全加密元件CryptoElementAtmel ATECC608a湿度传感器Humidity SensorST HTS221Qi 无线充电Qi chargerTI BQ51013电池电量计Battery fuel gaugeTI BQ27421这些声明并非仅停留在文档层面在 innblue21_common.dtsi 中可以看到它们在 I2C 总线上的真实挂载情况i2c2被配置为nordic,nrf-twim快速模式I2C_BITRATE_FAST其上依次挂载了st,lis2dh加速度计地址0x19、st,hts221湿度传感器地址0x5f、st,lps22hb-press气压计地址0x5c、ams,ccs811空气质量传感器地址0x5a以及bosch,bme680环境传感器地址0x76。也就是说文档中列举的传感器只是板载传感能力的一部分设备树中还预留了更多 I2C 器件节点方便开发者直接通过devicetreeAPI 访问。支持的 Zephyr 特性从板卡的 innblue21_nrf9160.yaml 与 innblue22_nrf9160.yaml 可以精确得知官方声明的资源与特性标识innblue21/nrf9160、innblue22/nrf9160架构armArmv8-M支持 TrustZone-M工具链gnuarmemb、zephyrRAM64 KBFlash256 KB支持的驱动类别i2c、pwm、watchdog对应的 Kconfig 配置位于 Kconfig.innblue21其中config BOARD_INNBLUE21通过select SOC_NRF9160_SICA关联到 Nordic nRF9160 SiP 的 SoC 定义。连接与 IOLED 与按键引脚LED 引脚分配根据文档 Connections and IOs 章节两块板卡各提供 4 颗 LED引脚完全一致LED颜色引脚LED1红RGB 红色通道P0.7LED2绿RGB 绿色通道P0.6LED3蓝RGB 蓝色通道P0.5LED4红模式指示灯P0.4设备树 innblue21_common.dtsi 中将这些 LED 定义为gpio-leds节点前三颗构成 RGB 灯、第四颗为模式指示并通过aliases暴露为led0/led1/led2/led3与 Zephyr 各类 sample 中led0的惯用别名保持一致开箱即可点亮。按键板卡仅提供 1 个按键 BUTTON1位于 P0.31。设备树中对应gpio-keys节点 button_0使能了内部上拉GPIO_PULL_UP并绑定输入事件码INPUT_KEY_0别名sw0可直接用于zephyr,code驱动的事件输入子系统。安全组件IDAU、SPU 与安全启动nRF9160 板卡文档专门列出了两大安全组件这是理解后续 Secure/Non-Secure 构建流程的基础IDAUImplementation Defined Attribution Unit由 SPUSystem Protection Unit实现用于划分安全Secure与非安全Non-Secure内存映射。默认情况下全部内存空间Flash、SRAM 以及外设地址空间均被定义为仅安全可访问——这意味着任何未显式配置的非安全固件默认无法触碰这些资源。Secure boot安全启动保证固件从安全状态启动、校验并进入受信任的执行环境。在 innblue21_common.dtsi 末尾板卡通过#include nordic/nrf91xx_partition.dtsi引入默认的内存分区配置为安全/非安全固件划分独立的 Flash 与 SRAM 分区这是双区固件得以共存与跳转的前提。构建 Secure / Non-Secure 双区应用innblue21 与 innblue22 均支持 Armv8-M Security Extension且默认从 Secure 状态启动。当需要同时运行可信Secure与不可信Non-Secure两部分固件时官方文档给出了明确的三步流程构建 Secure 应用使用-DBOARDinnblue21或innblue22并在应用的项目配置文件中启用CONFIG_TRUSTED_EXECUTION_SECUREy构建 Non-Secure 应用使用-DBOARDinnblue21/nrf9160/ns或innblue22/nrf9160/ns合并两个二进制文件将 Secure 与 Non-Secure 固件合并为最终可烧录镜像。其中ns板型变体在仓库中有完整的实体支撑设备树变体 innblue21_nrf9160_ns.dts 与 YAML 声明 innblue21_nrf9160_ns.yaml默认配置 innblue21_nrf9160_ns_defconfig 中显式启用了CONFIG_TRUSTED_EXECUTION_NONSECUREy并注释说明 This Board implies building Non-Secure firmware。对照 innblue21_nrf9160_defconfig两个变体都启用了CONFIG_ARM_MPUy与CONFIG_ARM_TRUSTZONE_MyMPU 与 TrustZone-M 是 nRF9160 分区内存保护的基础同时开启 GPIO、UART 驱动与控制台CONFIG_CONSOLEy、CONFIG_UART_CONSOLEy保证双区固件都能输出日志。关键前提SPU 配置必须在跳转前完成文档特别强调在构建 Secure/Non-Secure 双区应用时Secure 应用必须配置 IDAU即 SPU以允许 Non-Secure 固件访问其所使用的全部 CPU 资源Flash、SRAM、外设且SPU 的配置必须在跳转到 Non-Secure 应用之前完成。否则 Non-Secure 固件一旦运行便会因触碰安全专属资源而触发安全异常SecureFault。这也是CONFIG_TRUSTED_EXECUTION_SECURE构建的 Secure 固件在main()之前、启动早期完成 SPU 初始化的原因。构建 Secure-only 应用如果不需要拆分信任边界只需按常规方式构建单区 Secure 应用直接使用-DBOARDinnblue21或innblue22无需任何 TrustZone 相关特殊配置。由于板卡默认从 Secure 状态启动单固件会以完整安全权限运行可访问全部资源适用于功能简单、无第三方不可信代码的物联网传感节点场景。烧录与运行前置软件按照 Nordic 官方烧录工具Segger J-Link 相关软件的安装与配置说明准备好环境后即可按常规流程构建与烧录。nRF9160 板卡通过板载 J-Link OB 调试器提供 USB 串口与烧录通道。监听串口输出以hello_world示例为例首先用终端程序监听串口输出$ minicom -D tty_device -b 115200将tty_device替换为 nRF9160 innblue21/innblue22 对应的串口设备Linux 下通常为/dev/ttyACM0。115200 波特率与设备树中uart0的current-speed 115200配置一致。构建并烧录在 Zephyr 环境中执行以 innblue21 为例innblue22 同理$ west build -b innblue21 samples/hello_world $ west flash其中west build -b innblue21完成构建west flash通过板载调试器烧录。设备树 innblue21_common.dtsi 中已将uart0同时指定为 Zephyr 控制台zephyr,console、shell UARTzephyr,shell-uart与 mcumgr UARTzephyr,uart-mcumgr因此烧录后串口即可看到Hello World!输出。调试如需对板卡进行断点调试与单步跟踪可参考 Nordic 官方关于 Segger 调试器的说明通过 J-Link / Ozone 等工具连接板载调试器进行。nRF9160 属于 Armv8-M 架构调试时同样遵循 Secure/Non-Secure 两个世界各自的地址空间与权限边界。小结innblue21 与 innblue22 是 Zephyr 中 nRF9160 蜂窝物联网开发板的典型实现板载加速度计、湿度、气压、空气质量等多路 I2C 传感器配合 LED、按键、无线充电与电量计构成完整的传感节点硬件平台在软件层面其核心价值在于完整示范了 Zephyr 对 Arm TrustZone-M 的支持——通过-DBOARDboard与-DBOARDboard/nrf9160/ns分别产出 Secure / Non-Secure 固件再合并烧录使开发者能够在同一颗 nRF9160 上落地可信执行环境与不可信应用并存的蜂窝物联网方案。如需深入可直接阅读 innblue21 板级源码 与 innblue22 板级源码 中的设备树与 Kconfig 定义。【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表