设备树详解之初步介绍

前言

DTS即Device Tree Source设备树源码,Device Tree是一种描述硬件的数据结构,起源于 OpenFirmware在Linux 2.6中,ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx,比如板上的platform设备,resource,i2c_board_info,spi_board_info以及各种硬件的platform_data,这些板级细节代码对内核来讲只不过是垃圾代码.而采用Device Tree后,许多硬件的细节可以直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码.比如我们之前说过的总线模型,驱动程序被分为两部分,一部分为device,另一部分为driver,对于device部分它里面有各种硬件资源,对于driver里面的probe函数会在匹配后调用,在probe函数里面再去分配设置file_operation结构体,结构体里面(open,read,write函数),操作比较麻烦冗余

使用设备树后我们不用再去写device端的.c文件,在DTS文件中构造节点,该节点含有deviced端的硬件资源,通过DTC(Device Tree Compiler)可以将适合人类阅读的Device Tree Source文件转化成适合机器处理的Device Tree binary file(DTB),在嵌入式系统启动时,bootloader可以将保存在flash中的DTB copy到内存,并把DTB的起始地址传递给内核,内核从DTB文件中得到device_node结构体,device_node结构体进一步转化为platform_device结构体,进而获得到device端的硬件资源(该资源来自我们的DTS文件),如下图所示
在这里插入图片描述
.dts文件如下所示

#define S3C2410_GPA(_nr)	((0<<16) + (_nr))
#define S3C2410_GPB(_nr)	((1<<16) + (_nr))
#define S3C2410_GPC(_nr)	((2<<16) + (_nr))
#define S3C2410_GPD(_nr)	((3<<16) + (_nr))
#define S3C2410_GPE(_nr)	((4<<16) + (_nr))
#define S3C2410_GPF(_nr)	((5<<16) + (_nr))
#define S3C2410_GPG(_nr)	((6<<16) + (_nr))
#define S3C2410_GPH(_nr)	((7<<16) + (_nr))
#define S3C2410_GPJ(_nr)	((8<<16) + (_nr))
#define S3C2410_GPK(_nr)	((9<<16) + (_nr))
#define S3C2410_GPL(_nr)	((10<<16) + (_nr))
#define S3C2410_GPM(_nr)	((11<<16) + (_nr))

/dts-v1/;

/ {
   
	model = "SMDK24440";
	compatible = "samsung,smdk2440"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值