设备树FDT是如何被内核识别的

Exynos4412 内核移植(六)—— 设备树解析 一、描述         ARM Device Tree起源于OpenFirmware (OF),在过去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备、resource、i2c_board_info、spi_board_info以及 阅读详情
AI摘要

本文探讨了设备树(Flat Device Tree)的概念及其在Linux内核中的应用,特别是在ARM架构中的作用。文章详细介绍了设备树从编译到被内核解析的过程,包括U-Boot如何加载dtb文件以及dtb文件如何传递给内核。

1 设备树是如何被编译的?—TBD
2 设备树是如何被uboot加载并被Linux使用的?—TBD
3 设备树如何反编译? —TBD

设备树如何被内核找到的?

设备树(Flat Device Tree)是在Linux3.0 被引入的。起因是Linux忍受不了ARM驱动程序需要编写platform device部分的代码。
这里不得不提引导程序,一般情况下,Linux使用 U-Boot作为bootloader,那么uboot必然承担这初始化Linux运行需要的环境条件的责任。在设备启动的过程中,通常会使用gpio的组合或者不同的电阻来标明设备的不同版本或者不同的产品形态。那么如果设备文件中存在多个dtb文件的时候,则会根据硬件的不同版本选择对应的dtb文件。
U-Boot 传递给内核参数的方法有很多种,这里说的方法是通过寄存器传递的方式。dtb文件的地址就是通过寄存器r2来进行传递的。

//把dtb的地址传到r2寄存器里           
        theKernel (0, bd->bi_arch_number, of_flat_tree);

U-Boot 通过环境变量存储启动Linux的信息,在uboot启动的最后阶段会调用run_main_loop()函数。此函数中会调用bootm_find_other函数来找到dtb文件。此处也有说法是找到ramdisk 此处需要再考证下。
那么现在第一个问题出现了:前面讲到可以通过硬件版本号找到设备的dtb文件和前面说的找到dtb文件好像是存在矛盾的。

此处简单补充下dts,dtc,dtb三者之间的关系,简单讲就是dtc可以将dts编译成dtb文件,也可以将dtb文件反编译生成dts文件。

了解上面这些,下面就可以来看一下dtb文件中的内容是如何被内核解析的了。

设备树如何被内核解析的

ARM64架构的内核的入口是标号_head,直接跳转到stext。在stext中会读取引导程序传递的四个参数,并且保存在boot_args中。并且设置处理器一场级别,创建页表映射,并调用函数_cpu_setup ,为开启处理器的内存管理单元做准备,初始化处理器。调用函数_primary_switch为主处理器开启内存管理单元,搭建c语言执行环境,进入c语言部分的入口函数_start_kernel。
cpu启动过程读取dts
cpu初始化过程中会通过cpu_read_enable_method获取cpu的信息并初始化。

[Linux外设驱动详解]RK3588 U-Boot到Linux内核参数传递机制详解 本文详细分析了RK3588平台上U-Boot向Linux内核传递参数的机制。主要内容包括:1)参数传递架构总览,对比了Rockchip私有ATAGS和标准FDT两种方式;2)FDT处理流程,涵盖获取、加载、重定位和内容修复;3)Rockchip特有的ATAGS内部通信机制;4)bootm命令执行流程和RK3588平台特定实现。文章通过流程图和代码片段展示了参数传递的完整过程,为开发者理解RK3588启动流程提供了技术参考。 阅读详情

相关推荐

深入解析uboot中fdt命令对设备树(dtb)的动态修改机制

本文深入解析了U-Boot中fdt命令动态修改设备树(DTB)的底层机制。通过剖析DTB的内存布局与数据结构,详细阐述了fdt命令如何通过内存搬移、头部信息同步等核心步骤,实现对设备树节点与属性的增删改操作,为嵌入式系统启动阶段的硬件调试与灵活配置提供了关键技术手段。

weixin_29173777的博客 272

我眼中的Linux设备树(Device tree)

转自 http://www.linuxidc.com/Linux/2016-01/127337.htm   概述 设 备树(Device tree)是一套用来描述硬件属相的规则。ARM Linux采用设备树机制源于2011年3月份Linux创始人Linus Torvalds发的一封邮件,在这封邮件中他提倡ARM平台应该参考其他平台如PowerPC的设备树机制描述硬件。因为在此之前,ARM平台

cross的嵌入式技术开发专栏 4321

设备树dtb文件修改全解析:从dts编译到uboot fdt命令的完整流程

本文深入解析了嵌入式Linux开发中设备树dtb文件的完整修改流程。从dts源码编译的传统方法,到利用uboot fdt命令进行运行时动态修改的敏捷路径,详细介绍了工具链使用、版本兼容性处理及设备树叠加等高级技术,旨在帮助开发者构建高效、可控的硬件调试与适配工作流。

cream的博客 488

Linux设备树(Device Tree)

文章转自:http://blog.163.com/thinki_cao/blog/static/83944875201411975617301/ 参考博客:

dabusideqiang的专栏 1800

设备树学习(一、设备树基础)

1、设备树的引入 Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a fucking pain in the ass”,ARM Linux社区对此作出了回应,引入设备树。 ARM Device Tree起源于OpenFirmware (OF),在过去的Linux中,arch/arm/plat-xxx和arch/...

To_run_away的博客 2万+

基于Flink的风控系统

可以使用Flink-Stream进行实时数据流的检测和处理,或者使用Flink-Kafka集群进行数据转发和存储,然后使用Flink-Table进行数据表的查询和分析。在Flink中,可以使用Flink-Stream进行数据流的处理,或者使用Flink-Kafka进行Kafka数据流的消费和处理。Flink的运行时本身也支持迭代算法的执行。可以使用Flink-Stream进行实时数据流的检测和处理,或者使用Flink-Kafka集群进行数据转发和存储,然后使用Flink-Table进行数据表的查询和分析。

m0_68231587的博客 1875

Linux:内核之解析DTS设备树文件并创建设备的过程

内核之解析DTS设备树文件并创建设备的过程 在这里,我分析的是内核源码来自谷歌官方Android7.1.2源码包经过打补丁包"SC60_Android7.1.2_Quectel_SDK_r270060_20180731.tar.gz"后得到的. 本文分析时使用的工具是"SourceInsight". 分析过程中抓大放小,仅分析主干流程,细枝末节的东西未深究,如果有同志愿意分享自己分析的...

甘霖的博客 6547

Mac和VScode配置fortran

macOS系统 vscode fortran gfortran 终端

weixin_43047707的博客 2410

Rockchip RK3588 kernel dts解析之显示模块

Rockchip RK3588 kernel dts解析之显示模块

weixin_43245753的博客 1万+

数字IC物理验证实战 | 从Calibre LVS报告到Innovus定位的Debug全链路解析

本文详细解析了数字IC物理验证中Calibre LVS报告的Debug全流程,从INCORRECT NETS错误的初探到Innovus定位技巧,提供了实战案例和高效工具的使用方法。重点介绍了Calibre高亮功能、Innovus验证命令以及前后端工具联动的关键策略,帮助工程师快速定位和解决LVS问题,提升物理验证效率。

weixin_30919429的博客 127

从零到一:Cadence AC仿真中的运放性能参数深度解析与实战避坑指南

本文深度解析Cadence AC仿真中运放性能参数的精确测量方法,包括开环增益、带宽和相位裕度等关键指标。通过实战案例分享常见设置错误的避坑技巧,帮助工程师提升设计成功率和仿真效率,特别针对全差分运放和工艺角分析提供专业指导。

www00的博客 294

Rockchip RK3588 kernel dts解析之GPIO Pinctrl

RK3588有5个GPIO控制器,每个控制器可以控制32个IO,作为GPIO功能时,端口行为由GPIO控制器寄存器配置。

weixin_43245753的博客 1万+

Python量化投资入门教程:从零构建你的第一个交易策略

量化投资教程以数学模型和计算机程序实现超额收益,选用Python工具链完成数据获取、策略构建及回测。通过移动平均线交叉策略示例,展示数据预处理、信号生成、收益计算及可视化全流程,结合收益率、最大回撤和夏普比率评估策略,并建议参数优化与策略融合提升稳健性。

ylmx5201314的博客 2456

DT_MACHINE_START 板级信息初始化匹配调用机制实现

本文转自:https://www.cnblogs.com/targethero/p/5086085.html 一个最简单的设备树必须包含根节点,cpus节点,memory节点。根节点的名字及全路径都是“/”,至少需要包含model和compatible两个属性。model属性我们在属性那节已经说过是用来描述产品型号的,类型为字符串,推荐的格式为“manufacturer,model-number...

zgp2917的专栏 2244

YOLOv11 改进 - 注意力机制 | EMA (Efficient Multi-Scale Attention) 高效多尺度注意力:跨空间学习与多分支协同增强特征表征,优化多尺度目标检测

本文介绍了高效多尺度注意力(EMA)模块及其在YOLOv11中的结合应用。现有注意力机制在通道维度缩减时可能影响深度视觉表示,EMA模块通过结合通道和空间信息、采用多尺度并行子网络结构等创新点,实现了高效的多尺度注意力机制。其基本原理包括通道和空间注意力结合、多尺度并行子网络设计等。在多个流行基准数据集上的实验表明,该模块能有效提高特征表示能力。我们将EMA集成进YOLOv11,实验证明改进后的模型在目标检测任务中性能优越,具有广泛应用前景

魔改工程师的博客 1293

AI Agent开发第82课-手把手教你把paddleocr-vl做成mcp使其在DIFY里运行

本文详解如何将国产顶尖多模态 OCR 模型 PaddleOCR-VL 封装为标准 MCP(Model Calling Protocol)服务,并通过自研的 HTTP-based MCP Client 接入 Dify 1.10,实现 AI Agent 在对话中自动识别并调用 OCR 能力。该方案已在某头部保险公司真实业务流程中落地,使用了当前最先进的“Agentic AI 原生”设计思想。

打造全国最全的AI Agent开发知识领域的博客 1625

setup_arch函数

Linux内核启动过程中,setup_arch是架构相关初始化的核心入口函数,负责完成CPU、内存、页表等底层硬件环境的搭建。该函数由start_kernel调用,主要功能包括:解析硬件信息(通过ACPI/设备树)、初始化CPU特性、建立内存管理(memblock)、配置页表并开启MMU,以及处理早期启动参数。不同架构(x86_64/ARM64/RISC-V)实现差异明显:x86依赖BIOS/ACPI,ARM64通过设备树获取硬件信息,RISC-V则完全依赖设备树驱动。该阶段最终为内核建立完整的虚拟内存环境

tangzhangyin的专栏 388

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【踩坑】修复飞牛升级后出现存储空间损坏故障的问题

谨慎升级!谨慎升级!谨慎升级!

xfxuezhang.cn 1405

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Linux and the Device Tree

Linux and the Device Tree ------------------------- The Linux usage model for device tree data 本文阅读翻译自linux内核的说明文档usage-model.txt 本文讲述linux如何使用device tree,关于device tree数据类型的详细描述可以参考文档: htt...

weixin_30906671的博客 134

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

U-Boot 和 Linux 内核的关系及设备树详解

本文详细解析U-Boot与Linux内核的关系及设备树工作机制。U-Boot作为嵌入式系统的引导程序,负责硬件初始化、内核加载和参数传递,最终将控制权移交给Linux内核。设备树作为硬件描述数据结构,经历了从硬编码到标准化的演进,包含dts源文件和编译后的dtb二进制文件。文章对比了U-Boot与内核设备树的差异,前者用于硬件初始化和配置,后者供内核驱动识别硬件。通过SD卡控制器配置示例展示了二者的不同属性设置,并图解了设备树从源码编译到内核使用的完整传递流程,帮助开发者理解嵌入式系统启动机制和硬件配置方式

道阻其长,未来可期。笔耕不辍,行则将至! 2180

Linux内核中设备树的实现机制总结

Linux 内核的设备树实现机制通过 “解析二进制设备树→构建内存树形结构→基于 compatible 属性匹配驱动→提供标准化接口访问硬件信息” 的流程,实现了硬件描述与内核代码的解耦。这种设计使同一内核镜像可适配多种硬件平台,大幅降低了嵌入式系统的维护成本,是现代 Linux 内核支持多样化硬件的核心技术之一。

qq_28576837的博客 1970

linux内核设备树解析,设备树文件结构与内核对设备树的解析过程

原标题:设备树文件结构与内核对设备树的解析过程------ 本文授权转载自公众号linux阅码场(微信号:LinuxDev)作者 | 宋牧春Device Tree简介设备树就是描述单板资源以及设备的一种文本文件。本篇文章主要是更深层次的探讨设备文件的构成以及kernel解析设备树的原理。所以,本篇内容并不是针对没有任何设备树知识的读者。本篇文章主要针对已经使用过设备树或者对设备树已经有所了解并想深...

weixin_31085635的博客 814

Linux设备树详解(二)文件构成

设备树就是描述单板资源以及设备的一种文本文件。至于出现的原因,基本的语法和使用方法,上一章节做了基本的介绍。本篇文章主要是更深层次的探讨设备文件的构成。 1. devie tree的编译 Device Tree文件的格式为dts,包含的头文件格式为dtsi,dts文件是一种人可以看懂的编码格式。但是uboot和linux不能直接识别,他们只能识别二进制文件,所以需要把dts文件编译成dtb文件。d...

奇小葩 7264

第三课:linux内核对设备树的处理

这一课是设备树中最重要的一课。 前面我们从内核文档了解到,对于设备树,它里面描述的信息可以分为这三部分: Linux uses DT data for three major purposes: platform identification, runtime configuration, and device population. 事实上,内核对设备树的处理,也会分为与其对应的三部分: 对于...

韦东山嵌入式专栏 1万+
上一篇: Linux 下UVC&V4L2技术简介(四)--介绍下camera相关的硬件部分
下一篇: 深入理解了一下ioctl
野-百-合
博客等级 码龄17年 308粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值