Linux设备树(DTS)介绍

Dts:DTS即Device Tree Source,是一个文本形式的文件,用于描述硬件信息。一般都是固定信息,无法变更,无法overlay。

设备树由来

linux内核源码中,之前充斥着大量的平台相关(platform Device)配置,而这些代码大多是杂乱且重复的,这使得ARM体系结构的代码维护者和内核维护者在发布一个新的版本的时候有大量的工作要做,以至于LinusTorvalds 在2011年3月17日的ARM Linux邮件列表中宣称“Gaah.Guys,this whole ARM thing is a f*cking pain in the ass”这使得整个ARM社区不得不重新慎重考虑平台配置,于是设备树(Device Tree,DT)被ARM社区采用。需要说明的是,设备树最初是由开发固件(Open Firmware)使用的用来向客户程序(通常是一个操作系统)传递数据的通信方法中的一部分内容。在运行时,客户程序通过设备树发现设备的拓扑结构,这样就不需要把硬件信息硬编码到程序中。

设备树的作用

设备树是一个描述硬件的数据结构,甚至你可以将其看成一个大结构体(这个结构体就是平台,成员就是具体的设备),需要注意的是设备树并不能解决所有的硬件配置问题(例如:机器识别),它只是提供一种语言,将硬件的配置从linux内核的源码中提取出来。

Linux使用设备树的主要原因如下

A:平台识别

B:实时配置

C:设备植入

设备树解耦目标

目标一 vendor相关修改,完全独立出来,禁止在soc原生的dtsi中修改,只允许以dtbo的方式存在;

目标二 同基线项目dtbo要共二进制

设备树解耦框架设计

设备树识别原理及设备树共二进制原理

项目号(Project No)与 PCB ID两个变量同时与dtbo中的两个属性“dtsi_No”“pcb_No”完全匹配,就可以找到对应的dtbo文件。而dtbo可以通过Makefile的控制打包到dtbo.img中,这样就实现了共二进制。

设备树代码架构

设备树overlay规则

该节内容为overlay机制原生规则,罗列出来帮助驱动工程师解决各种异常问题。

规则1:对于同一个节点的设置情况,dts中的配置会覆盖dtsi中的配置;

规则2:对于节点的修改,先引用后修改;例如原生节点定义如下:

需要在reserved-memory节点中添加一个新的节点或者直接修改reserved-memory节点的属性,都需要先引用reserved_memory节点(注意节点的引用名与节点名可以不一致)

如上案例中,引用reserved-memory节点,并删除了ranges属性,删除了hyp_mem节点,新增了kboot_uboot_logmem节点;

规则3:只有引用申明的节点,在dtsi中“&节点名”才会生效,否则引用点将不生效;例如:firmware节点下fstab 节点的定义如下

设备树overlay规则

firmware:firmware中“:”之前的内容为引用申明。只有申明后才可以在其他地方引用。Firmware下的fstab 节点没有引用声明,在其他位置就不可以引用。如果要修改fstab节点里的属性,引用firmware节点然后修改其中属性,案例如下:

设备树overlay规则

对于同一个节点的设置情况,dts文件中的内容会覆盖dtsi中的。

设备树调试手段

在调试的过程中,没有达到预期时,需要先确定修改有没有编译到对应的dtbo.img中,就需要反编译dtbo.img

反编译工具

反编译工具代码中自带,只需要初始化一下环境变量就可以使用。初始化指令如下:

设备树调试手段

反编译dtb.img

dtc-I dtb -O dts dtb.img -o dtsi.txt

反编译dtbo.img

mkdtimgdump dtbo.img -b dtbo dtc -I dtb -O dts dtbo.00 -o dtsi.txt

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《算法通关村——位运算常用技巧》

《算法通关村——位运算常用技巧》 位运算的性质有很多,此处列举一些常见性质,假设以下出现的变量都是有符号整数。 ●幂等律:a &aa,a ∣ aa(注意异或不满足幂等律); ●交换律&#xff1…

基于Python实现连锁咖啡店经营情况EDA分析【500010097】

导入模块 import pandas as pd import plotly.graph_objects as go from plotly.subplots import make_subplots import plotly.express as px获取数据 df pd.read_csv(r./data/coffeeshop.csv) data_exploration(df)数据缺失值情况 print(数据缺失值情况:) df.…

【halcon】外观检测总结之灰度操作

1 灰度操作之 滞后延时 *滞后阈值 hysteresis_threshold (ImageInvert, RegionHysteresis, 190, 220, 3)这句话的意思就是,逐个判断这个图片区域里像素的灰度值,如果这个值小于190就不考虑了pass掉,如果大于220就直接入选。值在190和220之间…

大型语言模型与知识图谱融合方法概述

背景意义 大型语言模型(LLM)已经很强了,但还可以更强。通过结合知识图谱,LLM 有望解决缺乏事实知识、幻觉和可解释性等诸多问题;而反过来 LLM 也能助益知识图谱,让其具备强大的文本和语言理解能力。而如果…

JS-项目实战-鼠标悬浮变手势(鼠标放单价上生效)

1、鼠标悬浮和离开事件.js //当页面加载完成后执行后面的匿名函数 window.onload function () {//get:获取 Element:元素 By:通过...方式//getElementById()根据id值获取某元素let fruitTbl document.getElementById("fruit_tbl");//table.rows:获取这个表格…

500报错解决了

问题: 如图所示,控制台报错找不到com.itheima.service.EmpService.page这个函数 刚开始一直以为是SQL语句写错了或者是哪里代码写漏了,检查了很多遍,还把源代码拷过来,执行也不对,于是就直接打开源项目执行…

使用OKhttp3 与青云客AI聊天机器人交互 -Java

1.青云客 官网&#xff1a;http://api.qingyunke.com/ 2.添加依赖 <!--okhttp3 依赖--><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.3</version></dependency&g…

sqli-labs(Less-5) updatexml闯关

updatexml() - Xpath类型函数 1. 确定注入点闭合方式 确认为字符型注入 2. 爆出当前数据库的库名 http://127.0.0.1/sqlilabs/Less-5/?id1 and updatexml(~,concat(~,(select database())),~) --3. 爆出当前用户名 http://127.0.0.1/sqlilabs/Less-5/?id1 and updatexml…

Unity中Shader矩阵的逆矩阵

文章目录 前言一、逆矩阵的表示二、逆矩阵的作用四、逆矩阵的计算五、顺序的重要性六、矩阵的逆总结1、求矩阵的逆前&#xff0c;这个矩阵必须得是个方阵2、只有 A x A ^-1^ A^-1^ x A 1时&#xff0c;A的逆才是A^-1^3、求2x2矩阵的逆&#xff1a;交换 a 和 b 的位置&#xf…

大厂必备的6款React UI框架

优秀的ReactUI框架可以为您节省开发时间&#xff0c;提高开发效率&#xff0c;统一设计语言。你还在为你的项目寻找高质量的ReactUI框架吗&#xff1f;为了让您更容易找到易于使用的UI框架&#xff0c;分享6个优秀的ReactUI框架选项&#xff0c;并介绍了每个UI框架的不同功能和…

91.移动零(力扣)

问题描述 代码解决以及思想 class Solution { public:void moveZeroes(vector<int>& nums) {int left 0; // 左指针&#xff0c;用于指向当前非零元素应该放置的位置int right 0; // 右指针&#xff0c;用于遍历数组int len nums.size(); // 数组长度while …

SSH远程登录协议

目录 什么是ssh服务器 概念 优点 原理 SSH登录 方法一 无需验证 方法二 格式&#xff1a; ssh -l 用户名 IP 地址 -p port -l &#xff1a;指定登录名称 -p&#xff1a;选项&#xff0c;指定登录端口&#xff08;当服务端的端口非默认时&#xff0c;需要使用-p…

mindspore mindyolo目标检测华为昇腾上推理使用、训练;华为OBS文件传输使用

参考&#xff1a; https://github.com/mindspore-lab/mindyolo 使用案例&#xff1a; https://github.com/mindspore-lab/mindyolo/blob/master/GETTING_STARTED.md 安装&#xff1a; pip install mindyolo特别注意opencv-python、opencv-python-headless版本问题&#xff0…

【UI测试】内容及流程

UI测试&#xff08;User Interface Testing&#xff09;是指对于界面设计的测试&#xff0c;目的是验证应用程序在用户界面方面的正确性、易用性和稳定性。 下面是UI测试的内容和流程&#xff1a; 一、UI测试的内容 1、布局测试 页面布局&#xff1a;测试页面上元素排列是否…

php实现选择排序法

选择排序法是一种简单的排序算法&#xff0c;其基本思想是每次从未排序的部分中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;然后放到已排序部分的末尾。 以下是用PHP实现选择排序法的代码示例&#xff1a; <?php function selectionSort($arr) {$n count…

Leetcode刷题详解——岛屿数量

1. 题目链接&#xff1a;200. 岛屿数量 2. 题目描述&#xff1a; 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上…

PHP项目学习笔记-萤火商城-增加一个模块(表涉及到的操作和文件)

背景 是在store的后台添加一个页面&#xff0c;显示的如满意度调查的页面 在router.config.js里面配置一个新的菜单 路径&#xff1a;yoshop2.0-store\src\config\router.config.js 代码如下&#xff0c;很简单&#xff0c;定义了这菜单点击的时候进入的页面&#xff0c;和下面…

C#,数值计算——插值和外推,BaryRat_interp的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 重心有理插值对象 /// Barycentric rational interpolation object. /// After constructing the object, /// call interp for interpolated values. /// Note t…

StyleGAN:彻底改变生成对抗网络的艺术

一、介绍 多年来&#xff0c;人工智能领域取得了显着的进步&#xff0c;其中最令人兴奋的领域之一是生成模型的发展。这些模型旨在生成与人类创作没有区别的内容&#xff0c;例如图像和文本。其中&#xff0c;StyleGAN&#xff08;即风格生成对抗网络&#xff09;因其创建高度逼…

滚雪球学Java(09-1):Java中的算术运算符,你真的掌握了吗?

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…