Zephyr设备树保姆级上手教程(上)
  m9kCQSVmQX0i 2023年11月02日 32 0

刚接触Zephyr的小伙伴可能都知道Zephyr比起其他主流嵌入式RTOS,多了设备树这个概念(玩过Linux的伙伴可能不会觉得陌生),那么设备树有什么作用呢,在实际开发中需要注意什么,这篇我们来聊聊,因为篇幅比较长,预计拆成上下两篇,感兴趣的小伙伴记得关注。


设备树简介

设备树是一种描述特定硬件的数据结构,以便于操作系统更高的使用和管理硬件外设,它是一种树状的形态结构。

Zephyr设备树保姆级上手教程(上)_物联网


设备树的引入有这样的作用:

驱动和设备是独立编译出的两个文件,实现了驱动driver和外设device解耦。引用设备树之后,驱动代码只负责处理驱动的逻辑,关于设备的信息放在设备树文件中,如果只是硬件接口发生变化,只需要修改设备树和修改对应的硬件设备,而不需要修改驱动代码。


Zephyr的设备树使用流程

Zephyr设备树保姆级上手教程(上)_MCU_02

注意:

  • 与linux不同的是Zephyr的设备树在使用中不能动态解析设备树dts文件
  • Zephyr的驱动编写与设备信息文件是解耦的,驱动driver的编写不用关注硬件外设变更,外设变更不会影响驱动driver


设备树原理

设备树结构和内容

以下截图为例,首行的“/” 表示为根节点, property name部分显示node@0有3个属性(properties)信息 property下方代码表示有两个主节点分别名为node、node1,“@”后面为表示地址(unit address)。 设备节点中也可以包含子节点,如下图中node0包含child-node@0和child-node@1两个子节点,子节点也是完整的形式。

Zephyr设备树保姆级上手教程(上)_单片机_03

dts通用属性类型参考:

Zephyr设备树保姆级上手教程(上)_单片机_04

设备树如何参与编译

1、在编译前需要将设备树文件(.overlay、.dts、*.dtsi全部incloud展开解析成对工程项目的总设备树zephyr.dts.pre

2、编译中构建系统会根据.yml文件中的绑定关系判断哪些dts文件需要转化为C宏,通过脚本将dts文件中的节点和.yml文件进行匹配生成对应的C宏

Zephyr设备树保姆级上手教程(上)_MCU_05

当执行编译指令 lisa zep build csk6011a_nano.overlay的时,首先BOARD.dts的信息就确认为csk6011a_nano这个开发板型号,然后基于BOARD.dts信息展开设备树的解析。BOARD引用其他的dts和基础的dts汇总到一起展开,但若项目APP中有.overlay文件,.overlay中对应的节点信息就会覆盖展开的总信息,最终生效的是.overlay文件。

因此节点信息查找顺序为:.overlay → board.dts → other.dtsi

Zephyr设备树保姆级上手教程(上)_单片机_06

Zephyr设备树保姆级上手教程(上)_物联网_07

生成宏

在Zephyr中生成总的设备树后,总设备树通过脚本再去加载./.sdk/zephyr/bingdings/*.yaml文件中的绑定信息生成C宏。

Zephyr设备树保姆级上手教程(上)_设备树_08


dts与生成宏的关系

Zephyr C宏生成规则如下,由于论坛放不了外链,详细的关系讲解可以查找官方的同名视频观看

Zephyr设备树保姆级上手教程(上)_IOT_09

代码中获取设备树

当需要通过程序对某个设备驱动做初始化或调用其规则时可以调用上面生成的这些宏,当做应用开发的时候可以通过调用实例对应宏的API即可,详细解说请查看文末目录导航获取。

Zephyr设备树保姆级上手教程(上)_单片机_10


设备树、驱动、绑定文件的关系

设备树中以设备节点的方式描述设备的信息,这些信息会被绑定文件约束。有效的设备信息才会作为参数通过一系列操作生成C宏,作为C宏参数传递给驱动使设备运行起来。

Zephyr设备树保姆级上手教程(上)_单片机_11

为了可以结合代码工程做更细致的讲解,大家也可以点击文末的【目录导航】获取视频教程,视频会涵盖以下内容:

  • 设备树的基础概念
  • 设备树的作用与优势
  • 设备树在Zephyr RTOS中如何生效及其机制原理
  • 如何通过编写设备树节点实现外设的调用


更多学习资源

如果需要获取本教程相关的学习资源、代码,

或者了解更多与嵌入式开发、AI芯片相关的其他课程,可以点击查看目录导航


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
m9kCQSVmQX0i
最新推荐 更多