wayne2018
三个泥瓦工在砌一堵墙,一位哲人问三个人:“你们在干什么?”第一个人回答是:“砌墙。”第二个人回答是“盖一幢楼。”第三个回答是“我们正在建设自己的家园。”哲人听后拍了拍第三个人肩头说:“今后你将是幸运的。”果不其然,许多年之后,第一个人依然是泥瓦工,第二个人成了工程师,第三个人成了前二个人的老板。
展开
-
基于Zephyr系统驱动开发介绍
Zephyr规范定义了很多术语,但道理相通。就像C语言中的数据类型及赋初值,对应了C++中的对象及实例化。Zephyr系统规范定义了统一的设备类型device。特定的设备,例如gpio端口,定义了统一的驱动类型及接口函数,例如gpio。设备树节点属性通过宏定义了配置信息。原创 2023-02-05 07:10:54 · 487 阅读 · 0 评论 -
OS服务——日志——日志
日志记录API提供了一个通用的接口来处理由开发人员发布的消息。消息通过前端传递,然后由活动的后端进行处理。如果需要,可以使用自定义的前端和后端。翻译 2022-10-28 07:40:54 · 317 阅读 · 0 评论 -
OS服务——SMP协议规范——格式化输出
应用程序以及Zephyr本身都需要基础设施来格式化值以供用户使用。标准的C99库`*printf()`功能满足了对流输出设备或内存缓冲区的需求,但在嵌入式系统中,设备可能不接受流数据,而内存可能无法存储格式化的输出。翻译 2022-10-28 07:39:39 · 319 阅读 · 0 评论 -
OS服务——SMP协议规范—— Shell管理
Shell管理允许使用SMP协议将命令传递给Shell子系统。命令行管理程序管理组定义了以下命令:|Command ID|Command description|| ----- | ----- ||0|Shell command line execute|翻译 2022-10-28 07:38:36 · 229 阅读 · 0 评论 -
OS服务——SMP协议规范——文件管理
文件管理组提供允许从设备上载和下载文件的命令。文件管理组定义了以下命令:|Command ID|Command description|| ----- | ----- ||0|File download/upload||1|File status||2|File hash/checksum|翻译 2022-10-28 07:37:39 · 368 阅读 · 0 评论 -
OS服务——SMP协议规范——统计管理
统计管理允许获取由Zephyr的统计子系统收集的数据,由`CONFIG_STATS`启用。统计信息管理组定义了以下命令:|Command ID|Command description|| ----- | ----- ||0|Group data||1|List groups|翻译 2022-10-28 07:36:40 · 220 阅读 · 0 评论 -
OS服务——SMP协议规范——应用程序/软件映像管理组
应用程序/软件映像管理管理组定义了以下命令:|Command ID|Command description|| ----- | ----- ||0|State of images||1|Image upload||2|File (reserved but not supported by Zephyr)||3|Corelist (reserved but not supported by Zephyr)||4|Coreload (reserved but not supported by Z翻译 2022-10-28 07:35:21 · 183 阅读 · 0 评论 -
OS服务——SMP协议规范——默认/操作系统管理组
操作系统管理组定义了以下命令:|Command ID|Command description|| ----- | ----- ||0|Echo||1|Console/Terminal echo control; unimplemented by Zephyr||2|Statistics||3|Memory pool statistics||4|Date-time string; unimplemented by Zephyr||5|System reset||6|MCUMGR param翻译 2022-10-28 07:34:19 · 153 阅读 · 0 评论 -
OS服务——SMP协议规范——SMP协议规范
这是对简单管理协议SMP的描述,mcumgr使用它将请求传递给设备并接收来自设备的响应。SMP是一个应用程序层协议。底层传输层不在本文档的范围内。翻译 2022-10-28 07:32:55 · 1107 阅读 · 0 评论 -
OS服务——文件系统——文件系统
Zephyr RTOS虚拟文件系统交换机(VFS)允许应用程序在不同的装载点(例如,/fatfs和/lfs)挂载多个文件系统。挂载点数据结构包含实例化文件系统、挂载和操作所需的所有必要信息。文件系统交换机通过引入文件系统注册机制,将应用程序与直接访问单个文件系统的特定API或内部功能解耦。翻译 2022-10-28 07:31:01 · 380 阅读 · 0 评论 -
OS服务——设备管理——无线更新
无线(OTA)更新是一种使用网络连接将固件更新传递到远程设备的方法。虽然这个名称意味着一个无线连接,但通过有线连接(如以太网)接收到的更新仍然通常被称为OTA更新。这种方法要求服务器基础设施托管固件二进制文件,并在更新可用时实现信令的方法。安全性是OTA更新中关注的一个问题;固件二进制文件应该在升级之前进行加密签名和验证。翻译 2022-10-28 07:29:42 · 247 阅读 · 0 评论 -
OS服务——设备管理——设备固件升级
设备固件升级子系统提供了在运行时升级基于Zephyr的应用程序的映像的必要框架。它目前由两个不同的模块组成:* subsys/dfu/boot/:引导加载程序的接口代码* subsys/dfu/img\_util/:映像管理代码翻译 2022-10-28 07:28:49 · 231 阅读 · 0 评论 -
OS服务——设备管理——MCUmgr
管理子系统允许远程进行启用Zephyr的设备的管理。可使用以下管理操作:* 映像管理* 文件系统管理* 日志管理(当前已禁用)* 操作系统管理翻译 2022-10-28 07:27:16 · 448 阅读 · 0 评论 -
OS服务——调试——GDB存根
GDB特性提供了一个GDB远程串行协议(RSP)的实现,它允许您使用GDB远程调试Zephyr。该协议支持不同的连接类型:串行、UDP/IP和TCP/IP。和风目前只支持串行设备通信。翻译 2022-10-27 21:21:22 · 188 阅读 · 0 评论 -
OS服务——调试——核心转储
核心转储模块允许转储CPU寄存器和内存内容以进行脱机调试。当遇到致命错误时,将调用此模块,并根据启用的后端打印或存储数据。翻译 2022-10-27 21:20:25 · 121 阅读 · 0 评论 -
OS服务——调试——线程分析器
线程分析器模块支持跟踪线程信息所需的所有Zephyr选项,例如线程堆栈大小使用情况和其他运行时线程运行时统计信息。翻译 2022-10-27 21:18:09 · 143 阅读 · 0 评论 -
OS服务——加密——加密
加密部分包含有关Zephyr内核支持的加密原语的信息。利用这些信息来理解不同算法操作背后的原理以及它们是如何实现的。翻译 2022-10-27 21:16:37 · 285 阅读 · 0 评论 -
OS服务——加密——随机数生成
随机API子系统在加密和非加密安全实例中提供随机数生成API。使用哪种随机API是基于随机数的加密要求的。如果需要非加密值,非加密api将更快地返回随机值。翻译 2022-10-27 21:15:08 · 224 阅读 · 0 评论 -
构建和配置系统——配置系统——Kconfig提示和最佳实践
本页面涵盖了一些Kconfig的最佳实践,并解释了一些可能是神秘的或很容易被忽视的Kconfig的行为和特性。翻译 2022-10-27 21:13:16 · 376 阅读 · 0 评论 -
构建和配置系统——配置系统——设置Kconfig配置值
菜单配置和菜单配置接口可以用来在应用程序开发期间测试配置。本页解释了如何使设置永久化。翻译 2022-10-27 21:10:43 · 250 阅读 · 0 评论 -
构建和配置系统——配置系统——交互式Kconfig接口
有两个交互式配置接口可用于探索可用的Kconfig选项和进行临时更改:`menuconfig` 和`guiconfig`。`menuconfig` 是一个运行在终端上的界面,而guiconfig是一个图形配置界面。翻译 2022-10-27 21:09:33 · 324 阅读 · 0 评论 -
构建和配置系统——配置系统——配置系统(Kconfig)
可以在构建时对Zephyr内核和子系统进行配置,以适应特定的应用程序和平台需求。配置通过Kconfig进行处理,它与Linux内核使用的配置系统相同。其目标是支持配置,而无需更改任何源代码。翻译 2022-10-27 21:06:48 · 338 阅读 · 0 评论 -
构建和配置系统——设备树——Devicetree对比Kconfig
除了设备树之外,Zephyr还使用Kconfig语言来配置源代码。是否使用设备或Kconfig用于特定目的有时会令人困惑。这部分应该可以帮助您决定使用哪一个。翻译 2022-10-26 19:10:10 · 306 阅读 · 0 评论 -
构建和配置系统——设备树——设备树问题排除
这是一般的建议,特别适用于调试设备树的问题,因为输出是在CMake配置阶段创建的,并且在其输入发生变化时并不总是重新生成。翻译 2022-10-26 19:08:47 · 237 阅读 · 0 评论 -
构建和配置系统——设备树——设备树 HOWTOs
这个页面有一步一步的关于用设备树完成任务的建议。翻译 2022-10-26 19:07:49 · 318 阅读 · 0 评论 -
构建和配置系统——设备树——从C/C++访问设备树
本指南描述了Zephyr的用来从C源文件中读取设备集的API。它假设您熟悉设备介绍和设备介绍绑定中的概念。参考资料见参考资料。翻译 2022-10-26 19:05:01 · 202 阅读 · 0 评论 -
构建和配置系统——设备树——设备树绑定
一个设备本身只是描述硬件故事的一半,因为它是一种相对非结构化的格式。设计人员的绑定提供了另一半。设备树绑定声明对节点内容的要求,并提供有关有效节点内容的语义信息。Zephyr设备树绑定是自定义格式的YAML文件(Zephyr不使用Linux内核所使用的dt模式工具)。翻译 2022-10-26 19:03:30 · 321 阅读 · 0 评论 -
构建和配置系统——设备树——设计目标
随着时间的推移,Zephyr对设备树的使用有了显著的发展,预计还会有进一步的变化。以下是一般的设计目标,以及关于它们如何影响Zephyr的源代码的具体例子,以及还有更多工作需要做的领域。翻译 2022-10-26 19:02:15 · 134 阅读 · 0 评论 -
构建和配置系统——设备树——设备树
设备树是一种描述硬件的分层数据结构。设计树规范定义了它的源表示和二进制表示。Zephyr使用设备树来描述其支持的电路板上可用的硬件,以及该硬件的初始配置。设备输入文件有两种类型:设备源和设备绑定。资料来源包含了设计装置本身。绑定描述了其内容,包括数据类型。构建系统使用设备树源和绑定来生成生成的C头。生成的头的内容由`devicetree.h` API抽象,您可以使用该API从设备中获取信息。翻译 2022-10-26 19:00:46 · 437 阅读 · 0 评论 -
构建和配置系统——构建系统——构建系统(CMake)
CMake用于与Zephyr内核一起构建应用程序。CMake构建分两个阶段完成。第一个阶段称为配置。在配置期间,将执行CMakeLists.txt构建脚本。配置完成后,CMake有一个Zephyr构建的内部模型,并且可以生成对主机平台原生的构建脚本。翻译 2022-10-26 18:54:01 · 394 阅读 · 0 评论 -
Zephyr内核——应用模块——代码和数据重新定位
此功能将允许从所需的文件中重新定位.text、.rodata、.data和.bss部分,并将它们放在所需的内存区域中。内存区域和文件以字符串的形式提供给`scripts/gen_relocate_app.py`脚本。这个脚本总是从cmake内部调用。翻译 2022-10-26 18:46:22 · 254 阅读 · 0 评论 -
Zephyr内核——应用模块——可迭代部分
本页面包含可迭代部分api的参考文档,可用于定义等大小数据结构的可迭代区域,可以使用`STRUCT_SECTION_FOREACH`进行迭代。翻译 2022-10-26 18:45:19 · 321 阅读 · 2 评论 -
Zephyr内核——应用模块——时间实用程序
Zephyr的正常运行时间是基于一个滴答计数器。使用默认的`CONFIG_TICKLESS_KERNEL`,这个计数器在系统启动时以名义上恒定的速率从零前进。类似于这个计数器的POSIX类似于`CLOCK_MONOTONIC`,或者在Linux中是`CLOCK_MONOTONIC_RAW`。`k_uptime_get()`提供了这个时间的一个毫秒表示。翻译 2022-10-26 18:44:02 · 393 阅读 · 0 评论 -
Zephyr内核——应用模块——执行时间函数
定时函数可以用来获取一段代码的执行时间,以帮助分析和优化。请注意,计时函数可能使用与默认内核计时器不同的计时器,其中使用的计时器是由体系结构、SoC或板配置指定的。翻译 2022-10-26 18:42:31 · 252 阅读 · 0 评论 -
Zephyr内核——数据结构——环缓冲区
环状缓冲区是一种循环缓冲区,其内容以先入先出的顺序存储。对于应用程序需要实现数据的异步“流”复制的情况,Zephyr提供了一个结构体`ring_buf`抽象来管理内存共享缓冲区内外的此类数据的副本。翻译 2022-10-25 18:29:21 · 172 阅读 · 0 评论 -
Zephyr内核——数据结构——平衡红/黑树
对于已排序的容器在运行时可能变得很大的情况,由于搜索它的算法成本,列表就会出现问题。对于这些情况,Zephyr提供了一个平衡树实现,它对大小为N的树的O(log2(N))的搜索和删除操作有运行时。这是使用传统的多个学术来源描述的红/黑树实现的。翻译 2022-10-25 18:28:12 · 81 阅读 · 0 评论 -
单一生产者单消费者分组缓冲区
单生产者单消费者包缓冲区(`SPSC_PBUF`)是一个循环缓冲区,其内容以先到先出的顺序存储。可变大小的数据包存储在缓冲区中。数据包缓冲区可以假设有一个产生数据包的上下文和一个消耗数据的上下文。翻译 2022-10-25 18:27:05 · 135 阅读 · 0 评论 -
Zephyr内核——数据结构——多生产者单消费者分组缓冲区
多生产者单消费包缓冲区(`MPSC_PBUF`)是一个循环缓冲区,其内容以先入先出的顺序存储。可变大小的数据包存储在缓冲区中。包缓冲区在假设只有一个消耗数据的环境下工作。然而,有可能是另一个上下文干扰刷新数据,永远不会回来(恐慌情况)。数据包分两个步骤生成:首先分配请求的数据量,生产者填充数据并提交数据。消耗一个包也被执行在两个步骤:消费者声称该包,获取指向它的指针和长度,然后在包被释放。这种方法减少了内存复制。翻译 2022-10-25 18:25:58 · 173 阅读 · 0 评论 -
Zephyr内核——数据结构——双链接列表
在许多方面与单链接列表类似,Zephyr包含了一个双链接实现。这为所有现有的`slist`操作提供了相同的算法行为,但也允许固定时间的删除和插入(在所有点上:在头部、尾部或任何内部节点之前或之后)。为此,该列表为每个节点存储两个指针,因此需要更高的运行时代码和内存空间。翻译 2022-10-25 18:24:28 · 122 阅读 · 0 评论 -
Zephyr内核——数据结构——单链列表
Zephyr提供了一种`sys_slist_t`类型,用于存储简单的单链列表数据(即,每个列表元素存储一个指向下一个元素的指针,而不是指向上一个元素的指针)翻译 2022-10-25 18:21:19 · 215 阅读 · 0 评论