【Linux 设备树解析与驱动注册机制全景总结】
Linux 设备树解析与驱动注册机制全景总结并非所有设备树节点都由of_platform_populate()解析of_platform_populate()只是设备树解析过程中的“第一阶段”它有严格的适用范围。不同类型的设备如 I2C/SPI 从设备、杂项设备的解析与注册机制存在本质差别。1. of_platform_populate() 的作用范围of_platform_populate()的核心职责是将 CPU 能够直接通过内存映射Memory-Mapped寻址的硬件节点转化为 Platform 设备struct platform_device。它会解析设备树根节点/下的直接子节点带有compatible simple-bus,simple-mfd,amba-bus等属性的容器节点下的子节点它会跳过chosen、memory等特殊节点非平台总线控制器的子节点比如 I2C 控制器、SPI 控制器、PCIe 控制器下面的子节点关于递归深度的补充说明of_platform_populate()默认从根节点开始逐级向下遍历。对于标记为simple-bus、simple-mfd、amba-bus等容器节点会递归深入解析遇到 I2C/SPI 控制器等非平台总线节点时则停止递归。如果需要强制递归解析可以配合of_platform_bus_probe()或设置device_node标志。2. I2C 与 SPI 设备的解析流程I2C / SPI 的从设备节点of_platform_populate()不会主动去解析。解析流程是两段式的控制器阶段由 of_platform_populate() 触发of_platform_populate()遍历到 I2C/SPI 控制器节点如i2c40003000时只把控制器自身实例化为struct platform_device。此时控制器节点下的所有子设备如 EEPROM、传感器被完全忽略。从设备阶段由控制器驱动触发控制器驱动匹配成功并运行probe()函数控制器驱动调用核心层注册函数如i2c_add_adapter()或spi_register_controller()核心层函数会调用专门的 DT 解析函数如of_i2c_register_devices()/of_register_spi_devices()专门去遍历当前控制器节点下的子节点子节点被转换为struct i2c_client或struct spi_device并挂载到i2c_bus_type或spi_bus_type上形象比喻of_platform_populate()只负责造“总线桥/大楼”控制器而大楼里有哪些“房间/租户”从设备由大楼管家控制器驱动入住后自己去登记。3. PCIe 设备的解析方式PCIe 设备与 I2C/SPI 类似也是两段式解析of_platform_populate()只解析 PCIe 控制器本身生成 platform_devicePCIe 枚举机制非 DT 解析发现下游设备生成struct pci_dev4. 杂项设备Misc Device驱动解析概念澄清miscdevice杂项设备并不是一种设备树节点类型也不是一种总线类型Bus Type它只是内核对字符设备cdev的一种简单封装。在设备树层面上如果一个杂项设备是直接通过 CPU 内存映射或 GPIO 控制的例如一个普通的 GPIO LED 或蜂鸣器它的 DT 节点在根节点或 simple-bus 下。这个节点依然是由of_platform_populate()解析的并被生成为struct platform_device。在驱动层面上驱动编写者注册的是platform_driver。当 Platform 驱动匹配成功在驱动的probe()函数中开发者为了省去手动申请字符设备主/次设备号的繁琐步骤调用了misc_register()将其注册为杂项设备生成/dev/xxx设备节点。关于总线归属的关键说明设备树层面的 platform_device确实挂在platform_bus_type上但 misc_register() 注册的 miscdevice并不挂在任何总线上而是直接挂在misc_list链表上通过misc_class类来管理用户空间看到的/dev/dht11是通过misc_class类的devtmpfs创建的不经过任何总线匹配过程5. 补充场景MMIO 寄存器直接访问的从设备有些设备虽然挂在 I2C/SPI 控制器下但如果驱动直接通过 MMIO 寄存器间接控制比如某些 SoC 内部集成的传感器它们可能直接被映射为 platform_device不走 I2C/SPI 子系统。6. 全景对比总结表设备类型DTS 节点位置DT 转换为设备结构体的执行者生成的内核结构体归属的总线类型 (bus_type)内存映射外设(如 UART, GPIO 控制器)根节点或 simple-bus 下of_platform_populate()struct platform_deviceplatform_bus_typeI2C / SPI 控制器根节点或 simple-bus 下of_platform_populate()struct platform_deviceplatform_bus_typeI2C 从设备I2C 控制器节点内子节点控制器驱动中的of_i2c_register_devices()struct i2c_clienti2c_bus_typeSPI 从设备SPI 控制器节点内子节点控制器驱动中的of_register_spi_devices()struct spi_devicespi_bus_typePCIe 设备PCIe 控制器节点下PCIe 枚举机制非 DT 解析struct pci_devpci_bus_type杂项设备(Misc Device)通常在根节点或总线节点下DT 层面of_platform_populate()用户接口驱动内misc_register()struct platform_devicestruct miscdeviceDT 层面platform_bus_typemisc 层面无独立总线通过misc_class管理

相关新闻

Windows系统界面美化新体验:DWMBlurGlass透明模糊效果实战指南

Windows系统界面美化新体验:DWMBlurGlass透明模糊效果实战指南

Windows系统界面美化新体验:DWMBlurGlass透明模糊效果实战指南 【免费下载链接】DWMBlurGlass Add custom effect to global system title bar, support win10 and win11. 项目地址: https://gitcode.com/gh_mirrors/dw/DWMBlurGlass 你是否厌倦了Windows系统…

2026/10/18 4:16:52 阅读更多 →
终极免费IDM激活指南:3分钟永久解锁高速下载神器

终极免费IDM激活指南:3分钟永久解锁高速下载神器

终极免费IDM激活指南:3分钟永久解锁高速下载神器 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 还在为Internet Download Manager(IDM&a…

2026/10/13 14:15:49 阅读更多 →
深入理解Java wait()方法:从监视器锁到线程协作的实战解析

深入理解Java wait()方法:从监视器锁到线程协作的实战解析

1. 从一次线上告警说起:为什么wait()不只是“等待” 那天凌晨,我被一阵急促的告警电话吵醒。监控显示,我们核心交易系统的一个订单处理线程池,CPU使用率异常飙升到90%以上,而队列里却堆积了上万个待处理任务。登录服务…

2026/10/17 14:14:23 阅读更多 →

最新新闻

JsLeakWatcher 报出一批对象,真的是内存泄漏吗:页面缓存、监听器和可达路径怎么分

JsLeakWatcher 报出一批对象,真的是内存泄漏吗:页面缓存、监听器和可达路径怎么分

JsLeakWatcher 报出一批对象,真的是内存泄漏吗:页面缓存、监听器和可达路径怎么分 页面退出后 JsLeakWatcher 报出几十个对象,团队立刻把所有缓存清掉,结果二次进入变慢,告警却仍然存在。工具发现“对象仍可达”&…

2026/10/18 15:00:54 阅读更多 →
Aspose.Slides 25.5 JDK 16 集成指南:License校验与模块化配置

Aspose.Slides 25.5 JDK 16 集成指南:License校验与模块化配置

简介:本资源是面向Java开发者的企业级PowerPoint文档处理解决方案,适用于需在Spring Boot、Servlet等后台架构中实现PPT/PPTX自动化生成、格式转换与深度编辑的中高级开发场景。压缩包共2个文件(1个JAR组件 1个XML许可证)&#x…

2026/10/18 15:00:54 阅读更多 →
2026批量查快递轨迹用什么工具好:从预算成本看,小中大团队各自该花多少钱

2026批量查快递轨迹用什么工具好:从预算成本看,小中大团队各自该花多少钱

先说结论:批量查快递轨迹这件事,预算从48元/天到1288元/年,覆盖了所有规模的团队。关键不是花多少钱,是花的钱能不能对应上你的业务规模。下面用需求对照矩阵,把不同预算档位该匹配什么业务量讲清楚。固乔快递批量查询…

2026/10/18 15:00:54 阅读更多 →
CentOS 8.2 手动编译 libssh 0.9.5 完整指南:独立安装与版本共存

CentOS 8.2 手动编译 libssh 0.9.5 完整指南:独立安装与版本共存

1. 为什么在 CentOS 8.2 上要手动编译 libssh 0.9.5CentOS 8.2 自带的 libssh 版本是 0.9.4,这个版本在功能上其实已经能满足大部分基础场景,比如简单的 SSH 客户端连接、SFTP 文件传输等。但如果你正在做安全审计、渗透测试工具链搭建,或者需…

2026/10/18 15:00:54 阅读更多 →
Linux 开发工具(三) 深入理解编译器: gcc / g++

Linux 开发工具(三) 深入理解编译器: gcc / g++

目录 一. 编译的四个阶段 1.1 预处理 1.1.1 代码示例 1.1.2 命令行宏定义 1.1.3 条件编译的用处 1.2 编译 1.2.1 代码示例 1.3 汇编 1.3.1 代码示例 1.4 链接 1.4.1 代码示例 二. 动态库和静态库 2.1 什么是库 2.2 库文件的命名规则 2.3 动静态库 2.4 动态链接…

2026/10/18 15:00:54 阅读更多 →
对话工具升级为生成式界面引擎:免费开放与交互范式切换

对话工具升级为生成式界面引擎:免费开放与交互范式切换

1. 这次升级到底改了什么:从“对话工具”到“生成式界面引擎”先把结论摆在前面:这次更新的核心不是“模型又聪明了一点”,而是交互范式的切换。过去的对话产品,本质上是一个文本进、文本出的黑盒,你问它答&#xff0c…

2026/10/18 14:59:53 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →