Linux驱动开发中的中间件:设备树

Linux设备树

设备树的产生是为了解决内核源码的arch/arm目录下代码混乱和臃肿的问题(过去每个厂商出个板子就要提供外设硬件和平台硬件信息,这些信息以.c和.h文件的形式呈现)。在使用设备树之后,就使得每个硬件平台的硬件资源仅需要一个设备树文件来描述了,而不用在内核源码的arch/arm下以.c 或 .h 文件来定义。Linux内核则在启动过程中,通过解析设备树中的硬件资源来初始化某个具体的平台。

DTS、DTB、DTC三者的关系

DTS是设备树源码文件;
DTB是DTS编译后得到的二进制文件;
DTC则是将 .dts 文件编译成 .dtb 文件的编译工具。

编译DTS文件

在内核源码的 arch/arm/boot/dts/ 目录下的 Makefile 文件中添加 DTS 文件的信息,即将文件名添加进去,添加位置如下图。(先确定SOC的类型,我的是IMX6ULL,再写入板子的名字,名字是自定义的)
在这里插入图片描述
然后回到内核源码根目录,执行如下命令进行编译

make dtbs
或者
make all

设备树的头文件

设备树可以用 .h 文件作为头文件,并且它也有另一种头文件,即 .dtsi 文件,并且都是用 #include 来引用的。

一般 .dtsi 文件用于描述 SOC 的内部外设信息。

示例:在 imx6ull-alientek-emmc.dts 文件中就引用了如下两个头文件。
在这里插入图片描述
在 imx6ull.dtsi 文件中的描述内容(简化后只留下树节点)如下:

#include <dt-bindings/clock/imx6ul-clock.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include "imx6ull-pinfunc.h"
#include "imx6ull-pinfunc-snvs.h"
#include "skeleton.dtsi"

/ {
    aliases {};
    cpus 
    {
        cpu0: cpu@0 {};
    };

    intc: interrupt-controller@00a01000 {};

    clocks 
    {
        ckil: clock@0 {};
        osc: clock@1 {};
        ipp_di0: clock@2 {};
        ipp_di1: clock@3 {};
    };

    soc
    {
        busfreq {};
        pmu {};
        ocrams: sram@00900000 {};
        ocrams_ddr: sram@00904000 {};
        ocram: sram@00905000 {};
        dma_apbh: dma-apbh@01804000 {};
        gpmi: gpmi-nand@01806000{};
        
        aips1: aips-bus@02000000 
        {
            spba-bus@02000000 
            {
                spdif: spdif@02004000 {};
                ecspi1: ecspi@02008000 {};
                ecspi2: ecspi@0200c000 {};
                ecspi3: ecspi@02010000 {};
                ecspi4: ecspi@02014000 {};
                uart7: serial@02018000 {};
                uart1: serial@02020000 {};
                esai: esai@02024000 {};
                sai1: sai@02028000 {};
                sai2: sai@0202c000 {};
                sai3: sai@02030000 {};
                asrc: asrc@02034
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值