Linux驱动开发(四)--设备树的深度探讨

1、什么是设备树,设备树的引入

LED 驱动为例,如果你要更换 LED 所用的 GPIO 引脚,需要修改驱动程序源码、重新编译驱动、重新加载驱动,为了避免这种复杂的工序问题之一,我们可以通过设备树解决,这样可以避免每次都需要修改.c文件以及相关驱动文件进行重新的代码逻辑梳理之类的问题。
设备树 (Device Tree) ,将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(Device
Tree Source),这个 DTS 文件采用树形结构描述板级设备,也就是 开发板上的设备信息,比如
CPU 数量、 内存基地址、 IIC 接口上接了哪些设备、 SPI 接口上接了哪些设备等等,如下图所示:
                                  

树的主干就是系统总线, IIC 控制器、 GPIO 控制器、 SPI 控制器等都是接 到系统主线上的分支。IIC 控制器有分为 IIC1 和 IIC2 两种,其中 IIC1 上接了 FT5206 AT24C02 这两个 IIC 设备, IIC2 上只接了 MPU6050 这个设备。 DTS 文件的主要功能就是 描述板子上的设备信息DTS 文件描述设备信息是有相应的语法规则要求的,稍后我们会详细的讲解 DTS 语法规则。

从以前(无设备树)的ARM架构去分析:

在没有设备树的时候 Linux 是如何描述 ARM 架构中的板级信息呢?在 Linux 内核源码中 大量的 arch/arm/mach-xxx arch/arm/plat-xxx 文件夹,这些文件夹里面的文件就是对应平台下的板级信息。比如在 arch/arm/mach-smdk2440.c 中有如下内容 ( 有缩减 )
也就是在没有设备树的引入,我们还是利用相关的.c文件来描述设备信息以及资源
 static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {
 
 .lcdcon5 = S3C2410_LCDCON5_FRM565 |
 S3C2410_LCDCON5_INVVLINE |
 S3C2410_LCDCON5_INVVFRAME |
 S3C2410_LCDCON5_PWREN |
 S3C2410_LCDCON5_HWSWP,
......
};
 static struct s3c2410fb_mach_info smdk2440_fb_info __initdata = {
 .displays = &smdk2440_lcd_cfg,
 .num_displays = 1,
 .default_display = 0,
......
};

 static struct platform_device *smdk2440_devices[] __initdata = {
 &s3c_device_ohci,
 &s3c_device_lcd,
 &s3c_device_wdt,
 &s3c_device_i2c0,
 &s3c_device_iis,
};
上述代码中的结构体变量 smdk2440_fb_info 就是描述 SMDK2440 这个开发板上的 LCD
息的,结构体指针数组 smdk2440_devices 描述的 SMDK2440 这个开发板上的所有平台相关信
息。这个仅仅是使用 2440 这个芯片的 SMDK2440 开发板下的 LCD 信息。

从现有(有设备树)的ARM架构去分析:

综上,从此以 后 ARM 社区就引入了 PowerPC 等架构已经采用的设备树(Flattened Device Tree),将这些描述板级硬件信息的内容都从 Linux 内中分离开来,用一个专属的文件格式来描述,这个专属的文件就叫做设备树,文件扩展名为.dts。一个 SOC 可以作出很多不同的板子,这些不同的板子肯定是有共同的信息,将这些共同的信息提取出来作为一个通用的文件其他的.dts 文件直接引用这个通用文件即可,这个通用文件就是.dtsi 文件,类似于 C 语言中的头文件。一般.dts 描述板级信息(也就是开发板上有哪些 IIC 设备、SPI 设备等),.dtsi 描述 SOC 级信息(也就是 SOC 有几个 CPU、主频是多少、各个外设控制器信息等)。

待更新。。。。。2024-06-21

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

7yewh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值