设备树

简介

最新的内核配置基本上都是通过设备树了。这是个什么东西?简单说,就是描述硬件信息的配置文件。
该配置文件采用类似Jason的语法,来表述各个类型的硬件参数信息,如cpu、memory、nand、lcd等,
简单介绍下,具体可以参考官网上的spec。
每个硬件类型可以通过node来描述,node里面可以包括property和child node,以此类推。

/ {
    model = "TI AM335x EVM";
    compatible = "ti,am335x-evm", "ti,am33xx";

    cpus {
        cpu@0 {
            cpu0-supply = <&vdd1_reg>;
        };
    };
    ... ...
};

‘/’是根节点,model和compatible是属性,cpus是根节点的子节点,而它也有子节点cpu@0。

工作原理

为什么要引入设备树?需要先了解设备树之前是采用何种方式。
u-boot通过ATAGs标签的形式,把少量的参数放到内存的某个位置,在加载内核时,把该参数地址传给内核。内核根据该参数来去对应的设备文件中找到对应的设备函数,一般这些设备相关的程序都放在arch/arm/mach-*类似的目录下,里面有非常多的.c文件来描述该板卡的硬件信息,如cpu、nand等。这样一来,就导致了内核代码量急剧增加,老大linus暴怒,设备树应运而生。其实,在此之前powerPC就已经使用了设备树,全志也使用fex文件表述设备信息,思想都一样的。

设备树引入后,通过dtc编译器编译成dtb二进制格式,存储在Nand中。u-boot加载内核时也会加载dtb,这样内核在初始化阶段会根据dtb的内容进行相应的初始化,并且动态生成平台设备。注意是动态而非之前的静态,这就是最重要的区别,如此设备相关的代码骤减。

当然,平台驱动相应的也需要做些修改,如加上设备树的判断,如果是使用设备树,则调用设备树相关的接口来获取硬件信息,否则,使用老的接口来操作。设备树中节点是通过compatible属性来描述对应的驱动。通用的硬件可以使用通用的节点名,如cpu,memory,这些是在内核初始化阶段用到的,必须统一。而板卡相关的内容,可以私人定制,只要对应的驱动统一起来即可。

资料

  1. 肯定是官网。但是官网的spec也只是入门,不太具有实战性。
  2. 内核源码中的资料,Documentation/devicetree目录下有非常详细的描述。
  3. arch/arm/boot/dts有非常多的dts,选择一个,结合上面两处的资料进行详细研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值