设备树引入

一、设备树的基本知识

1、什么是设备树?为什么会有设备树?

        2011年,Linux之父Linus Torvalds发现这个问题后,就通过邮件向ARM-Linux开发社区发了一封邮件,不禁的发出了一句“This whole ARM thing is a f*cking pain in the ass”。之后ARM Linux社区引入了设备树。为什么LinusTorvalds会爆粗口呢?
        平台总线模型是把驱动分成了俩个部分,一部分是device,一部分是driver,设备信息和驱动分离这个设计非常的好。device部分是描述硬件的。一般device部分的代码会放在内核源码中arch/arm/plat-xxx和arch/arm/mach-xxx下面。但是随着Linux支持的硬件越来越多,在内核源码下关于硬件描述的代码也越来越多。并且每修改一下就要编译一次内核。长此以往Linux内核里面就存在了大量“垃圾代码”,而且非常多,这里说的“垃圾代码”是关于对硬件描述的代码。从长远看,这些代码对Linux内核本身并没有帮助,所以相当于Linux内核是“垃圾代码”。但是并不是说平台总线这种方法不好。

        为了解决这个问题,设备树就被引入到了Linux上。使用设备树来剔除相对内核来说的“垃圾代码”,既用设备树来描述硬件信息,用来替代原来的device部分的代码。虽然用设备树替换了原来的device部分,但是平台总线模型的匹配和使用基本不变。并且对硬件修改以后不必重新编译内核。直接需要将设备树文件编译成二进制文件,在通过bootloader传递给内核即可。

        所以设备树就是用来描述硬件资源的文件

2、设备树的基本概念

①为什么叫设备树?

设备树是描述硬件的文本文件,因为语法结构像树一样。所以叫设备树.

如下图:

②基本名词解释

<1>DT:DeviceTree //设备树
<2>FDT:Flattened Device Tree //开放设备树,起源于OpenFirmware(OF)
<3>DTS:DeviceTree source的缩写 //设备树源码
<4>DTSI:DeviceTree sourcein Clude的缩写 //通用的设备树源码
<5>DTB:DeviceTree Blob的缩写 //编译设备树源码得到的文件
<6>DTC:DeviceTree Compiler的缩写 //设备树编译器

DTS、DTSI、DTC、DTB之间的关系:

Linux内核通过读取设备树的描述文件(通常是.dtb或.dts文件),来构建一个内存中的表示,内核和驱动程序则使用这个表示来识别和配置硬件设备。设备树文件在编译时从设备树源文件(.dts)转换成二进制形式(.dtb),然后通常被包含在内核映像或者作为独立文件提供给引导加载程序

补充:

dts    

dts文件是一种ASCII文本格式的设备树描述文件,此文件适合人类阅读,主要是给用户看的。 硬件的相应信息都会写在.dts为后缀的文件中,每一款硬件可以单独写一份xxxx.dts,一般在Linux源码中存在大量的dts文件,对于 arm 架构可以在arch/arm/boot/dts找到相应的dts。对于rk3399开发板arch/arm/boot/dts/rk3399-nanopi4-common.dtsi中一般会包含一个公共部分的dtsi文件,如下:#include "rk3399-nanopi4-rkisp1.dtsi"

dtsi    

<think>好的,用户现在问的是内核从什么时候开始引入设备树的。我之前已经回答过关于Mini2440是否支持设备树的问题,现在用户可能想更深入了解设备树的历史。我需要先回忆一下之前的回答中提到的时间点,比如3.7和3.10版本,但可能需要更详细的信息。 首先,用户可能是嵌入式开发者,或者在学习设备树的相关知识,想要了解其发展历程。他们可能在使用较旧的硬件,比如基于ARM的设备,需要知道内核支持设备树的时间线,以便决定是否升级或如何配置他们的系统。 接下来,我需要确认设备树在内核中的引入时间。根据之前的知识,设备树引入是一个逐步的过程。应该提到Linux内核开始引入设备树支持的主要版本,可能涉及不同的架构,尤其是ARM,因为用户之前的提问涉及Mini2440,属于ARM架构。 需要注意的是,设备树引入并非一蹴而就,不同架构的支持时间可能不同。例如,PowerPC架构可能更早采用,而ARM是在较晚的版本中逐步迁移过来的。用户可能特别关注ARM的情况,但为了全面性,应该涵盖整个内核的发展。 需要查阅准确的版本号和时间点。比如,设备树机制最初在2011年的Linux 3.x版本开始引入,但具体是哪个小版本?之前的回答提到3.7和3.10,这可能对应ARM平台的迁移。需要区分设备树机制的整体引入和各个架构适配的时间。 另外,应该提到设备树起源自Open Firmware,后来被Linux采用。还有,不同子系统的支持时间可能不同,比如设备树绑定文档的规范化可能在后续版本中逐步完善。 用户可能需要了解为什么设备树引入,所以简要说明传统方式的缺点(如板级文件冗余)和设备树的优势(解耦硬件描述和内核代码)也是有必要的,这样能帮助他们理解背景。 同时,要确保时间线准确无误。例如,Linux 3.7于2012年12月发布,开始引入对ARM设备树的支持,而到3.10版本(2013年7月)逐渐迁移。之后在4.x版本中,更多平台转向设备树,比如S3C24xx系列的主线支持在4.0之后。 还要注意,虽然设备树在特定版本引入,但完全迁移到设备树可能需要后续版本的持续努力。例如,旧平台的迁移可能花费更长时间,甚至有些平台可能从未完全迁移,而是被标记为过时。 最后,需要总结设备树引入的意义和现状,让用户明白现在的主流内核版本都依赖设备树,而旧版本或某些传统硬件可能仍使用旧方法。这样用户可以根据自己的需求选择合适的内核版本或进行必要的移植工作。 检查是否有遗漏的重要时间点或事件,确保信息准确,并用清晰的结构分点阐述,帮助用户逐步理解设备树引入过程。</think>Linux内核引入设备树的历程可分为以下几个关键阶段,其发展过程体现了硬件描述方式的重大变革: --- ### 1. **技术背景(2000年代)** - **传统开发模式**:嵌入式Linux通过`mach-*/`目录下的板级C文件(如`mach-s3c2440.c`)硬编码硬件参数,导致: - 内核代码与硬件描述高度耦合 - 相同SoC的不同开发板需要重复编写驱动 - **设备树起源**:概念源自Open Firmware标准(IEEE 1275),用于实现**硬件描述与操作系统解耦**。 --- ### 2. **正式引入阶段(2011-2013)** - **Linux 3.0-3.6(2011-2012)**: - PowerPC架构率先实验性支持设备树(如Freescale MPC8548) - 引入设备树编译器(DTC)和基础解析框架 - **Linux 3.7(2012年12月)**: - **ARM架构正式支持设备树**(首个完整实现) - 开始迁移部分ARM平台(如OMAP、Tegra) - **Linux 3.10(2013年7月)**: - ARM设备树支持进入稳定阶段 - 逐步废弃`mach-*/`目录的板级文件 --- ### 3. **全面推广阶段(2014-2016)** - **Linux 3.15(2014年6月)**: - 强制要求所有新提交的ARM平台代码必须使用设备树 - **Linux 4.0(2015年4月)**: - S3C24xx系列(包括S3C2440)完成主线设备树迁移 - 传统板级文件标记为`DEPRECATED` - **Linux 4.8(2016年10月)**: - 设备树绑定(Device Tree Bindings)文档规范化 - 引入自动化验证工具(如`dt_binding_check`) --- ### 4. **现代内核(2017至今)** - **Linux 4.17(2018年)**: - 移除ARM旧版`board-*.c`文件的编译支持 - **Linux 5.10(2020年12月)**: - S3C24xx驱动标记为**过时**(`CONFIG_ARCH_S3C24XX`) - **现状**: - 设备树成为ARM/x86/PPC/RISC-V等架构的**强制要求** - 新硬件平台**必须**通过设备树描述 --- ### 设备树的核心优势 ```dts // 示例:设备树片段描述GPIO控制器 gpio: gpio-controller@56000000 { compatible = "samsung,s3c2440-gpio"; reg = <0x56000000 0x1000>; #gpio-cells = <2>; }; ``` - **硬件抽象**:独立`.dts`文件描述硬件资源(内存映射、中断、时钟等) - **跨平台兼容**:同一内核镜像可适配不同硬件(仅需更换设备树文件) - **维护简化**:无需修改内核代码即可支持新硬件 --- ### 开发者建议 - **学习重点**:现代嵌入式开发需掌握: 1. 设备树语法(`.dts`/`.dtsi`) 2. 设备树绑定规范(`Documentation/devicetree/bindings/`) 3. 设备树与驱动程序的交互机制(`of_*`系列API) - **历史项目维护**:旧内核(<3.7)需沿用板级文件,新项目强制使用设备树 设备树引入标志着Linux内核从“代码描述硬件”到“数据描述硬件”的范式转变,这一变革显著提升了嵌入式系统的灵活性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值