DTS,DTC, DTB你都认识吗?

本文介绍了Linux内核中设备树的概念及其在资源分配和模块装载中的作用。设备树通过DTS文件描述硬件配置,这些文件可以相互包含,并通过DTC编译成DTB文件供系统使用。文章还简要解释了DTS文件的基本语法。

0?wx_fmt=jpeg

在现在的linux内核中都采用设备树来管理资源分配和模块装载,减少依赖性,在树莓派的内核系统中也是这样,设备树其实就是硬件资源的描述文件,代表硬件配置的节点,每一个节点又可以包括子节点和属性。设备树文件一般都是以.dts为后缀的文本文件,即我们常说的DTS(Device TreeSource), 语法有点像C语言,但还是有区别的,要注意。如下面的文件就是一个DTS文件

/dts-v1/;

/include/ "common.dtsi";

 

/ {

    node1 {

        a-string-property ="A string";

       a-string-list-property = "first string", "secondstring";

        a-byte-data-property= [0x01 0x23 0x34 0x56];

        cousin: child-node1{

            first-child-property;

           second-child-property = <1>;

           a-string-property = "Hello, world";

        };

        child-node2 {

        };

    };

    node2 {

        an-empty-property;

        a-cell-property =<1 2 3 4>; /* each number (cell) is a uint32 */

        child-node1 {

            my-cousin =<&cousin>;

        };

    };

};

 

/node2 {

   another-property-for-node2;

};

这里大家要注意一点一个DTS文件可以包含其他的DTS文件,如上图中的/include/"common.dtsi";这有点像C语言中的头文件包含。

那么这个DTS文件经过DTC(DeviceTree Compiler)编译后就变为DTB(DeviceTree Blob)文件。

关于更多DTS的语法和用法大家可以参考内核文档的booting-without-of.txtusage-model.txt文件内容。关于设备树中的节点和属性是如何来描述硬件细节的可以参考bindings文件中的文档,都有详细的说明。设备树的理解和应用也是一个难点,希望大家都理解和掌握。

0?wx_fmt=jpeg

是的,**`overlay.dts` 是设备树文件**,它是一种特殊的设备树源文件(Device Tree Source),用于描述**设备树覆盖(Device Tree Overlay)**。 --- ### **设备树覆盖(Device Tree Overlay)是什么?** 在 Linux 嵌入式系统中,设备树(Device Tree)用于描述硬件配置信息。传统的设备树(`.dts` 文件)在编译后生成 `.dtb` 文件,用于引导时加载到内存中,告诉内核硬件信息。 而 **设备树覆盖(Device Tree Overlay)** 是一种机制,允许你在系统运行时**动态地修改设备树**,从而动态添加或修改硬件配置,而不需要重新编译整个设备树。 --- ### **overlay.dts 是什么?** - `overlay.dts` 是一个**设备树覆盖源文件**。 - 它定义了需要添加或修改的节点信息,通常用于在运行时动态加载到主设备树中。 - 编译后会生成 `overlay.dtbo` 文件(Device Tree Blob Overlay),这是可以被系统加载的二进制格式。 --- ### **设备树覆盖的典型使用场景** 1. **动态添加外设**: - 例如在运行时插入一个通过 SPI 或 I2C 连接的传感器模块。 - 使用设备树覆盖来描述这个外设的硬件信息。 2. **启用/禁用某些功能**: - 比如启用某个 GPIO 引脚作为 LED 控制。 - 在运行时通过加载不同的 overlay 来启用不同功能。 3. **避免重新编译主设备树**: - 主设备树通常在内核启动时加载一次,修改它需要重新编译和烧录。 - 而 overlay 可以动态加载,非常灵活。 --- ### **overlay.dts 的结构示例** ```dts /dts-v1/; /plugin/; / { compatible = "brcm,bcm2835"; fragment@0 { target-path = "/aliases"; __overlay__ { led0 = "/leds/power-led"; }; }; fragment@1 { target = <&gpio1>; __overlay__ { power-led { compatible = "gpio-leds"; reg = <0x123>; label = "power-led"; gpios = <&gpio 47 GPIO_ACTIVE_HIGH>; default-state = "on"; }; }; }; }; ``` --- ### **如何使用设备树覆盖?** 1. **编译 overlay.dtsdtbo 文件:** ```bash dtc -@ -I dts -O dtb -o overlay.dtbo overlay.dts ``` 2. **加载设备树覆盖到系统中:** - 使用 `configfs` 和 `overlay` 接口动态加载: ```bash mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/device-tree/overlays/overlay0 cat overlay.dtbo > /sys/kernel/config/device-tree/overlays/overlay0/dtbo ``` - 加载后,设备树覆盖的内容就会合并到主设备树中。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值