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
文件中看到其仓库地址,如下图所示:
我们需要关注的目前只有:
- 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文件,就知道改如何配置外设参数及使用。