IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 110 DTS:硬件资源的说明书1 -> 正文阅读

[嵌入式]110 DTS:硬件资源的说明书1

一、诞生背景

硬件设备中种类逐年递增,板级platform平台设备文件越来越多

二、设备树简介

如下图,
设备树由 根节点 开始,可以包含若干个 子节点
每个 子节点 又可以包含若干个 子节点
在这里插入图片描述

  • DTS(device tree source):设备树源文件,ASCII 格式
  • DTC(device tree compiler):设备树编译工具。将 dts文件 编译成 dtb文件
  • DTB(device tree blob):二进制设备树

1、设备树使用

uboot负责加载 dtb文件 到内存的 特定位置,内核在启动时从这个位置获取 dtb文件 并解析使用

设备树源文件 dts

ascii格式
arch/arm/boot/dts/imx6ull-alientek-emmc.dts

二进制设备树

二进制格式
arch/arm/boot/dts/imx6ull-alientek-emmc.dtb

将编译得到的 dtb 文件放到 tftp目录下, uboot 会从此目录下获取 dtb 文件 ,并放到内核的指定位置,等待内核启动时解析。

设备树编译工具 dtc

dtc也是由源码变异而得到的应用程序。

可以借助内核Makefile 的 dtbs目标来编译设备树,也可以手动调用工具dtc来编译设备树。

1、内核伪目标编译设备树

编译dts
make ARCH=arm -j4 CROSS_COMPILE=arm-linux-gnueabihf- dtbs

2、手动编译设备树

编译 dts 为 dtb
./scripts/dtc/dtc -I dts -O dtb -o xxx.dtb arch/arm/boot/dts/xxx.dts 
反编译 dtb 为 dts
./scripts/dtc/dtc -I dtb -O dts -o xxx.dts arch/arm/boot/dts/xxx.dtb 

-I:指定输入格式,为dts
-O:指定输出格式,为dtb
-o:指定输出文件

2、设备树框架

  • 从上到下

    • 头文件
    • 主体
    • 子节点追加内容(注意追加节点不要放在根节点范围里)
  • 从外到内

    • 属性
    • 其他子节点
      • 属性
      • 其他子节点

头文件:

#include <dt-bindings/input/input.h>
#include "imx6ull.dtsi"

主体:

注意 *,dtsi 文件中也有 / 根节点。经过内核解析后会和 主体的根节点 合并。

/ {  
    model = "Seeed i.MX6 ULL NPi Board";
    compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";

    aliases {
            pwm0 = &pwm1;
            pwm1 = &pwm2;
            pwm2 = &pwm3;
            pwm3 = &pwm4;
    };
    chosen {
            stdout-path = &uart1;
    };

    memory {
            reg = <0x80000000 0x20000000>;
    };

    reserved-memory {
            #address-cells = <1>;
            #size-cells = <1>;
            ranges;

            linux,cma {
                    compatible = "shared-dma-pool";
                    reusable;
                    size = <0x14000000>;
                    linux,cma-default;
            };
    };
    ...
};
  • 多个根节点合并
  • 根节点下包含多个子节点

子节点追加内容

若要对某个节点A追加内容,只需增设 &A 节点即可,&A 节点内容就是要追加的内容。
A 是节点标签
而且 追加节点 要放在 根节点的外面。

&cpu0 {
    dc-supply = <&reg_gpio_dvfs>;
    clock-frequency = <800000000>;
};

&clks {
    assigned-clocks = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
    assigned-clock-rates = <786432000>;
};


&fec1 {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_enet1>;
    phy-mode = "rmii";
    phy-handle = <&ethphy0>;
    status = "okay";
};

3、节点命令

基本方法

node-name@unit-address{

属性1 = …

属性2 = …

属性3= …

子节点…

}
  • node-name:指定节点的名称
  • “unit-address”用于指定“单元地址”

节点标签

cpu0: cpu@0 {
    compatible = "arm,cortex-a7";
    device_type = "cpu";
    reg = <0>;
}
  • cpu0:标签,为节点名称起一个别名

在追加节点、引用节点时,都要使用该节点的标签。

别名子节点

与上面标签的不同是:别名子节点可以批量地为若干个节点规定别名。

    aliases {
    can0 = &flexcan1;
    can1 = &flexcan2;
    ethernet0 = &fec1;
    ethernet1 = &fec2;
	...
}
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:23:50  更:2021-07-27 16:24:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 22:25:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码