设备树文件(dts文件)的添加与编译

一.  简介

前面说过,在新版本的 Linux 中,ARM 相关的驱动全部采用了设备树(也有支持老式驱动的,比较少),最新出的 CPU 其驱动开发也基本都是基于设备树。所以,掌握设备树是 Linux 驱动开发人员必 备的技能!

本文学习一下 设备树源文件 即 dts文件,以及 dts文件的组织形式。

二.  dts文件(设备树源文件)以及组织形式

1.  DTS、DTB 和 DTC 几个区别?

设备树源文件扩展名为.dts,但是我们在前面移植 Linux 的时候却一直在使用 .dtb 文件,那么 DTS 和 DTB 这两个文件是什么关系呢?
DTS 是设备树源码文件,DTB 是将 DTS 编译以后得到的二进制文件。将 .c 文件编译为 .o 需要用到 gcc 编译器,那么将.dts 编译为.dtb 需要什么工具呢?需要用到 DTC 工具!DTC 工具源码在 Linux 内核的 scripts/dtc 目录下。

2. 编译设备树

编译设备树文件的方法有几种。如下:

(1)  方法一:直接编译内核源码,就同时编译了设备树文件。进入

是的,**`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.dts 成 dtbo 文件:** ```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 ``` - 加载后,设备树覆盖的内容就会合并到主设备树中。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值