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节点下的所有子节点都会自动成为平台设备,匹配各自的驱动。

相关推荐
AI_Lab0144 分钟前
宝塔用了两年,有没有必要换成轻量方案?
linux·运维·服务器
by209991 小时前
Linux GDB 调试与 CGDB 使用
linux·运维·服务器·经验分享
星恒随风1 小时前
Linux网络编程:应用层协议究竟是什么?从网络计算器到TCP Socket抽象基类完整实现
linux·网络·笔记·tcp/ip
feng_you_ying_li4 小时前
linux之网络层
linux·运维·网络
未来之窗软件服务4 小时前
Linux 运维日志删除的多种方式—东方仙盟
linux·运维·服务器·仙盟创梦ide·东方仙盟
小雉系统4 小时前
BcoreOS实战:用一个升级包,让Rocky Linux跑进Debian服务器
linux·运维·服务器·debian
thethefighter4 小时前
快速预览Word、WPS秒开,支持空格弹窗
linux·word·wps·快速预览·空格弹窗·nhdeepview
用户8351414049495 小时前
把日志和寄存器值喂给AI做故障定位,我的实际问法
linux·ubuntu
Ruiery5 小时前
Linux 6.6内核内存管理深度解析(十七):vmalloc — 内核要“虚拟连续“就够:物理页逐个凑,页表来连
linux·运维·服务器
Escalating_xu5 小时前
【Linux 网络编程】ARP 的具体过程与 ARP 欺骗:一条 IP → MAC 映射,怎样改变数据的去向?
linux·网络·tcp/ip