设备树知识点

注意事项

编写设备树文件,一定要保证引脚没有被占用。

设备树

dts (device tree source) 描述SOC外部外设信息的设备树文件。
dtsi (device tree source include) 描述SOC内部外设信息的设备树文件,可以被包含到其他.dts文件中。
dtb (device tree blob) 经编译工具生成的设备树二进制文件
dtc (device tree compiler) 设备树编译工具
在Linux系统终端下使用make dtbs命令,来编译设备树文件,生成dtb文件。

设备树节点命名格式:

节点命名格式:
节点标签:节点名称@设备地址,可以通过&节点标签来直接访问这个节点。

设备树结构:设备树+设备树节点追加内容

设备树是一个包含节点和属性的简单树状结构。属性就是键值对,而节点可以同时包含属性和子节点。

/** Copyright (C) 2016 Freescale Semiconductor, Inc.** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License version 2 as* published by the Free Software Foundation.*//* 设备树 */
/ {model = "Freescale i.MX6 ULL 14x14 EVK Board";compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";chosen {stdout-path = &uart1;};memory {reg = <0x80000000 0x20000000>;};/* Linux LED driver*/led {compatible = "gpio-leds";led0{label = "red_led"; gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;status = "okay";};};beep { compatible = "myboard-beep"; label = "red"; beep-gpios = <&gpio5 1 GPIO_ACTIVE_LOW>;status = "okay";};key { #address-cells = <1>;#size-cells = <1>;label = "yellow_key"; compatible = "myboard-key"; pinctrl-names = "default";pinctrl-0 = <&pinctrl_key>;gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;interrupt-parent = <&gpio1>;interrupts = <18 IRQ_TYPE_EDGE_BOTH>; status = "okay"; };
};/* 设备树节点追加内容 */
&iomuxc {pinctrl-names = "default";pinctrl-0 = <&pinctrl_hog_1>;imx6ul-evk {  pinctrl_led: ledgrp {fsl,pins = <MX6UL_PAD_GPIO1_IO03__GPIO1_IO03    0x30b0>;};pinctrl_key: keygrp {fsl,pins = <MX6UL_PAD_UART1_CTS_B__GPIO1_IO18    0xf080>;};pinctrl_ecspi3: icm20608 { fsl,pins = < MX6UL_PAD_UART2_TX_DATA__GPIO1_IO20 0x10b0 /* CS */MX6UL_PAD_UART2_RX_DATA__ECSPI3_SCLK 0x10b1 /* SCLK */MX6UL_PAD_UART2_RTS_B__ECSPI3_MISO 0x10b1 /* MISO */MX6UL_PAD_UART2_CTS_B__ECSPI3_MOSI 0x10b1 /* MOSI */>;};};
};&ecspi3 { fsl,spi-num-chipselects = <1>;cs-gpios = <&gpio1 20 GPIO_ACTIVE_LOW>; /* cant't use cs-gpios! */pinctrl-names = "default"; pinctrl-0 = <&pinctrl_ecspi3>;status = "okay"; spidev: icm20608@0 { compatible = "myboard,icm20608";spi-max-frequency = <8000000>;reg = <0>;};
};&wdog1 {pinctrl-names = "default";pinctrl-0 = <&pinctrl_wdog>;fsl,wdog_b;
};

该设备树包括:
一个单独的根节点 /
两个子节点 node1 node2
两个子节点的子节点 child-node1 child-node2
一堆分散在树里的属性

设备树的基本单元是node,这些node被组织成树形。
设备树内容都是以key-value键值对的形式存在的。

设备树节点和属性

节点命名格式:节点标签:节点名称@设备地址model:
chosen:
memory:aliases节点:
格式:property = &label;
这与之前的phandle = <&label>;形式不同,这是把一个phandle值插入到一个cell。compatible = "ovti,ov9650";
compatible:该字符串的格式是<制造商>,<型号>。
compatible:兼容性属性,用来决定操作系统使用哪个设备驱动来绑定设备。 status = "okay"/"disabled";
status:状态属性GPIO:
gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
gpios = <&gpio4 22 1>;
cs-gpios = <&gpio5 7 0>;&usdhc1 {pinctrl-names = "default", "state_100mhz", "state_200mhz";pinctrl-0 = <&pinctrl_usdhc1>;pinctrl-1 = <&pinctrl_usdhc1_100mhz>;pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
};
pinctrl-names = "default", "state_100mhz", "state_200mhz";定义了设备有三种状态。
pinctrl-0,pinctrl-1,pinctrl-2:定义了该设备状态的对应引脚。范围(地址转换):
ranges:中断:
interrupt-parent = <&gpio1>;
interrupt-parent:这是一个设备节点的属性。包含一个指向该设备连接的中断控制器的phandle。那些没有interrupt-parent的节点则从它们的父节点中继承该属性。
interrupt-controller:中断控制器。一个空的属性定义表示该节点作为一个接收中断信号的设备。
#interrupt-cells:这是一个中断控制器节点的属性。它声明了该中断控制器的中断指示符中cell的个数(类似于#address-cells和#size-cells)。
interrupts = <18 IRQ_TYPE_EDGE_BOTH>;
interrupts:中断输入线。包含一个中断指示符的列表,对应于该设备上的每个中断输出信号。
interrupt-names:为interrupts属性中的每个中断指定一个名称。其他属性:
clock-names:clocks属性中命名clocks。
dma-names:用于dma属性。
父节点属性:
#address-cells:属性值决定了子节点reg属性中地址信息所占用的字长(32 位)。(地址)
#size-cells:属性值决定了子节点reg属性中长度信息所占的字长(32 位)。(长度)子节点属性:
reg = <0x80000000 0x20000000>;
reg:该属性的格式是<[地址1 长度1][地址2 长度2][地址3 长度3]...>
reg:如果一个节点有reg属性,那么该节点的名字就必须包含设备地址,这个设备地址就是reg属性里第一个地址值。
reg:reg属性一般用于描述设备地址空间资源信息,一般都是某个外设的寄存器地址范围信息。
reg-names:reg属性中的内存区域列表。cpu节点:#address-cells = <1>;#size-cells = <0>;reg = <0>;
内存映射设备:#address-cells = <1>;#size-cells = <1>;reg = <0x10100000 0x1000>;//与cpu节点里单一地址值不同,应该分配给内存映射设备一个地址范围。32位机器,设置每个地址值为1cell,每个长度值也是1cell。64位机器,设置每个地址值为2cell,每个长度值也是2cell。
带独立片选线的设备:#address-cells = <2>;#size-cells = <1>;reg = <1 0 0x1000>;reg = <片选号 偏移量 长度>;
非内存映射设备:#address-cells = <1>;#size-cells = <0>;spi@58{reg = <58>;};

Linux 设备树知识点相关推荐

  1. Linux设备树语法详解【转】

    转自:http://www.cnblogs.com/xiaojiang1025/p/6131381.html 概念 Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离.在设备 ...

  2. Linux设备树相关函数

    Linux设备树相关函数 Linux内核提供了一系列函数来获取设备树中的节点和属性信息. 查找节点:of_find_node_by_name() 函数通过节点名字查找指定的节点of_find_node ...

  3. Linux设备树OF API 中OF的含义

    * 前言 读Linux内核源码或者开源GPL程序源码时,看到各种英文首字母缩写满天飞,英文单词首字母缩写是Unix/Linux C 编程的一个历史习惯,部分英文首字母缩写结合上下文可以找到理解含义,但 ...

  4. Linux 设备树的使用技巧

    Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离.在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写.引入了设备树之后,驱动代码只负 ...

  5. Linux设备树特殊节点(aliases、chosen)介绍

    引用一个特定的节点通常使用全路径,aliases 节点可以用于指定一个设备全路径的别名.例如: 1 2 3 4 aliases {         ethernet0 = ð0;         se ...

  6. 【正点原子MP157连载】第二十三章 Linux设备树-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  7. linux 设备树详解

    2 Linux 设备树 2.1 什么是设备树? 设备树(Device Tree),将这个词分开就是"设备"和"树",描述设备树的文件叫做DTS(Device T ...

  8. Linux设备树led,linux设备树下LED灯控制

    linux设备树下LED灯控制 linux设备树下LED灯控制 原理图: 所以在设备树下子节点下插入gpioled节点: gpioled { #address-cells = <1>; # ...

  9. 正点原子----Linux设备树详解

    linux设备树 1.什么是设备树 2.DTS.DTB.DTC的关系 3.如何编译设备树 4.DTS基本结构 4.1.语法 4.2.设备树在系统中的体现 4.3.尝试自己添加节点 4.4.尝试对根节点 ...

最新文章

  1. 酸奶饮料新产品口味测试研究案例
  2. ORACLE12C_ADG删除pdb
  3. iptables基础知识.详解
  4. python英语字典程序修改_详解如何修改python中字典的键和值
  5. Leetcode - 169. Majority Element (多数投票问题)
  6. 全球及中国天然气终端销售市场产量预测及发展策略分析报告2021年版
  7. django 获取环境变量_Django 安装和配置环境变量
  8. jquery ajax load
  9. JEECG - 基于代码生成器的J2EE智能开发框架 续一:开发环境搭建步骤
  10. awk分割列 输出时间相关
  11. linux 本地端口关,Linux查看端口使用状态、关闭端口方法
  12. JZOJ5143:无心行挽
  13. 计算机控制技术实验平台,THBDC-1控制理论计算机控制技术实验平台简介.doc
  14. 推荐一款手机app自动点击神器
  15. 计算机专业考研2021,2021考研:计算机专业考研方向有哪些?
  16. 杰理之低延时无线麦功能支持以下两种组合配置【篇】
  17. 共享LPT口打印机打印时,注意事项
  18. 蝴蝶效应 青蛙现象 鳄鱼法则 马太效应 木桶理论 二八定律(巴莱多定律) 破窗理论 羊群效应
  19. C++之余弦函数与宏定义
  20. 用C语言写钢琴小程序的代码,用C语言编写钢琴小程序

热门文章

  1. 源服务器未能找到目标资源的表示或者不愿,java - 源服务器没有找到目标资源的当前表示,或者不愿意透露一个存在。 关于部署到 tomcat - 堆栈内存溢出...
  2. SpringBoot项目集成Mybatis Plus(五)条件构造器
  3. Java 算法 复数求和
  4. ajax redirectattributes 使用,Spring中RedirectAttributes对象重定向传参
  5. Vmware fusion强制断电,关闭虚拟机
  6. 解决conda activate报错IMPORTANT: You may need to close and restart your shell after running ‘conda init‘
  7. numpy生成服从特定分布(制定分布)的数据
  8. 留学计算机美国硕士,美国硕士留学计算机专业有哪些名校推荐下?
  9. rocketmq怎么保证数据不会重复_阿里架构师亲授:Kafka和RocketMQ的消息复制实现的差异点在哪?...
  10. cmd切换为administrator用户