linux-设备树dts

1.设备树的由来

        一个 SOC 可以作出很多不同的板子,这些不同的板子肯定是有共同的信息,将这些共同的信息提取出来作为一个通用的文件,否则一块板子拥有一个板级信息,Linux 内核中 ARM 架构下有太多的冗余的垃圾板级信息文件。

2.DTB DTS DTC

        dtb是二级制文件

        dts是源码文件

        dtc是编译工具   /scripts/dtc

3.dtsi语法

(1)可以使用include

 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>

(2)设备节点格式

/ {
 aliases {
 can0 = &flexcan1;
 };

 cpus {
 #address-cells = <1>;
 #size-cells = <0>;

 cpu0: cpu@0 {
 compatible = "arm,cortex-a7";
 device_type = "cpu";
 reg = <0>;
 };
 };

 intc: interrupt-controller@00a01000 {
 compatible = "arm,cortex-a7-gic";
 #interrupt-cells = <3>;
interrupt-controller;
 reg = <0x00a01000 0x1000>,
 <0x00a02000 0x100>;
 };
 }

  label: node-name@unit-address

“node-name”是节点名字, label 的目的就是为了方便访问节点,可以直接通过&label 来访问这个节点,“unit-address”一般表示设备的地址或寄存器首地址,如果某个节点没有地址或者寄存器的话“unit-address”可以不要.

(3)compatible属性

"manufacturer,model"

 manufacturer 表示厂商,model 一般是模块对应的驱动名字。

(4)#address-cells  和#size-cells  属性

#address-cells 和#size-cells 这两个属性可以用在任何拥有子节点的设备中,用于描述子节点的地址信息。#address-cells 属性值决定了子节点 reg 属性中地址信息所占用的字长(32 位),#size-cells 属性值决定了子节点 reg 属性中长度信息所占的字长(32 位)。

1 spi4 {
2 compatible = "spi-gpio";
3 #address-cells = <1>;
4 #size-cells = <0>;
5
6 gpio_spi: gpio_spi@0 {
7 compatible = "fairchild,74hc595";
8 reg = <0>;
9 };
10 };
11
12 aips3: aips-bus@02200000 {
13 compatible = "fsl,aips-bus", "simple-bus";
14 #address-cells = <1>;
15 #size-cells = <1>;
16
17 dcp: dcp@02280000 {
18 compatible = "fsl,imx6sl-dcp";
19 reg = <0x02280000 0x4000>;
20 };
21 };

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值