您的位置:首页 > 运维架构 > Linux

Linux为什么使用DeviceTree

2016-03-23 22:27 489 查看

为什么使用DeviceTree

介绍DeviceTree之前先看一下Linux内核中设备注册到系统的方式有哪些:

1. 硬编码(Hard Coding)到板级信息文件中(即一些静态数组、结构体)

2. 将设备信息存放到DeviceTree文件中

实际上不止以上两种解决方案,描述板级设备细节的方案还有ACPI(应用在x86平台上)以及UEFI(Intel首推),ARM是UEFI Form的成员,因此后续ARM平台有可能会使用这种解决方案

对于方式1,内核在Early Boot阶段根据板级信息文定义的设备信息解析并注册设备到设备模型中。这种方式简单粗暴,带来的后果则是内核充斥着大量的用于描述设备信息的静态数据结构,而这些代码使得内核源码越来越臃肿(每新增一个设备,都需要在arch/xxx/mach-xxx/目录下添加静态的数据结构描述板级设备信息)。

对于方式2,设备信息以及层级关系被描述在DT文件中,并编译成二进制文件(DTB),由Bootloader将DTB装载到RAM中并将地址传递给Kernel,Kernel启动时解析DTB并生成和注册其中描述的设备。

显然,使用DT来描述设备信息和层级关系是一种更为先进的方法,同一个编译好的Kernel只需更换DTB文件就可以适配新的硬件(当然,实际并非如此简单),同时设备信息与Kernel独立开来各司其职,使得整个系统结构更清晰,源码不在臃肿。

事实上目前绝大多数架构都已经支持DT,PowerPC最早使用了这项技术(或许应该说是OpenFirmware的产物),ARM架构的维护者们比较懒惰,直到始祖Linus的一声怒吼,ARM Linux社区才得以重视,开始使用了其他架构中早已使用的DT。

下一篇将介绍有关Linux Device Tree的基本知识点:包括dt文件结构、语法、dts、dtsi、dtb、dtc等

浅析Linux Device Tree - 基础部分
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: