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目录作用的主要内容,如果未能解决你的问题,请参考以下文章

Zephyr_Bindings目录作用

Linux里面ls -ld命令作用是啥?

JavaWeb --第二章 Tomact详情

Java中的包(package)详情解释

目录详情

Scrapy项目创建已经目录详情