NCS-OS 系列0:NCS-SDK简介
概述

目前Nordic部分芯片开发基于nRF Connect SDK也就是NCS SDK进行,ncs SDK基于zephyr系统进行开发,这里对NCS SDK的结构做一个简单的介绍。本文基于Noridc官方发布的文档,以nRF9160为实例进行分析,示例代码均以nRF9160平台为基础。

备注:本系列中,代码截图时,一般会把路径一起截进去,找不到文件的时候,可以看下截图里面的文件路径进行查找。

关于nRF Connect SDK

nRF Connect SDK由Nordic Semiconductor托管、开发和支持,用于使用Nordic SoCs进行产品开发,支持BLE,蜂窝网,2.4G,mesh,thread等多种功能,该SDK分布在多个Git存储库中,其中包括应用程序代码、驱动程序、可重新开发的库以及SDK中使用的开源代码分支。主存储库是nrf存储库,它包含应用程序和示例项目以及SDK的manifest 文件,该manifest 文件使存储库可以用west工具作为一个代码库进行管理。

nRF Connect SDK与 Zephyr RTOS

nRF Connect SDK内嵌了Zephyr RTOS,并沿用了Zephyr project的编译系统,从软件架构上来看,NCS SDK和Zephyr SDK基本上是一样的。因此后面说ncs和zephyr可以认为是同一种东西。

源码树结构
ncs
 |___ .west
 |___ bootloader
 |___ mcuboot
 |___ modules
 |___ nrf
 |___ nrfxlib
 |___ zephyr
 |___ ...

这里只列出了一部分的文件,后面随着更新,会有更多的目录进来,所有的文件目录都可以在ncs/nrf/west.yml文件中看到其仓库地址,如下图所示:

NCS 中的dts文件和overlay文件 ncs sdk_应用程序

我们需要关注的目前只有:

  • nrfxlib 包含与rtos无关的库和模块,可用于Nordic SoCs的存储库
  • zephyr zephyr-RTOS
  • mcuboot 用于32bit MCU的加密bootloader

从这里我们可以看到,nRF Connect SDK是在zephyr的基础上进行开发,但是又不完全是zephyr,使用了zephyr的内核作为基础,然后使用mcuboot引导bootloader,同时添加了Nordic自己独有的驱动及模块。

zephyr源码树结构

从上面介绍中知道,ncs是以zephyr为内核,因此,如果想要熟练使用ncs,我们需要对zephyr-RTOS做一个比较深入的了解,下面介绍下zephyr-RTOS,其源码树结构及功能如下:

zephyr
 |___ arch            包含和硬件体系结构相关的代码,每种平台占一个相应的目录
 |___ boards        板级代码及相关的配置文件,如nRF9160_pca10090 board等
 |___ cmake        构建Zephyr需要额外的构建脚本。
 |___ doc             系统文档目录
 |___ drivers        设备驱动,每个不同的驱动占用一个子目录
 |___ dts              devicetrree源文件,用于描述特定板子的设备细节,如外设寄存器数量及寄存器地址
 |___ ext               其他功能的支持
 |___ include       包括所有公共api的文件,除了在lib下定义的部分。
 |___ kernel          与架构无关的内核代码
 |___ lib                库代码,包括最小的标准C库。
 |___ misc              不属于任何其他顶级目录的杂项代码。
 |___ modules         提供特定芯片系列的一些外设配置选项
 |___ samples        演示使用Zephyr特性的示例应用程序
 |___ scripts            用于构建和测试Zephyr应用程序的各种程序和其他文件。
 |___ soc                 SoC相关代码和配置文件,如nRF9160 soc
 |___ subsys            zephyr子系统,包括USB,网络,文件系统及蓝牙等
 |___ tests               测试Zephyr特性的代码。
 |___ CMakeLists.txt    CMake构建系统的顶层文件,包含构建Zephyr所需的大量逻辑
 |___ Kconfig              顶层Kconfig文件,它引用Kconfig.zephyr文件。也可以在顶级目录中找到
 |___ west.yml           West 清单,列出由West命令行工具管理的外部存储库
总结

本文主要介绍ncs sdk的基础概念以及源码树各路径对应的功能,有一个直观的认识即可,知道什么东西需要去哪里寻找,如要看gpio设备如何控制,我们就知道要去zephyr/driver/gpio下面去查看相关的代码,结合路径下的cmakelists文件及kconfig文件,就知道改如何配置外设参数及使用。