Zephyr_Bindings目录作用
Posted 17岁boy想当攻城狮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zephyr_Bindings目录作用相关的知识,希望对你有一定的参考价值。
概述
Bindings目录在zephyr下主要是负责生成与driver tree设备树文件对应的c语言.h文件,通常我们在dts中写好设备描述信息,那么我们需要在c语言中能够用到它,Zephyr的构建工具west会解析dts里的节点,从里面取到compatible的名称,然后在dts/bindings文件夹里去遍历寻找与compatible对应的文件名,然后在里面取到类型信息生成对应的c语言.h文件。
bindings目录介绍
bindings目录由两大目录组成:
1.设备dts的描述类型yaml描述文件
2.vendor-prefixes.txt 设备与厂商描述文件(详情参加:Zephyr:compatible ‘micro,wm89xx‘ has unknown vendor prefix ‘micro‘_17岁boy的博客-CSDN博客)
如下是我们在dts里定义的一个硬件:
wm89xx@1a
compatible = "micro,wm89xx";
reg = <0x1a>;
label = "wm89xx";
status = "okay";
;
那么reg、label这些描述信息被转换成.h文件时应该是什么类型?
这个就需要一个yaml来描述了,这个描述文件需要放在dts/bindings目录下,zephyr会自动取compatible里的内容去找对应的文件,如micro,wm89xx,zephyr会遍历bindings下所有的目录文件找到micro,wm89xx.yaml文件,如果没有则不会生成对应的头文件,这个头文件的作用很重要,当我们编写驱动的时候想要获取label和reg的值时如果没有这个头文件我们就不知道这个值是多少。
yaml文件很简单,如下是一个简单的定义:
description: WM89XX_MICRO
compatible: "cirrus,wm89xx"
label:
required: true
type: string
description: This is Driver Name
reg:
required: true
type: int
description: This Reg Value
这个文件描述了label与reg在定义C头文件时应当是什么类型。
required:是否为必须的,如果是true,那么描述硬件信息时没有这个节点描述则报错
type:类型,可选:<string | int | boolean | array | uint8-array | string-array |phandle | phandles | phandle-array | path | compound>
description:属性描述
最终生成的文件可以在build/zephyr/include/generated/devicetree_unfixed.h文件中找到,如下就找到了label的定义:
#define DT_N_S_soc_S_i2c_40005c00_S_wm89xx_1a_P_label "wm89xx"
这些属性可以通过zephyr提供的一些宏来获取,具体参加Zephyr官网DOC
同时还有devicetree_fixups.h文件,这个文件来自devicetree_unfixed,它的主要作用是为宏定义别名,如果你觉得devicetree_unfixed生成的别名太复杂了,想要生成自己想要格式的或者自己想给指定宏设置一个别名,你可以在这个文件里包含devicetree_unfixed.h,并宏重定义指定宏就可以了。
最终生成的.h文件,给c语言调用的文件在build/zephyr/include/devicetree.h,devicetree基于devicetree_fixups、devicetree_unfixed。
以上是关于Zephyr_Bindings目录作用的主要内容,如果未能解决你的问题,请参考以下文章