什么是设备树?

news2025/6/8 9:37:37

一. 简介

前面只是简单使用过设备树文件,接下来详细谈一谈设备树。掌握设备树是 Linux 驱动开发人员必 备的技能!

因为在新版本的 Linux 中,ARM 相关的驱动全部采用了设备树(也有支持老式驱动的,比较少),最新出的 CPU 其驱动开发也基本都是基于设备树的,比如 ST 新出的 STM32MP157NXP I.MX8 系列等。我们所使用的Linux版本为 4.1.15,其支持设备树,所以正点原子 I.MX6U-ALPHA 开发板的所有 Linux 驱动都是基于设备树的。

二.  什么是设备树?

设备树 (Device Tree) ,将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(Device Tree Source), 这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,例如
CPU 数量、 内存基地址、 IIC 接口上接了哪些设备、 SPI 接口上接了哪些设备等等,如下图所示:
可以看出, 树的主干就是系统总线, IIC 控制器、 GPIO 控制器、 SPI 控制器等都是接 到系统主线上的分支。 IIC 控制器有分为 IIC1 IIC2 两种,其中 IIC1 上接了 FT5206 AT24C02 这两个 IIC 设备, IIC2 上只接了 MPU6050 这个设备。 DTS 文件的主要功能就是按照上图 所示的结构来描述板子上的设备信息, DTS 文件描述设备信息是有相应的语法规则要求的,稍 后我们会详细的讲解 DTS 语法规则。
3.x 版本 ( 具体哪个版本笔者也无从考证 ) 以前的 Linux 内核中 ARM 架构并没有采用设备树。在没有设备树的时候 Linux 是如何描述 ARM 架构中的板级信息呢?在 Linux 内核源码中 大量的 arch/arm/mach-xxx arch/arm/plat-xxx 文件夹,这些文件夹里面的文件就是对应平台下 的板级信息。例如,在/arch/arm/mach-s3c24xx/ mach-mini2440.c 中有如下内容( 有缩减 )
static struct s3c2410fb_display mini2440_lcd_cfg[] __initdata = {
	[0] = {	/* mini2440 + 3.5" TFT + touchscreen */
		_LCD_DECLARE(
			7,			/* The 3.5 is quite fast */
			240, 21, 38, 6, 	/* x timing */
			320, 4, 4, 2,		/* y timing */
			60),			/* refresh rate */
		.lcdcon5	= (S3C2410_LCDCON5_FRM565 |
				   S3C2410_LCDCON5_INVVLINE |
				   S3C2410_LCDCON5_INVVFRAME |
...................................................

		.lcdcon5	= (S3C2410_LCDCON5_FRM565 |
				   S3C2410_LCDCON5_INVVDEN |
				   S3C2410_LCDCON5_INVVFRAME |
				   S3C2410_LCDCON5_INVVLINE |
				   S3C2410_LCDCON5_INVVCLK |
				   S3C2410_LCDCON5_HWSWP),
	},
};

上面的代码描述 mini 2440 这个开发板上的 LCD 息的,
结构体指针数组  struct s3c2410fb_display 描述的 mini-2440 这个开发板上的所有平台相关信 息。这个仅仅是使用 2440 这个芯片的 mini-K2440 开发板下的 LCD 信息, mini-2440 开发板 还有很多的其他外设硬件和平台硬件信息。使用 2440 这个芯片的板子有很多,每个板子都有描 述相应板级信息的文件,这仅仅只是一个 2440
这仅仅只是一个 2440 。随着智能手机的发展,每年新出的 ARM 架构芯片少说都在数十、数百款, Linux 内核下板级信息文件将会成指数级增长!这些板级信息文件 都是 .c .h 文件,都会被硬编码进 Linux 内核中,导致 Linux 内核“虚胖”。
同样的,当 Linux 之父 linus 看到 ARM 社区向 Linux 内核添加了大量“无用”、冗余的板级信息文件,不禁的发出了一句“ This whole ARM thing is a f*cking pain in the ass ”。从此以 ARM 社区就引入了 PowerPC 等架构已经采用的设备树 (Flattened Device Tree) ,将这些描述 板级硬件信息的内容都从 Linux 内中分离开来,用一个专属的文件格式来描述,这个专属的文 件就叫做设备树,文件扩展名为 .dts

三.  总结

一个 SOC 可以作出很多不同的板子,这些不同的板子肯定是有共同的信息,将这些共同的信息提取出来作为一个通用的文件,其他的 .dts 文件直接引 用这个通用文件即可,这个通用文件是 .dtsi 文件,类似于 C 语言中的头文件。
一般 .dts文件 描述 板级信息 ( 也就是开发板上有哪些 IIC 设备、 SPI 设备等 ) .dtsi 文件 描述 SOC 级信息 ( 也就是 SOC 几个 CPU 、主频是多少、各个外设控制器信息等 )
设备树描述的是板级信息,例如,一个开发板上的 CPU 数量、 内存基地址、 IIC 接口上接了哪些设备、 SPI 接口上接了哪些设备等等,   描述设备树的文件叫 DTS(device tree Source),以 .dts结尾的文件表示设备树源文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1355305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打地鼠python程序设计说明,打地鼠游戏界面设计

这篇文章主要介绍了打地鼠python程序设计说明,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 Pygame库是专门为了帮助做出的游戏和其他多媒体应用Python编程语言的一个开放源代…

PyQt学习笔记

文章目录 1 环境搭建1.1 安装PyQt51.1.1 安装1.1.2 验证 1.2 安装PyInstaller1.3 安装PySide1.4 安装InnoSetup1.5 PyCharm配置外部工具1.5.1 PyCharm配置PyLUpdate1.5.2 PyCharm配置QtLinguist1.5.3 PyCharm配置QtDesigner1.5.4 PyCharm配置PyUIC1.5.5 PyCharm配置PyRCC1.5.6 …

SCPMA最新研究论文推荐!中国移动玻色量子发布联合研究成果

《中国科学:物理学 力学 天文学》英文版(SCIENCE CHINA Physics, Mechanics & Astronomy, SCPMA)出版中移(苏州)软件技术有限公司闻经纬和钱岭团队与北京玻色量子文凯团队的研究成果,文章题为“Optical experimental solution for the multiway numb…

win10搭建keras深度学习框架

在Win10系统上安装Keras,你可以按照以下步骤进行: 安装Python环境--建议安装Anaconda3,可以从官方网站下载对应版本的安装程序进行安装。一步一步的next就行了。安装完成后把根目录下的scripts目录加入path系统变量。 使用pip命令安装Tensor…

d3dcompiler_43.dll丢失怎么修复?怎么解决

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到d3dcompiler_43.dll文件”。那么,d3dcompiler_43.dll是什么文件?它的作用是什么?如果缺失了该如何修复呢?本文将详细介绍d3dcompiler_…

《Linux系统与网络管理》复习题库---简答题

1、简述这些分区的名字以及各自的作用。 答: /boot 存放内核镜像的地方,这个文件夹独立分区的意义在于降低不能开机的风险。 /根目录,一般采用 ext3 文件系统,分区的容量一定要大于安装软件包的容量。 /usr 多数软件的默认安装的地…

如何对APP进行安全加固

引言 如今,移动应用市场蓬勃发展,APP数量呈现爆炸性增长。随着5G技术的广泛应用,APP的增长趋势持续增强。然而,由于APP的泛滥,网络攻击者的目标也在逐渐转移,数亿的移动互联网用户面临着病毒攻击的威胁&am…

Mysql 重要知识点1(含面试题1)

Mysql 知识点较多,这里涵盖了基本知识点,包括SQL语句 、重要面试题等。后面还有几章Mysql的知识点,分别是刷题总结与进阶优化SQL 面试题等。 目录 Mysql 安装Mysql 重要知识点SQL 重要语句面试题精选 Mysql 安装 1.官网下载mysql5.7版本压缩…

Vue 中的 ref 与 reactive:让你的应用更具响应性(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

张驰咨询:ZENNER真兰标杆展示——2023年六西格玛DMAIC项目出色落下帷幕

告别了旧年,我们跨入了新的一年!ZENNER在23年初启动的DMAIC项目在2023年12月25日迎来了总结、收获成果的发布会。 ZENNER真兰集团中国区总裁杨燕明先生,张驰咨询公司的两位精益六西格玛黑带大师专家张驰老师和朱成朝老师,以及真诺…

【教学类-09-04】20240102《游戏棋N*N》数字填写,制作棋子和骰子

作品展示 背景需求: 最近在清理学具材料库,找到一套1年多前的《N*N游戏棋》,把没有用完的棋盘拿出来,,想给大4班换花样,并把它们用掉。 程序代码在这里 【教学类-09-03】20221120《游戏棋10*10数字如何直接…

马蹄集oj赛(双周赛第十八次)

目录 幸运的3 打靶 照亮街道 九次九日九重色 寻找串 竹鼠的白色季节 捉迷藏 好的三连 三角数 买马 可怜的小码哥 花园浇水 高次方程 幸运的3 难度:黄金时间限制: 1秒四占用内存:128M 你有 n 个数,可以将它们两两匹配(即将两数首尾相连),每个…

基于springboot公租房申请管理系统

开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven…

【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError

【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError 文章目录 【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError1. 报错的具体情况2. 解决过程3. 其他问题3.1 ModuleNotFoundError: No module named OpenGL3.2 ModuleNotFoundEr…

固定差价没有发展起来,Anzo Capital一语道破

正所谓没有对比就没有伤害,固定差价被浮动差价所取代那也是时代发展的必然结果。固定差价没有发展起来,Anzo Capital今天一语道破。 其实在今天很少有外汇经纪人提供固定的差价。浮动差价变得如此受欢迎,以至于它几乎完全取代了固定差价。那…

从零开始学习Nginx

下载 nginx下载地址:http://nginx.org/en/download.html 启动 双击nginx.exe。打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe ,回车即可 PS:如果安装目录是中文的情况,打开exe文件时会报…

科研上新 | 第4期:语言-音乐对比预训练;查找表实现的神经网络推理;大模型时代重新定义搜索框架

编者按:欢迎阅读“科研上新”栏目!“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里,你可以快速浏览研究院的亮点资讯,保持对前沿领域的敏锐嗅觉,同时也能找到先进实用的开源工具。 本期内容速览 …

手机电脑之间快速传输图片视频文件,不压缩画质、不限制大小的方法!

文件传输功能是日常必备功能,但总有传输工具不得“朕”心—— 想在手机和电脑之间传输稍微大一点的文件,弹出提示“限制多少多少G”,传个5G的视频或文件很平常吧,怎么就实现不了?想要将手机相册的视频和照片转移到电脑…

Python 雷达图的绘制(极坐标图) (Matplotlib篇-14)

Python 雷达图的绘制(极坐标图) (Matplotlib篇-14)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

芯课堂 | MCU之EXT

概述 本文将介绍一下华芯微特MCU的嵌套向量中断控制器(NVIC)与外部中断/事件控制器(EXTI)的使用方法等。 01.嵌套向量中断控制器(NVIC) NVIC的全称是Nested vectoredinterrupt controller,即嵌…