刚接触Zephyr的小伙伴可能都知道Zephyr比起其他主流嵌入式RTOS,多了设备树这个概念(玩过Linux的伙伴可能不会觉得陌生),那么设备树有什么作用呢,在实际开发中需要注意哪些呢?
为方便大家了解、学习设备知识,我们推出了《Zephyr设备树保姆级上手教程》。
本次课程由聆思科技嵌入式专家虎哥讲解,通过本课程我们将会了解:
● 设备树的基础概念
● 设备树的作用与优势
● 设备树在Zephyr RTOS中如何生效及其机制原理
● 如何通过编写设备树节点实现外设的调用
概述
设备树 是描述硬件的分层数据结构。 设备树 规范定义了它的源代码和二进制表示。 Zephyr 使用设备树来描述其支持的板型上可用的硬件,以及该硬件的初始配置。
有两种类型的设备树输入文件:设备树源码 和 设备树绑定 。这里的 设备树源码 即设备树本身;设备树绑定 则描述了设备树的内容,包括数据类型。构建系统 使用设备树源码和绑定来生成一个 C 头文件。这一过程让你最终可以通过 devicetree.h
API 获取你设备树中的信息。
这是该流程的概览:
设备树构建流程图
所有 Zephyr 和应用程序源代码文件都可以引入并使用 devicetree.h
。这包括 设备驱动程序 、 应用程序 、 测试 、内核等。
该 API 本身基于 C 宏。此类宏名称都以 DT_
开头。一般来说,如果你在 Zephyr 源码中看到一个以 DT_
开头的宏,它就可能是存在于 devicetree.h
中的宏。生成的 C 头文件也包含以 DT_
开头的宏;你可能会在编译器错误消息中看到这些内容。但你总是可以在这些宏中分辨出,哪些是生成的、哪些不是生成的:生成的宏有一些小写字母,而 devicetree.h
宏名称全是大写字母。
设备树中定义的一些信息可通过 Kconfig 生成的 CONFIG_
宏获得。这通常是为了向后兼容,因为 Zephyr 使用 Kconfig 的时间超过了设备树,并且仍在将一些信息从 Kconfig 转换为设备树。 Zephyr 还允许 Kconfig 重写从设备树获取的默认值。在 Kconfig 中可通过 Kconfig 函数 引用设备树信息。有关设备树的更多信息,请参阅 聆思文档中心-设备树讲解
关于聆思
聆思科技是一家专注提供智能终端系统级(SoC)芯片的高科技企业,目前推出的CSK6系AI芯片已适配Zephyr RTOS。
欢迎各位同学与我们进行技术相关的探讨,大家一起进步吧!