1 DTS文件加载流程
1.1 DTS文件定义
DTS即Device Tree Source设备树源码,Device Tree是一种描述硬件的数据结构。
在Linux2.6中,Arm架构的板级硬件细节过多的被硬编码在arch/arm/plat-xxx和arch/arm/match-xxx,比如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data,这些板级细节代码对内核来讲只不过是垃圾代码,而采用Device Tree后,许多硬件的细节可以直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码。
DTS文件是一种ASCII文本格式的DeviceTree描述。基本上,在ARMLinux内,一个DTS文件对应一个ARM的machine,一般放置在内核的arch/arm/boot/dts/目录。由于一个SoC可能对应多个machine(一个SoC可以对应多个产品和电路板),势必这些DTS文件需包含许多共同的部分。Linux内核为了简化,把SoC公用的部分或者多个machine共同的部分一般提炼为DTSI,类似于C语言的头文件。其他的machine对应的DTS就include这个DTSI文件。
DTS文件加载过程如下图所示:
1.2 DTS结构模型
DeviceTree基本结构如下所示:
DeviceTree的特点
- 1个root节点以”/”开始
- root下面包含两个子节点:node1,node2,node1下面包含两个子节点:child-node1,child-node2
- 各个节点下面都有一系列属性
1.3 DTS应用举例
- 1个双核ARM Cortex-A9 32位处理器;
- ARM的local bus上的内存映射区域分布了两个串口(分别位于0x101F1000和0x101F2000)、
- GPIO控制器(位于0x101F3000)、SPI控制器(位于0x10115000)、中断控制器(位于0x10140000)和一个external bus桥;
- external bus桥上又连接了SMC SMC91111 Ethernet(位于0x10100000)、I2C控制器(位于0x10160000)、64MB NOR Flash(位于0x30000000);
- external bus桥上连接的I2C控制器所对应的I2C总线上又连接了Maxim DS1338实时钟(I2C地址为0x58&#x