当前位置: 首页 > news >正文

从零拆解Linux设备驱动模型:platform_bus注册到probe调用,每一步都给你画清楚

从零拆解Linux设备驱动模型:platform_bus注册到probe调用,每一步都给你画清楚

开场白

如果你写过Linux驱动,一定见过module_platform_driver这个宏。八成你也遇到过来回翻 dmesg 就是看不到 probe 被调用的尴尬——insmod 完一点反应都没有,设备树配了跟没配一样,调试了一整天才发现是 compatible 字符串少打了个逗号。

我不打算讲那种"platform 驱动是 Linux 设备模型的一种抽象"的废话。今天直接从内核源码入手,把platform_driver_register()platform_device_register()这两条调用链上的每一个节点都扒开来看,配合 Mermaid 流程图,一次性讲清楚设备注册到 probe 调用的完整生命周期。


1. 一切的起点:platform_bus_type

先说一个很多人不知道的事:platform bus 并不是硬件意义上的总线——它不像 PCI 或者 USB 那样有物理电气信号。它本质上是一棵虚拟的树,用来挂载那些"没有真实总线"的设备。SoC 上的 UART、I2C、SPI 控制器,绝大多数都属于 platform device。

platform bus 的核心定义在drivers/base/platform.c里,我们来直接看这段代码:

structbus_typeplatform_bus_type={.name="platform",.dev_groups=platform_dev_groups,.match=platform_match,.uevent=platform_uevent,.dma_configure=platform_dma_configure,.pm=&platform_dev_pm_ops,};

每个 bus_type 最关键的就是.match指针——内核用它在总线上遍历已注册的驱动和设备,找到合适的配对。platform_match的优先级顺序如下:

  1. OF (Device Tree) 匹配:用 compatible 字符串配
  2. ACPI 匹配:用 ACPI ID 配
  3. ID table (platform_device_id) 匹配:传统方式
  4. name 直接匹配:驱动名和设备名直接比较

大部分现代 ARM/ RISC-V 嵌入式开发走的是第一种——设备树匹配。


2. platform_driver_register() 完整调用链:一条通向 probe 的公路

这个是今天的主角。让我先给你一张全局图,然后再逐段分析。

driver_boundreally_probeof_driver_match_deviceplatform_matchdriver_match_device__driver_attachdriver_attachbus_add_driverdriver_registerplatform_driver_registermodule_platform_driverdriver_boundreally_probeof_driver_match_deviceplatform_matchdriver_match_device__driver_attachdriver_attachbus_add_driverdriver_registerplatform_driver_registermodule_platform_driveralt[匹配成功][匹配失败]
http://www.jsqmd.com/news/1140919/

相关文章:

  • 加工坐标系摆放方式详解(现场实用版)
  • 从单体到微服务的灰度迁移策略:分步拆解不掉线的完整方案
  • 2026年选PP吸塑加工公司,看准这三点不踩坑
  • 金蝶云星空的网络控制设置
  • ComfyUI视频合成终极指南:5分钟掌握AI视频工作流
  • 计算机毕业设计之jsp某公司网络信息安全方案的设计
  • Linux 运维核心命令与配置
  • 工业信号干扰解决方案与FOD4216光耦应用
  • QQ空间备份终极指南:一键保存你的青春回忆
  • 终极免费直播录制神器:StreamCap如何一键搞定40+平台自动化录制
  • 浏览器文档下载解决方案:kill-doc如何让您轻松获取30+平台文档资源
  • 数据中心液冷冷却液怎么选?看懂ASHRAE第五版热指南就够了
  • 3分钟掌握ROS机器人仿真:wpr_simulation零基础入门终极指南
  • AI工作流自动化的触发与回退设计:人机协作的分级策略、审核节点与状态机建模
  • 性能测试|Tomcat服务器监控与调优
  • HapTile:面向接触密集型操作的触觉-视觉-语言多模态数据基座
  • 移动端部署EmbeddingGemma-300M:5个核心技巧实现离线语义搜索
  • 键盘定制革命:3天从零掌握QMK Toolbox的智能刷写艺术
  • 5分钟上手:Switch图形化注入工具TegraRcmGUI终极指南
  • 终极微信小程序图表库指南:wx-charts完整教程
  • 不用反复切换软件 Hermes 离线数字助手零基础落地全过程
  • 隐藏神器,一键隐藏
  • 厚膜无感高压电阻在储能行业的应用
  • EhViewer如何构建移动端漫画应用的安全防护体系?
  • 边缘推理延迟瓶颈分析工具链:从模型级到算子级的逐层 Profile 方法详解
  • Vim编辑器完全指南与Shell命令补充:从零到实战
  • MySQL 系统学习 第二阶段 第三章 DQL(Data Query Language)第三节:ORDER BY + LIMIT(排序 + 分页)
  • 近期这4个技术小动态,可能悄悄影响你的企业数字化
  • MyFramework:Unity大型项目里的 UI 生命周期应该怎么管理
  • React 19 并发特性实战:useTransition 如何让 AI 面板不再卡顿