Linux设备树的引入

【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) 

Linux设备树的引入

   在过去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的板级细节代码(如platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data),而这些板级细节对于内核来讲,不过是垃圾! 为了改变这种局面,Linux社区的大牛们参考了PowerPC等体系架构中使用的Flattened Device Tree(FDT),也采用了Device Tree结构,许多硬件的细节可以直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码。

1. 设备树的基础概念

   Device Tree是一种描述硬件的数据结构,设备树源(Device Tree Source)文件(以.dts结尾)就是用来描述目标板硬件信息的。

   Device Tree由一系列的结点(node)和属性(property)组成,而结点本身可包含子结点。所谓属性,其实就是成对出现的name和value。

2. 设备树的基本类型

所有的设备树文件都在Linux源代码下的arch/arm/boot/dts, 选择和自己板子匹配的设备树文件进行试验.

/dts-v1/;
#include "xxxxx.dtsi"	/* 含义与C一样 */

/ {	/* '/'设备树的根节点 */
	model = "xxxxx DEMO Board";
	compatible = "xxxxx,yyyyyy";	
	
	memory {	/* 子节点: memory */
		device_type = "memory";
		reg = <0x82000000 0x20000000>;
	};

	led {	/* 子节点: led */
		compatible = "ybk_led";
		reg = <0x120D6100 1>;
	};
};

可见, 设备树是一个简单的节点和属性树,属性是键值对,节点可以包含属性和子节点。
   其中led是我加进去的子结点, 节点中的compatible是驱动程序用于匹配时用到的值, 而reg就是相关的寄存器资源.

3. 将上面的设备树编进kernel后的效果

# 可见, 我们找到了我们在设备树文件定义的led
/sys/firmware/devicetree/base # ls
	led
	....................................

/sys/firmware/devicetree/base/led # ls
compatible  name        reg
/sys/firmware/devicetree/base/led # cat compatible
ybk_led
/sys/firmware/devicetree/base/led # cat name
led
/sys/firmware/devicetree/base/led # cat reg 
a
/sys/firmware/devicetree/base/led # hexdump -C reg 
00000000  12 0d 61 00 00 00 00 01                           |..a.....|
00000008

此时可见我们的设备信息已经加载到了kernel中了, 后面我们编写驱动将设备信息用起来即可!

4. 设备树 与 设备驱动总线平台 的关系

在这里插入图片描述

写得很不错的文章:

Linux 设备树(DTS)的深入理解

Exynos4412 内核移植(六)—— 设备树解析

Linux 设备驱动开发 —— 设备树在platform设备驱动中的使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

安河桥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值