原本 contiki 在本能手心中是排名第一的物联网系统,直到 zephyr 的出现。
2016年2月推出的这个开源项目,在 Linux 基金会的扶持下,短短时间内已经支持了几十款的嵌入式硬件,厂家支持力度大,社区活跃,展现了强大的活力。这在其他操作系统上是看不到的,本能手隐隐觉得它很有可能会成为物联网操作系统的事实标准。
潮流很重要,有幸见证并且加入这个进程,应该会收获很多。
这系列笔记是基于目前最新的 V1.11 版本,目前官方更新比较快,但是包括编译环境、内核整合等都相对固定了。官方如有更新,我会再配套更新系列笔记。
本文作者 IoT小能手 twowinter,转载请联系作者:https://blog.csdn.net/iotisan。
第一部分 开发基础
[1.1 为什么是zephyr]
除了市场大潮流外,它除了性能上满足各类微小设备要求,开发者支持上也很友好,完善的开发文档,活跃开放的社区。
Zephyr 是使用 Cmake 和 Ninja 进行编译。刚好 V1.11 版本之后开始支持 windows 开发,在这篇笔记里,学习如何在 Windows 下搭建 Zephyr 开发所必须的软件开发环境。
本节对编译过程中的 Cmake 和 Ninja 做个拓展了解。Cmake 是做编译准备,生成 ninja 所需的相关文件。Ninja 接着出马,编译、调试、烧写等等统统搞定。
1.4 在 NUCLEO_L073RZ 上运行 zephyr
Zephyr目前已经支持很多硬件了,这里用手头现成 NUCLEO_L073RZ 来做些动手尝试,跑起第一个 Blinky 例程。
跑起 Zephyr Hello World 例程,感受下。
第二部分 Zephyr内核入门
麻雀虽小,五脏俱全。看看Zephyr内核的几大模块。
2.1 线程 Threads
操作系统最核心的功能,就是要实现线程调度。线程就是任务,是一个简单的程序,该程序可以认为 CPU 完全只属该程序自己。
http://docs.zephyrproject.org/kernel/threads/threads.html
2.1.1 线程的生命周期
2.1.2 线程的调度
2.1.3 线程的自定义数据
2.1.4 系统线程
2.1.5 工作队列线程
2.2 系统时间和定时器
操作系统的运行必须有系统时间和定时器接口,这也是内核必备模块之一。
2.3 内存分配
动态分配内存也是内核服务之一。
2.3.1 Memory Slabs
2.3.2 内存池
2.3.3 堆内存池
2.4 线程同步
不同线程的操作同步或者ISR和线程的操作同步,这也是内核服务之一。
2.4.1 信号量
2.4.2 互斥锁
2.4.3 Alerts
2.5 数据传递
不同线程的数据传递或者ISR和线程的数据传递,这也是内核服务之一。
2.5.1 FIFOs
2.5.2 LIFOs
2.5.3 栈
2.5.4 消息队列
第三部分 应用示例学习
Zephyr 的学习第一部分学习了软硬件开发环境搭建,第二部分则开始从 Zephyr 应用程序开发入手。
官方教程在软硬件开发环境搭建之后,则开始介绍内核。本能手觉得先来点应用程序会比较好点,内核的知识则放在第三部分了解。
这是官方教程翻译,介绍了应用开发需要的前期知识。
第四部分 硬件驱动
第五部分 子系统
5.3 设备固件升级DFU
5.3.1 Zephyr 版本 MCUboot 的编译和使用