Linux dts 设备树详解(二) 动手编写设备树dts
Linux dts 设备树详解(一) 基础知识
Linux dts 设备树详解(二) 动手编写设备树dts
前言
在简单了解概念之后,我们可以开始尝试写一个简单的设备树,从而加深对设备树整体架构以及部分语法的理解,因为整体知识面比价庞杂,无法面面俱到,本文旨在笔者学习之初对于设备树常用部分的总结与归纳。因为会涉及到很多硬件信息的绑定,详细的可以查阅Linux内核源码下的文档Documentation/devicetree/bindings。具体如下图所示;

硬件结构
1个双核ARM Cortex-A932位处理器;
ARM本地总线上的内存映射区域分布有两个串口(分别位于0x101F1000和0x101F2000)
GPIO控制器(位于0x101F3000)
SPI控制器(位于0x10170000)
中断控制器(位于0x10140000)
外部总线桥上连接的设备如下:
SMC SMC91111以太网(位于0x10100000)
I2C控制器(位于0x10160000)
64MB NOR Flash(位于0x30000000)
外部总线桥上连接的I2C控制器所对应的I2C总线上又连接了Maxim DS1338实时钟(I2C地址为0x58)
具体如下图所示;

设备树dts文件
那么,如何将上面的硬件结构,通过设备树语言描述成dts文件呢?具体我实现在下图,并且做出了详细的解释。其中需要注意的有以下几个属性:
compatitable:兼容性属性;#address-cells,#size-cells:地址编码所采用的格式;节点名称@节点地址:例如gpio@101f3000,这里名称和地址要和实际的对应起来;标签:例如interrupt-parent = <&intc>;,这这里的intc就是一个标签(label),通过&可以获取它的值,这里可以简单的理解成一个变量,然后在下面需要对这个标签进行另外的解析,例如intc:interrupt-controller@10140000;所以,这两个地方的intc都是对应起来的。
最后,具体的实现可以参考下图;

                    
                
                
            
        
浙公网安备 33010602011771号