首页 > 系统相关 >Linux设备树(DTS)介绍

Linux设备树(DTS)介绍

时间:2023-11-15 22:06:52浏览次数:40  
标签:反编译 引用 dtbo Linux DTS dtsi 节点 设备

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

Linux设备树(DTS)介绍_维护者

设备树由来

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要共二进制

设备树解耦框架设计

Linux设备树(DTS)介绍_维护者_02

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

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

设备树代码架构

Linux设备树(DTS)介绍_反编译_03

设备树overlay规则

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

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

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

Linux设备树(DTS)介绍_反编译_04

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

Linux设备树(DTS)介绍_设备树_05

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

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

Linux设备树(DTS)介绍_维护者_06

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

Linux设备树(DTS)介绍_设备树_07

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

设备树调试手段

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

反编译工具

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

Linux设备树(DTS)介绍_设备树_08

反编译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

标签:反编译,引用,dtbo,Linux,DTS,dtsi,节点,设备
From: https://blog.51cto.com/u_15641375/8407618

相关文章

  • 如何在 Linux 上部署 RabbitMQ
    如何在Linux上部署RabbitMQ目录如何在Linux上部署RabbitMQ安装Erlang从预构建的二进制包安装从源代码编译ErlangRabbitMQ的安装使用RabbitMQAssistant连接RabbitMQAssistant是一款优秀的RabbitMQ可视化管理工具,提供丰富的管理功能。下载地址:https://www.redisan......
  • Linux操作系统优化 I/O调度,透明大页,swap,NUMA
    I/O调度的4种算法对于固态硬盘来说使用NOOP是最好的,DeadLine次之,而CFQ效率最低。CFQ(完全公平排队I/O调度程序)特点:在最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器也是最好的选择.CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,......
  • Linux系统Keepalive Nginx做前置机配置
     1、软件官网下载https://www.keepalived.org/download.htmlhttp://nginx.org/download/选择软件版本如下[root@ZE-NGXFR01data]#lltotal1960-rw-------1sysadmsysadm927631Nov1510:34keepalived-2.0.10.tar.gz-rw-------1sysadmsysadm1073322Nov1511:01......
  • Linux管理员密码恢复
    Linux管理员密码恢复在大多数的linux中在GRUB界面按下e键,进入启动命令编辑模式,在这里一般有下面这三行东西: 其中:第一行root行表示了指定根目录为哪个盘那个分区第二行kernel行表示了要加载的内核文件第三行initrd行表示了指定要加载的初始内存文件系统文件,用于在启动过程中......
  • putty连接linux时慢
    情况描述:putty连接rhel6/7时输入用户可能会等待10-30秒才有提示输入密码解决办法:vi/etc/ssh/sshd_config###找到GSSAPIAuthenticationyes,修改为GSSAPIAuthenticationno###注意,这里你也需要将UseDNS修改为no,CentOS默认是yes,即使这行已被注释,你也需要加上UseDNSno ......
  • linux Libevent 轻量级事件通知库API简介和示例
    1.事件处理框架libevent是一个C语言编写,轻量级开源高性能事件框架。事件驱动,支持多种IO多路复用(如epoll),支持注册优先级等//头文件#include<event2/event.h>//创建一个事件处理框架structevent_base*event_base_new(void);//销毁一个事件处理框架voidevent_ba......
  • Linux I/O重定向与管道详解
    原理
在Linux中,I/O重定向是通过重定向符号实现的。标准输入重定向使用符号“<”,标准输出重定向使用符号“>”。
例如,将文件file.txt的内容输出到终端,可以使用以下命令:catfile.txt将文件file.txt的内容输出到文件output.txt,可以使用以下命令:catfile.txt>output.txt管......
  • Linux网关设置
    你需要将网卡为en1,IP地址为192.168.3.12,网关为192.168.3.1的路由策略设置为在访问192.168.3.0/24网段时走en1网卡,那么你可以通过下面的命令设置: ......
  • Linux文件管理详解
    Linux文件系统的体系结构
Linux文件系统采用层次结构,从根目录(/)开始,包含多个子目录和文件。文件系统之间通过虚拟文件系统(VFS)进行通信,VFS使得Linux可以支持多个不同的文件系统,每个表示一个VFS的通用接口。Linux文件系统组成
Linux文件系统主要由以下几部分组成:1. 文件:文件是存......
  • Linux公共账户管理详解
    Linux公共账户管理简介
Linux公共账户管理是Linux系统管理中的重要环节,涉及到系统的安全性和稳定性。在Linux系统中,每个用户都有一个唯一的用户名和密码,用于登录系统并执行各种操作。公共账户管理的主要任务包括账户的创建、删除、权限设置、密码管理等。
Linux公共账户管理操......