本文主要是介绍Zephyr (nrf),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
记录开发zephyr的两三事
微信:bangYS
刚听到zephyr是前些年,一个朋友跟我说的,嵌入式的Linux。
的确,Zephyr跟Linux有千丝万缕的联系。
1. Zephyr用dts管理设备,底层也分驱动层和hal层。
2. Zephyr工程也是通过Kconfig来配置的。
3. Zephyr支持shell接入口,虽然没有Linux的shell功能强大,也是一个强大的交互接口。
4. Zephyr支持多线程。
5. Zephyr支持与Linux类似的初始化声明,SYS_INIT等。
Zephyr的官网文档是Zephyr Project Documentation — Zephyr Project Documentationhttps://docs.zephyrproject.org/latest/index.html
Nrf的官网文档是Welcome to the nRF Connect SDK! — nRF Connect SDK 1.9.99 documentationhttps://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/index.htmlZephyr一直在完善中,版本更新也是挺快的。
Zephyr开发过程中,最麻烦是配置config。当配置config遇到困难的时候,不妨上官网查看config的作用:
All Configuration Options — Kconfig referencehttps://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/kconfig/index-all.html
- 工程管理:
- Zephyr的工程管理工具是west,一个python工具,可以通过pip3 install west安装。官网指引:Getting started — nRF Connect SDK 1.9.99 documentationhttps://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/getting_started.html
- Zephyr的编译工具是cmake。其中cmake嵌套,需要用心查找才能知道细节之处。
- 代码结构:
- bootloader:
- 路径:bootloader/mcuboot/boot/zephyr。
- 官网:https://www.mcuboot.com/documentation/https://www.mcuboot.com/documentation/
- zephyr系统:
- 路径:zephyr。
- kernel header: zephyr/include/kernel.h。
- 网络核bootloader:
- 路径:nrf/samples/nrf5340/netboot。
- 备注:根据芯片及设置不同会有所不同。
- 网络核zephyr系统:
- 路径:zephyr。
- kernel header: zephyr/include/kernel.h。
- 备注:zephyr工程是以zephyr系统为核心,应用核和网络核都是跑zephyr操作系统,特别是网络核的bootloader就是一个剪裁版的zephyr(单线程的zephyr)。其他第三方的代码,皆以module的方式打包到工程中。
- bootloader:
- 常用指令:
- 编译指令:west build -b <board> <application dir> -d <build dir> -p ; -p表示清空并编译,可选项。
- 下载指令:west flash -d <build dir> --skip-rebuild --recover ;--skip-rebuild表示直接下载,不重新编译;--recover表示清空flash再下载。后2个参数都是可选项。
- log:
- 路径:zephyr/subsys/logging。
- 用法:
#include <logging/log.h> LOG_MODULE_REGISTER(smp_service);
- mcuboot:
- mcuboot是应用核的bootloader。
- mcuboot包含AB升级功能。
- mcuboot包含image解析和校验功能。
- Documentation | MCU Boot https://www.mcuboot.com/documentation/
- file system:
- Zephyr的文件系统的应用层接口在zephyr/subsys/storage,分flash_map和stream 2个模式。
- 驱动在zephyr/drivers/flash和nrf/drivers/flash。
- mbedtls:
- Zephyr支持的加密库。
- 配置复杂,需要根据需要配置config。
- shell:
- 可以用TAB查看支持的命令。
- 可以自己添加命令。
- Shell — Zephyr Project Documentationhttps://docs.zephyrproject.org/3.0.0/reference/shell/index.html
- 样例工程:
- 路径:nrf/samples和zephyr/samples。
- 遇事不决,多查sample有没有例子。
- IO控制:
- 与一般嵌入式类似。
- 需要通过dts获取dev。
- 不懂就查samples。
- Settings:
- 路径:zephyr/subsys/settings。
- 系统设置,可根据需要设置读写接口,写可以操作flash或ram(变量),实现永久数据或运行时数据。
- 系统时间:
- zephyr/subsys/timing。
- 可以通过外部时钟对系统时间进行高精度的跳动。
林林总总,很多姿势是没在此文体现的,欢迎朋友们遇到问题后一起交流。
道阻且长,行则将至
这篇关于Zephyr (nrf)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!