Linux kernel devm_of_platform_populate()函数浅谈

devm_of_platform_populate()主要用于父设备驱动 (通常是总线控制器、宿主设备或 MFD 设备)中,当其设备树节点包含需要自动实例化为平台设备的子节点时调用。典型场景包括:

场景 说明
总线控制器驱动 如 I2C、SPI、USB 等控制器,其设备树中定义了挂载的子设备(i2c@...spi@...),驱动需在 probe()中调用此函数,将子节点转换为平台设备,以便子设备驱动绑定。
**多功能设备(MFD)**​ 一个硬件模块包含多个功能单元(如 PMIC),每个功能在设备树中作为子节点描述,父驱动调用此函数创建各功能对应的平台设备。
**简单总线(simple-bus)**​ 某些 SoC 中将一组外设挂在"简单总线"下,总线驱动需通过此函数枚举子设备。

关键点

  • 该函数是 of_platform_populate()资源管理版本,会自动在设备卸载时清理创建的设备,避免内存泄漏。

  • 调用时机通常在父设备驱动的 probe()阶段,确保子设备被正确注册。

  • 若子设备不需要平台设备驱动(例如已通过其他总线类型处理),则无需调用。

示例

I2C 控制器驱动中常见如下代码:

cpp 复制代码
static int i2c_controller_probe(struct platform_device *pdev)
{
    // ... 初始化硬件 ...
    return devm_of_platform_populate(&pdev->dev);
}

这样,设备树中 i2c-controller节点下的所有子节点都会自动成为平台设备,匹配各自的驱动。

相关推荐
其实防守也摸鱼1 小时前
AWVS下载和安装保姆级教程
linux·服务器·git
洛洛呀。2 小时前
Kali系统桥接模式下相关网络故障
linux·服务器·桥接模式
李日灐2 小时前
<4>Linux 权限:从 Shell 核心原理 到 权限体系的底层逻辑 详解
linux·运维·服务器·开发语言·后端·面试·权限
寒秋花开曾相惜2 小时前
(学习笔记)4.1 Y86-64指令集体系结构(4.1.6 一些Y86-64指令 )
linux·运维·服务器·开发语言·笔记·学习·安全
freewlt2 小时前
TypeScript 5.5 新特性深度解析:类型系统的又一次进化
linux·ubuntu·typescript
сокол2 小时前
【网安-Web渗透测试-Linux提权】SUID提权
linux·前端·web安全·网络安全
誰能久伴不乏2 小时前
Qt 混合编程核心原理:C++ 与 QML 通信机制详解
linux·c++·qt·架构·状态模式
运维小斌2 小时前
麒麟v10arm使用dnsmasq部署本地DNS服务器
linux·运维·服务器·网络
佳xuan2 小时前
wsl(linux)安装miniconda及虚拟环境
linux·人工智能·conda