Zephyr Device Tree简介

转自 http://kuaibao.qq.com/s/20180323G1UJVT00?refer=cp_1026

Zephyr device tree概述

linux下DTS被DTC编译为DTB,DTB被放到Flash内,启动时DTB由bootloader送给kernel使用。但是这套机制太过庞大,不适合Zephyr作为iot终端节点的目标。Zephyr采用buildin的方法来使用DTS,主要步骤如下:

使用DTC将DTS和C头文件一起预编译组合成.dts_compiled文件。

python脚本按照YAML文件指定的一组规则从.dtscompiled文件中提取信息转换为define,合并板级描述的dts.fixup内的define放置在头文件generateddts_board.h中

Zephyr编译时头文件generateddtsboard.h参与编译被buildin入zephyr

Zephyr device tree基本元素说明

Zephyr Device Tree

Zephyr使用Device Tree来描述架构,板子,驱动信息,Device的文件分别放在

Device Tree语法简述

Zephyr device tree遵循EPAPR document. 简要说明如下:

Device Tree

Device tree由node组成,包含根节点和子节点节点node由节点名和节点内容组成,节点内容用{}扩起来

节点

节点node在Device tree中以下面形式出现:

只能有一个根节点root node, 可以有多个子节点sub node。一个node的内容有属性和自己的sub node

节点名

根节点名是/子节点名node-name为长度小于31的字符串。对不同的device,EPAPR document有推荐的node-name(非强制)当node有寄存器时,unit-address是第一个寄存器的地址。如果node没有寄存器,则无@unit-address

节点属性

属性用表达式以下面形式出现,分为属性名和属性值

属性名

属性名分为标准属性名和非标属性名,对于非标属性名EPAPR document建议加前缀以示区分,例如

注意以上只有3个属性名,属性名当中是允许出现 , 的

属性值

属性值有7种类型

空,没有值

big-endian 32bit符号整形

big-endian 64bit符号整形,由两个32bit组成

字符串

任意数量的array

节点引用

字符串列表

标准属性

常用标准属性共12种:

compatible

model

phandle

status

#address-cells

#size-cells

reg

virtual-reg

ranges

dma-ranges

name

device_type

另外有6种中断用的属性

interrupts

interrupt-parent

#interrupt-cells

interrupt-controller

interrupt-map

interrupt-map-mask

属性名内容繁多,具体参考EPAPR document,后文QEMUCORTEXM3 Device Tree分析会做一些简要说明

YAML

YAML它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言.Zephyr 使用YAML来定义Device tree转化为#define的生成规则,dts/bindings/device_node.yaml.template 是一个yaml的模板, zephyr的yaml放在

Python Script

将Dts转化为头文件的脚本放在scripts\dts下。目前也还不计划阅读这部分。

QemuCortexm3 device tree分析

DTS文件组成

由下面文件include组成

boards/arm/qemucortexm3/qemucortexm3.dts #include

dts/arm/ti/lm3s6965.dtsi #include

dts/arm/armv7-m.dtsi #include “skeleton.dtsi”

dts/common/skeleton.dtsi

将上面4个文件合并后如下分析:

Yaml组成

Qemucortexm3使用的yaml有,生成规则待分析(可能要分析python script才能知道),目前能知道转换结果就不会影响Zephyr代码的分析了

boards/arm/qemucortexm3/qemucortexm3.yaml

dts/bindings/interrupt-controller/arm,v7m-nvic.yaml

dts/bindings/serial/ti,stellaris-uart.yaml

dts/bindings/serial/uart.yaml

转换结果

基本上可以看出就是将dts内的信息转换成device信息的#define,供Zephyr的代码使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值