一、设备树是什么
(1)device tree,设备树,是一种linux内核中采用的参数表示和传递技术
(2)dts,device tree source,设备树源文件(一般说设备树的更改就是指dts)
(3)dtc,device tree compiler,设备树编译/反编译/调试工具
(4)dtb,device tree blob,二进制设备树镜像(一般说设备树的解析就是指dtb)
二、为什么需要设备树
(1)典型需求就是内核设备驱动,我们以驱动为例分析,但是不止可以用于驱动场景
(2)驱动源码包括2大部分:策略(操作函数)和数据(硬件信息)
(3)早期解决方案:策略和数据都在kernel源码中硬编码
硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中的软件开发实践,与从外部获取数据或在运行时生成数据不同。
硬编码数据通常只能通过编辑源代码和重新编译可执行文件来修改,尽管可以使用调试器或十六进制编辑器在内存或磁盘上进行更改。
硬编码的数据通常表示不变的信息,例如物理常量,版本号和静态文本元素
(4)坏处:kernel源码中充斥大量描述硬件信息的文件(不同厂家不同型号的开发板硬件信息),污染内核
三、设备树技术如何工作
(1)驱动开发者编写/改写dts,适配硬件和自己的需求
(2)make uImage时,kernel内部会先编译出dtc,然后用dtc将dts加工成dtb
(3)uboot启动kernel时,将uImage和dtb都准备好并告知uImage在哪里找dtb
(4)kernel启动初期调用内部函数解析dtb,得到硬件信息,并组装成数据结构,配合策略函数工作
设备树只在设备启动时有意义,不会占用内存。
四、设备树应该怎么学
(1)第一层:了解级。不做具体开发。理解设备树原理和实现过程、应用情况即可。
(2)第二层:入门级。基本会用。第一层 + 理解dts格式和关键词、会简单修改和适配。
(3)第三层:深入级。全面掌握。第二层 + 深入理解dts实现的全部关键代码,出问题知道去哪里找。
(4)第四层:资深级。丰富经验。第三层 + 熟悉各种芯片平台、各内核版本的设备树具体实现
五、本专题文章会怎么讲
(1)本专题文章主要内容1:设备树整个实现流程,源码级分析和梳理
(2)本专题文章主要内容2:设备树源码dts的格式和关键词解读
(3)本专题文章主要内容3:设备树实战验证,基于HI3516DV300平台
注:本资料大部分由朱老师物联网大讲堂课程笔记整理而来并且引用了部分他人博客的内容,如有侵权,联系删除!水平有限,如有错误,欢迎各位在评论区交流。